【问题标题】:Getting the next best solutions after Optimal在 Optimal 之后获得下一个最佳解决方案
【发布时间】:2019-04-09 01:32:52
【问题描述】:

我有一个简单的求解器,用于解决类似背包的问题。我希望在牢记约束的同时最大化价值

    self.solver = pywraplp.Solver(
                'FD',
                pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING
            )
        self.objective = self.solver.Objective()
        self.objective.SetMaximization()
self.solver.solve()

我省略了定义变量的代码,但我的问题是:运行此代码将为我提供最佳阵容。有没有办法找到第二、第三等最佳解决方案?

【问题讨论】:

    标签: python optimization or-tools


    【解决方案1】:

    使用 CBC 编号。 CPLEX、Gurobi 确实支持保留更多解决方案,但这仅在 OR-Tools 中通过 NextSolution() 方法提供给 Gurobi。

    如果你的模型是纯积分的,你可以看看 CP-SAT 求解器。

    诀窍是除非您探索所有解决方案,否则第二好的解决方案充其量是启发式的。

    【讨论】:

      【解决方案2】:

      在类似背包的问题中,很容易在迭代过程中获得下一个最佳解决方案。

      在第一次解决问题后,您可以添加一个约束条件,即左侧对最优解中包含的所有项目求和,而右侧将这个总和限制为比最优解中包含的项目数少一个最优解。

      这本质上是一个从解空间中排除第一个最优解的切割。因此,在添加附加约束后求解问题将得到不同的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-20
        • 2020-04-12
        • 2018-09-08
        • 1970-01-01
        • 2014-11-27
        • 2023-03-13
        • 2014-09-18
        相关资源
        最近更新 更多