Pyomo:行级别的求和约束<= 1

问题描述

在 Pyomo 中设置 Concretemodel 期间,我需要设置以下约束 sum_of_perc[times,companys]

目前我有以下代码

m.cons.add(sum(m.key_optimized[t,c] for t,c in itertools.product(m.times,m.companies)) <= 1)

itertools.product 允许我在不同的时间和公司之间循环。

考虑以下二维数组的假设/随机示例。每行是一个 t,每个元素是 c

[0.1,0.4,0.0,0.5] <= 1
[0.2,0.2,0.6,0.0] <= 1

目前我的约束试图让整个 2D 矩阵

(0,0) 0.34
(0,1) 0.42
(0,2) 0.0
(0,3) 0.16
(1,0) 0.005
(1,1) 0.075
(1,2) 0.0
(1,3) 0.0

感谢您的帮助!

解决方法

我想这会回答你的问题...

首先,如果您想在没有 I/System.out: result = 2 I/System.out: result still = 2 I/System.out: result in the class = 0 的情况下复制您刚刚所做的事情,很容易制作 2 组的完整交叉产品。请参阅下面的第一部分。

如果您要为某事的每一个做约束,您应该立即考虑设置一个函数-规则组合,该组合将为每个成员调用该函数。您在约束中提供的集合。见下文后半部分。

itertools