首页 > 解决方案 > 重置 docplex 中的变量值 - Python

问题描述

我有一个数学模型('mdl'),我想使用 python 中的 docplex 库以迭代方式解决它,如下面的简化示例:

mdl = Model("LTC")
x = mdl.binary_var_dict(set_idx1, name="x")
#model defined here
for i in range(0, 5):
    solution = mdl.solve()

对于每次迭代,我想重置变量的值,以确保每次运行都不会以初始解决方案(来自上一次迭代)开始。我怎样才能实现这个目标?谢谢。添加 'mdl.clear_mip_starts()' 是否有帮助(如下所示)?

mdl = Model("LTC")
x = mdl.binary_var_dict(set_idx1, name="x")
#model defined here
for i in range(0, 5):
    solution = mdl.solve()
    mdl.clear_mip_starts()

或者我应该像下面这样一个一个地清除每个变量?

mdl = Model("LTC")
x = mdl.binary_var_dict(set_idx1, name="x")
#model defined here
for i in range(0, 5):
    solution = mdl.solve()
    x.clear()

谢谢!

标签: pythondocplex

解决方案


默认情况下,Model实例会“记住”上一次求解的详细信息,将上一次求解用作下一次求解的 MIP 开始。

如果您想重新开始求解,只需将clean_before_solve=True关键字参数添加到Model.solve(),如

.solve(clean_before_solve=True, log_output=True)

您不应该在日志中看到任何对 MIP 启动的引用。顺便说一句,变量容器(列表或字典)没有“重置”方法。

要回答您的问题,Model.clear_mip_starts仅清除输入的 mip 开始,而不是解决历史记录中的那些。实际上,solve 记住的不仅仅是 mip 启动,所以开始一个新的 solve 的正确方法是clean_before_solve


推荐阅读