我在Cplex中使用Python API来解决线性编程问题。使用Cplex时,我得到了以下结果:
然后我将我的LP问题保存为 lp文件并使用Cplex再次解决,结果与第一个有点不同:
以下是我的功能:
def SubProblem(myobj,myrow,mysense,myrhs,mylb):
c = cplex.Cplex()
c.objective.set_sense(c.objective.sense.minimize)
c.variables.add(obj = myobj,lb = mylb)
c.linear_constraints.add(lin_expr = myrow, senses = mysense,rhs = myrhs)
c.solve()
lpfile = "Save_models\clem.lp"
c.write(lpfile)
print("\nFile '%s' was saved"%(lpfile))
答案 0 :(得分:2)
如果我理解正确,您将第二次使用在第一次运行中导出的LP文件进行求解。写入LP格式时,您可能会失去精度。请改用SAV格式。
答案 1 :(得分:0)
只是为了加入rkersh的评论。在确定性模式下运行时,CPLEX每次都应给出相同的答案。但是,如果您将模型作为LP文件编写,您将在某些数字中失去一些精确度,这将扰乱问题,即使只是轻微的,这通常会导致不同的答案。 SAV格式是您在保存时可以获得CPLEX内部模型的忠实副本的最接近的格式。但即便如此,我也不确定CPLEX通过交互式求解器的行为是否与通过API的行为相同。如果你在相同的硬件上运行它们,我希望它们是相同的,但在不同的机器上你可能仍然会得到不同的行为(不同的CPU,内存等)