多个目标是否可能? (OR-TOOLS约束规划)
Are multiple objectives possible? (OR-TOOLS Constraint Programming)
我有一个问题,我有一组具有给定生产能力的仓库,这些仓库以给定的成本将一些产品发送给客户列表。我正在尝试将发送产品的总成本降至最低,以便满足每个客户的需求。该部分已排序。
现在我需要添加一个新的 objective(或限制条件),我试图以最低的成本满足所有客户的需求,同时使用尽可能少的仓库。假设从 5 个仓库开始,如果无法解决问题,则尝试 6、7、8 等,直到找到解决方案,我可以使用尽可能少的仓库数量满足所有需求。
我如何使用 or-tool 约束编程模块来解决这个问题?有可能吗?我仔细查看了文档,但找不到任何似乎符合这个想法的约束或函数。
用第一个 objective 解决,用解决方案约束 objective,提示并用新的 objective 解决。
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))
我有一个问题,我有一组具有给定生产能力的仓库,这些仓库以给定的成本将一些产品发送给客户列表。我正在尝试将发送产品的总成本降至最低,以便满足每个客户的需求。该部分已排序。
现在我需要添加一个新的 objective(或限制条件),我试图以最低的成本满足所有客户的需求,同时使用尽可能少的仓库。假设从 5 个仓库开始,如果无法解决问题,则尝试 6、7、8 等,直到找到解决方案,我可以使用尽可能少的仓库数量满足所有需求。
我如何使用 or-tool 约束编程模块来解决这个问题?有可能吗?我仔细查看了文档,但找不到任何似乎符合这个想法的约束或函数。
用第一个 objective 解决,用解决方案约束 objective,提示并用新的 objective 解决。
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))