【问题标题】:DoCplex: Using subset of variables in warm startDoCplex:在热启动中使用变量子集
【发布时间】:2021-10-10 14:17:11
【问题描述】:

我在 DoCplex 中使用热启动。在热启动中,我的意图是使用先前模型中产生非空值的决策变量的子集。例如,如果我有决策二元变量x_1,...,x_5,第一个模型中的解为x_1=1,x_2=1,其余为零。所以,在热启动中,我只想拥有决策变量x_1 and x_2。这样,我可以减少模型的维度并具有更快的性能。考虑到我有数千个决策变量,如何在热启动中选择这些变量的子集?

【问题讨论】:

  • 只需对所有变量进行循环,然后将之前解决方案中具有非零值的变量添加到热启动中,并使用之前解决方案中的值。如果您想进一步减少该集合,只需添加额外的标准,例如根据您的问题结构,例如,仅在您的热启动中包含变量和值,这些变量和值表示活动的开始时间、每次交付的车辆、上课的教室等等。

标签: cplex docplex


【解决方案1】:

可以使用write_level 参数将 Docplex 解决方案导出为 MIP 启动文件(MST 格式)。 此可选参数是来自docplex.mp.constants/WriteLevel 类的枚举值。

这个枚举有四个值实现两个标志的笛卡尔积:

  • 只保留离散变量或保留所有变量
  • 保留零值或所有值

特别是:值WriteLevel.DiscreteNonZeroVars 仅将具有非零值的离散变量保存为 MST。代码如下:

sol = mdl.solve
mst1 = sol.export_as_mst(write_level=WriteLevel.DiscreteNonZeroVars)

请注意,传递 4(枚举数值)也可以,但可读性较差。

如果这些选项都不符合您的需求,您始终可以按照 Tim 的建议使用自定义代码构建 MST 解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2020-08-10
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多