我在DoCplex中使用warm。在热开始阶段,我的意图是使用来自前一个模型的决策变量的子集,这些变量导致了非空值。例如,如果我有决策二元变量,x_1,...,x_5,第一个模型中的解是x_1=1,x_2=1,其余的是零。所以,在热启动时,我只希望有决策变量x_1 and x_2。通过这种方式,我可以减少模型的维度,并具有更快的性能。考虑到我有数千个决策变量,我如何在热启动时选择这些变量的子集?
发布于 2021-08-06 12:23:30
Docplex解决方案可以使用write_level参数导出到MIP起始文件(MST格式)。此可选参数是docplex.mp.constants/WriteLevel类中的枚举值。
此枚举具有实现两个标志的笛卡尔乘积的四个值:
保留零值或所有值
特别是: value WriteLevel.DiscreteNonZeroVars仅将具有非零值的离散变量保存为MST。其代码为:
sol = mdl.solve
mst1 = sol.export_as_mst(write_level=WriteLevel.DiscreteNonZeroVars)请注意,传递4(枚举数值)也可以,尽管可读性较差。
如果这些选项都不能满足您的需求,您始终可以使用自定义代码构建MST解决方案,如Tim建议的那样。
https://stackoverflow.com/questions/68668828
复制相似问题