【问题标题】:AllDifferent Constraint in PyomoPyomo 中的所有不同约束
【发布时间】: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


    【解决方案1】:

    答案取决于细节(变量是整数,是所涵盖域中的所有值)。以下是可能感兴趣的参考:

    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 &lt; n,那么我们需要将(3) 替换为:

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

    【讨论】:

    • 所有变量都是介于 1 到 96 之间的整数,并且所有值都应该不同。
    • 在 Pyomo 中为 x 不等于 y 编码的任何替代非下标方法?无法为我的模型实现上述公式。
    • 我无法理解为什么这种方法在 Pyomo 中实施起来并不简单。
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 2021-03-06
    • 2018-05-29
    • 2021-09-12
    • 2018-07-22
    • 2017-12-31
    • 2017-08-24
    • 2020-09-07
    相关资源
    最近更新 更多