【问题标题】:Are multiple objectives possible? (OR-TOOLS Constraint Programming)是否可以实现多个目标? (OR-TOOLS 约束编程)
【发布时间】:2020-12-31 00:18:29
【问题描述】:

我有一个问题,我有一组具有给定生产能力的仓库,它们以给定的成本将一些产品发送给客户列表。我正在尽量减少发送产品的总成本,以便满足每个客户的需求。该部分已排序。

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

如何使用 or-tool 约束编程模块来解决这个问题?甚至可能吗?我仔细查看了文档,但找不到任何似乎符合这个想法的约束或功能。

【问题讨论】:

    标签: python constraints constraint-programming or-tools


    【解决方案1】:

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

    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))
    

    Source (my blog)

    Reference (github issue)

    【讨论】:

    • 我可以看到逻辑。这是看待问题的一种非常聪明的方法,修复了已运送物品的总量,我们现在可以最大限度地减少我们发送它们的地点的数量。我现在正在实施。如果我可以补充一下,您是否有任何关于提高性能的方法的提示?也许求解器或其他任何东西。感谢您的帮助!
    • 简单的是solver.parameters.num_search_workers=8,减少intvars的域也有帮助
    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    相关资源
    最近更新 更多