2016-09-13 132 views
2

我在Cplex中使用Python API来解决线性编程问题。当使用的Cplex,我有以下结果:Cplex给出了两个不同的结果?

The result is solved directly by Python API

但后来我救了我的LP prolem为LP文件和使用的Cplex再解决,其结果是从第一个一点点的区别:

enter image description here 有人给出解释吗?

下面是我的函数:

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

由于算法的随机性,在这种情况下,它似乎以**确定性模式**工作。你必须检查文档这意味着什么(确定性+并发是一种矛盾;但也许它确实是确定性的)。同时检查两种方法是否使用相同的随机种子! – sascha

+0

我发现:“确定性意味着多个在同一平台的相同参数设置下运行相同的模型将重现相同的解决方案路径和结果”。但在这种情况下,这两者都是确定性的,但给出了不同的结果。 Cplex是否应该提供相同的结果? –

回答

2

如果我理解正确,你正在使用的文件,LP在你第一次运行导出解决第二次。写入LP格式时可能会失去精度。改为使用SAV格式。

0

只是添加到rkersh的评论。以确定性模式运行时,CPLEX应每次都给出相同的答案。但是,如果将模型作为LP文件编写出来,那么在某些数字中将会失去一些精确度,这会干扰问题,即使只是轻微地出现问题,并且这通常会导致不同的答案。 SAV格式最接近您保存时CPLEX内部模型的忠实副本。但即使如此,我也不确定通过交互式求解程序的CPLEX行为与通过API的行为相同。如果你在同一个硬件上运行它们,我希望它们是相同的,但是在不同的机器上,你可能仍然会得到不同的行为(不同的CPU,内存等)

相关问题