簡體   English   中英

獲得Optimal之后的次佳解決方案

[英]Getting the next best solutions after Optimal

我有一個簡單的求解器,可以用來解決類似背包的問題。 我希望在牢記約束的同時最大化價值

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

我省去了定義變量的代碼,但是我的問題是:運行此代碼將使我獲得最佳陣容。 有沒有辦法找到第二,第三等最佳解決方案?

CBC號 CPLEX,Gurobi確實支持保留更多解決方案,但這僅可通過NextSolution()方法在Gurobi的OR-Tools中使用。

如果您的模型是完全積分的,則可以查看CP-SAT求解器。

訣竅是除非您探索所有解決方案,否則第二好的解決方案最多只能是啟發式方法。

在類似背包的問題中,直接在迭代過程中獲得下一個最佳解決方案是很直接的。

首次解決問題后,您可以添加一個約束,其中左側總和包含在最佳解決方案中,而右側總和不超過最佳解決方案中包含的項數。

本質上,這是從解空間中排除第一個最佳解的切口。 因此,在添加附加約束之后,通過解決該問題將獲得不同的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM