python 中的 IBM cplex ilog VS docplex
IBM cplex ilog VS docplex in python
目前,我正在 python 上处理 docplex。
我刚刚发现 IBM cplex Ilog 和 docplex 的结果大不相同。
尽管他们的约束,objective功能,一切都是相同的,他们的解决方案却大不相同。
在某些情况下,docplex 说不可行,即使它在 Ilog 中是可行的。
我试图限制 docplex 公差的完整性和最小间隙,但同样的问题发生了。
有人知道为什么会这样吗?以及如何解决这个问题??
两个版本之间一定有什么不同。您可以使用 refine_conflict 了解不可行性的来源
为了了解不同之处,您可以将模型导出到 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
"""
补充 Alex 的回答:在 Docplex 中,Model.export_as_lp(path'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 具有调查不可行模型的工具,但在确保两个模型相同之前没有意义。
目前,我正在 python 上处理 docplex。
我刚刚发现 IBM cplex Ilog 和 docplex 的结果大不相同。
尽管他们的约束,objective功能,一切都是相同的,他们的解决方案却大不相同。
在某些情况下,docplex 说不可行,即使它在 Ilog 中是可行的。
我试图限制 docplex 公差的完整性和最小间隙,但同样的问题发生了。
有人知道为什么会这样吗?以及如何解决这个问题??
两个版本之间一定有什么不同。您可以使用 refine_conflict 了解不可行性的来源
为了了解不同之处,您可以将模型导出到 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
"""
补充 Alex 的回答:在 Docplex 中,Model.export_as_lp(path'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 具有调查不可行模型的工具,但在确保两个模型相同之前没有意义。