python - 重置 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()
谢谢!
解决方案
默认情况下,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
推荐阅读
- css - CSS Grid - 当我调整到更小的屏幕时,为什么我的文本会被截断?
- python - 预期 conv2d 有 4 个维度,但得到了具有形状的数组
- python - grpc 升级后,grpc 服务器流在客户端意外终止
- android - Android NDK-build:无法加载预先构建的共享库作为其他模块的依赖项
- typescript - 在类型系统中“抛出”并验证类型
- java - android.R.anim.fade_out 不好用,只是淡入工作
- asp.net - 使用 Serilog 输出到具有指定文件名的多个文件?
- r-markdown - 在 YAML Header 中的 pdf_document 下设置 citation_package 选项并使用 rmarkdown::pdf_document 函数
- rx-java - 在不同的计算上下文的情况下如何避免订阅订阅
- java - 将 JPanel 从其他类添加到 JPanel