【问题标题】:Reset the values of variables in docplex - Python重置 docplex 中的变量值 - Python
【发布时间】:2021-03-11 18:22:10
【问题描述】:

我有一个数学模型 ('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()

谢谢!

【问题讨论】:

    标签: python docplex


    【解决方案1】:

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

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

    m.solve(clean_before_solve=True, log_output=True)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      相关资源
      最近更新 更多