Pyomo中的所有不同约束

问题描述 投票:0回答:1

我正在尝试在Pyomo上运行MINLP问题。我已经制定了一个目标函数,我的约束之一是:

model.c2 = Constraint(expr = sum(model.x[i] for i in blocks) <= 4560)

我想要这样的东西:

x + y + z <= 3,x不等于y不等于z。

我如何为此写一个约束?

python optimization pyomo
1个回答
0
投票
答案在一定程度上取决于细节(变量是整数,是域中的所有值)。这是一个有趣的参考:

[Williams,H. Paul和Yan,Hong(2001),《约束满足的“ all_different”谓词(整数)编程,Informs Journal on Computing,13(2)。 96-103。

让我们更精确地定义问题。假设我们有n个整数x[i],它们在1,...,n之间取唯一值。我们可以这样实现:

我们可以引入二进制变量

y[i,k] = 1 if x[i]=k 0 otherwise

有了这个,我们可以写:

x[i] = sum(k, k*y[i,k]) (1) sum(k, y[i,k]) = 1 ∀i (2) sum(i, y[i,k]) = 1 ∀k (3) y[i,k] ∈ {0,1}

其中i ∈ {1,..,n}k ∈ {1,..,n}

如果变量少于n,用i ∈ {1,..,m}表示m < n,那么我们需要将(3)替换为:

sum(i, y[i,k]) ≤ 1 ∀k (3a)

© www.soinside.com 2019 - 2024. All rights reserved.