python - 是否可以实现多个目标?(OR-TOOLS 约束编程)
问题描述
我有一个问题,我有一组具有给定生产能力的仓库,它们以给定的成本将一些产品发送给客户列表。我正在尽量减少发送产品的总成本,以便满足每个客户的需求。该部分已排序。
现在我需要添加一个新目标(或约束),在此我尝试以最低成本满足所有客户的需求,同时尽可能使用最少数量的仓库。假设从 5 个仓库开始,如果问题不可能,则尝试 6、7、8 等,直到找到解决方案,如果我使用尽可能少的仓库数量满足所有需求。
我如何使用 or-tool 约束编程模块来解决这个问题?甚至可能吗?我已经很好地查看了文档,但找不到任何似乎满足这个想法的约束或功能。
解决方案
用第一个目标解决,用解决方案约束目标,用新目标提示和解决。
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))
推荐阅读
- angular - Angular 11 – [HMR] 更新失败:NullInjectorError:无 ApplicationRef 提供者
- c# - Mongodb C# - 如何获取最大日期 - (聚合)
- api - 使用 Telegram 向任何电话号码发送个性化消息
- angular - 如何在过滤器管道中检查未找到数据?
- python - Python Tkinter 开启
-Event entry.get() 滞后 - javascript - 剪贴蒙版忽略元素的不透明度
- r - 成对函数的反向变换(lmer 分析)
- android - 在应用计费 v3 中 - 为什么我在调用 queryPurchases(skuID) 时收到 DEVELOPER_ERROR?
- python-3.x - 如何在 Django Azure webapp 上安装 Cmake?
- python-3.x - 是否可以将使用 Tf-nightly 创建的模型重新保存为 tensorflow 2.2.0 的模型?