我如何在CPSAT公式(python)中指定目标是最小化所有决策变量值的最大值?

2024-04-16 20:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现一个简单的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))

Tags: 方法函数目标model线性varsvariablessat
1条回答
网友
1楼 · 发布于 2024-04-16 20:16:37

我找到了解决这个问题的办法。我需要声明一个新的决策变量,表示目标值,然后我需要一个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)

相关问题 更多 >