python - 如何将 CP-SAT 公式(Python 中)中的目标指定为所有决策变量值的最大值的最小化?

标签 python optimization or-tools constraint-programming cp-sat

我正在尝试实现一个简单的 CP-SAT,其目标是最小化所有决策变量分配的最大值。我可以最小化任何单个变量或变量的线性函数,但似乎我无法最小化变量的最大值。有办法实现这一点吗?也许是一种线性化 max() 函数的方法?

注意:我的模型确实有限制,但我在这里省略它们,因为我不认为它们与我的问题相关。

from ortools.sat.python import cp_model

model = cp_model.CpModel()

num_vars = 50
variables = {}
for i in range(num_vars):
     variables[i] = model.NewIntVar(0,i,'n_%i'% i)

下面的行总是会导致错误,其他参数(例如迭代器)也是如此。

model.Minimize(max(variables))

最佳答案

我已经找到了解决这个问题的方法。我需要声明一个新的决策变量,代表目标值,然后我需要一个 AddMaxEquality 约束,使新变量等于其他决策变量的最大值。最后,我将新的目标变量传递给 model.Minimize() 命令。

obj = model.NewIntVar(0,num_vars,'obj')

# Impose a constraint equating the new variable to the max of other vars.
model.AddMaxEquality(obj, [variables[i] for i in range(num_vars)])

# Minimize objective.
model.Minimize(obj)

关于python - 如何将 CP-SAT 公式(Python 中)中的目标指定为所有决策变量值的最大值的最小化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61422887/

相关文章:

python - 按时间拆分分组的 pandas 数据框

python - 使用 **kwargs 创建 .txt 文档

python - 多个数组中所有可能的精确总和

java - 如何在 Google OR 工具的 VRP 中强制执行硬约束,某些节点不应首先和最后访问

constraints - 如何使用 CP-SAT 求解器或其他工具来查找具有行、列和管(代表学校类(class)、学期和天数)约束的 3D 数组?

c# - Google OR-Tools TSP 返回几个解决方案

带有 sqlalchemy 的 Python Pandas |批量插入错误

python - 如何在 Bokeh 的条形图中添加数据标签?

optimization - n 组位的高效随机排列

PHP CSS - 加载外部文件或回显到头部的更快/良好实践?