【发布时间】:2020-05-28 16:03:53
【问题描述】:
我正在尝试在 Pyomo 上运行 MINLP 问题。我已经制定了一个目标函数,我的限制之一是:
model.c2 = Constraint(expr = sum(model.x[i] for i in blocks) <= 4560)
我想要这样的东西:
x+y+z
如何为此编写约束?
【问题讨论】:
标签: python optimization pyomo
我正在尝试在 Pyomo 上运行 MINLP 问题。我已经制定了一个目标函数,我的限制之一是:
model.c2 = Constraint(expr = sum(model.x[i] for i in blocks) <= 4560)
我想要这样的东西:
x+y+z
如何为此编写约束?
【问题讨论】:
标签: python optimization pyomo
答案取决于细节(变量是整数,是所涵盖域中的所有值)。以下是可能感兴趣的参考:
Williams, H. Paul 和 Yan, Hong (2001),代表 整数约束满足的“all_different”谓词 编程,通知计算杂志,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)
【讨论】: