是否可以实现多个目标?(OR-TOOLS约束编程)



我遇到了一个问题,我有一组具有给定生产能力的仓库,这些仓库以给定的成本将一些产品发送给客户列表。我正在努力将发送产品的总成本降到最低,以满足每个客户的需求。该部分已排序。

现在我需要添加一个新的目标(或约束(,我试图以最低的成本满足所有客户的需求,但也尽可能使用最少的仓库数量。假设从5个仓库开始,如果问题不可能,那么尝试6个、7个、8个等等,直到找到解决方案,如果我使用尽可能少的仓库数量来满足所有需求。

我该如何使用或工具约束编程模块进行此操作?这可能吗?我仔细查看了文档,但找不到任何约束或函数来满足这个想法。

用第一个目标求解,用解约束目标,用新目标提示和求解。

from ortools.sat.python import cp_model
model = cp_model.CpModel()
solver = cp_model.CpSolver()
x = model.NewIntVar(0, 10, "x")
y = model.NewIntVar(0, 10, "y")
# Maximize x
model.Maximize(x)
solver.Solve(model)
print("x", solver.Value(x))
print("y", solver.Value(y))
print()
# Hint (speed up solving)
model.AddHint(x, solver.Value(x))
model.AddHint(y, solver.Value(y))
# Maximize y (and constraint prev objective)
model.Add(x == round(solver.ObjectiveValue()))  # use <= or >= if not optimal
model.Maximize(y)
solver.Solve(model)
print("x", solver.Value(x))
print("y", solver.Value(y))

来源(我的博客(

参考(github问题(

最新更新