我需要为线性程序找到一个精确的实际解决方案(其中所有输入都是整数)。重要的是,求解器还将解作为有理数输出,理想情况下不使用浮点数进行任何中间步骤。
GLPK可以进行精确算术,但不能将解作为有理数显示(即1/3得到0.3333)。我可能试图猜测那个数字是什么意思,但这似乎非常脆弱。
我无法找到可以做这种事情的LP求解器。有吗?表现不是一个大问题;我的问题非常小。 (我确实研究过使用像Z3这样的SMT求解器;他们可以解决这些问题并提供精确合理的解决方案,但他们采用量词消除而不是使用更简单的线性程序算法,如Simplex)
答案 0 :(得分:1)
SoPlex可以使用有理算法来精确地解决LP。像这样使用它:
soplex -X -Y -o0 -f0 problem.lp
选项X
和Y
将以有理数字打印原始和双重解,而o0
和f0
将最优性和可行性容差设置为0,从而解决LP确切。
您需要安装GMP(或Windows上的MPIR)才能使用合理的功能。与QSopt_exact相比,一个优点是SoPlex使用混合技术,将双精度计算的速度与有理算术的精确精度(iterative refinement)相结合。