2016-09-13 133 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,內存等)

相關問題