[英]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.