我正在嘗試為以下問題找到現有演算法:
即,假設我們有 3 個變數,x、y、z(都必須是整數)。我想找到必須匹配某些約束的所有變數的值,例如 x y<4、x<=50、z>x 等。
此外,還有額外的 POSSIBLE 約束,例如 y>=20 等(與之前相同)。目標函式(我對最大化其值感興趣)是在最佳解決方案中滿足的 EXTRA 約束的數量(“必須”約束 所有值都是整數的事實,這是一個需求。沒有它,就有沒有有效的解決方案)。
uj5u.com熱心網友回復:
如果使用 OR-Tools,因為模型是不可或缺的,我會建議使用 CP-SAT,因為它提供了具有良好 API 的指標約束。
API 將是:
b = model.NewBoolVar('indicator variable')
model.Add(x 2 * y >= 5).OnlyEnforceIf(b)
...
model.Maximize(sum(indicator_variables))
為了獲得最大性能,我建議使用并行性。
solver = cp_model.CpSolver()
solver.parameters.log_search_progress = True
solver.parameters.num_search_workers = 8 # or more on a bigger computer
status = solver.Solve(model)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367788.html
上一篇:WebAPI將JWT保存在cookie中,但無法洗掉它
下一篇:數一數漂亮的數字
