目前,我正在开发python上的docplex。
我刚刚发现IBM cplex Ilog和docplex的结果是完全不同的。
尽管它们的约束、目标函数、一切都是相同的,但它们的解决方案却非常不同。
在某些情况下,docplex说不可行,即使它在Ilog中是可行的。
我试图在docplex公差中限制完整性和最小间隙,但同样的问题也发生了。
有没有人知道为什么会这样?如何解决这个问题呢??
发布于 2020-07-10 14:24:44
为了了解其中的不同之处,您可以将模型导出为lp文件。
看见
mdl.export("c:\\temp\\buses.lp")在……里面
from docplex.mp.model import Model
mdl = Model(name='buses')
nbbus40 = mdl.integer_var(name='nbBus40')
nbbus30 = mdl.integer_var(name='nbBus30')
mdl.add_constraint(nbbus40*40 + nbbus30*30 >= 300, 'kids')
mdl.minimize(nbbus40*500 + nbbus30*400)
mdl.solve()
mdl.export("c:\\temp\\buses.lp")
for v in mdl.iter_integer_vars():
print(v," = ",v.solution_value)
"""
which gives
nbBus40 = 6.0
nbBus30 = 2.0
"""发布于 2020-07-10 16:01:03
补充一下Alex的回答:在Docplex中,Model.export_as_lp(路径‘c:/temp/mymodel.lp’)是从Docplex模型生成LP文件的方法。在Cplex的Python API中,您有一个Cplex实例,使用cpx.write('c:/temp/mymodel_cplex.lp')生成LP文件。
如果您的模型是相同的,那么两个LP文件也应该是相同的(除了变量顺序上的一些差异,例如x2+x1而不是x1+x2)。如果您需要在两个API中使用相同的模型,则必须首先达到此相等,然后才能进一步操作。
DOcplex有一些工具可以调查不可行的模型,但在确保两个模型完全相同之前,没有任何意义。
发布于 2020-07-10 08:09:29
两个版本之间一定有不同之处。您可以使用refine_conflict来了解不可行性的来源
https://stackoverflow.com/questions/62821830
复制相似问题