可变长度上的求和

时间:2019-05-21 14:18:24

标签: sum pyomo

我用pyomo编写了一个优化问题,需要一个约束,该约束包含一个长度可变的求和: u_i_t [i,t] * T_min_run-总和(在(t-T_min_run + 1).t-1中的tnewnew)u_i_t [i,tnewnew] <=总和(在t ..(t + T_min_run-1)中的tnew [i,tnew]

T是我的实际时间表,N是我的机器 通常,我会遍历t,但是我需要确保机器在一定时间内开启。

def HP_on_rule(model, i, t):
    return model.u_i_t[i, t]*T_min_run - sum(model.u_i_t[i, tnewnew] for tnewnew in range((t-T_min_run+1), (t-1))) <= sum(model.u_i_t[i, tnew] for tnew in range(t, (t+T_min_run-1)))
model.HP_on_rule = Constraint(N, rule=HP_on_rule)

希望您能以pyomo / python为我提供正确的格式。

问题在于t是一个正在运行的变量,我不知道如何在Python中实现它。 tnew只是一个帮助变量。例如。 t = 6(变量),T_min_run = 3(常数),u_i_t是二进制[00001111100000 ...],则得到: 1 * 3-1-<= 3 如我所说,我不知道如何在我的代码中实现此功能,并且当前版本未运行。 TypeError:HP_on_rule()缺少1个必需的位置参数:'t'

1 个答案:

答案 0 :(得分:0)

似乎您没有为函数规则提供所有参数。

由于t是函数的参数,因此我假设它对应于集合T的元素(您的时间轴)。

然后,代码示例的最后一行不仅应包括集合N,还应包括集合T。试试这个:

model.HP_on_rule = Constraint(N, T, rule=HP_on_rule)

请注意:构建一个带有“每个”部分的Constraint,您必须在调用Set开始时提供要迭代的Pyomo Constraint施工。根据经验,约束规则函数的参数应比Set初始化行中指定的Pyomo Constraint的数量多1个参数。