如何迭代 objective 函数

How to iterate over objective function

我想在我的 objective 功能中加强某些术语。

model.addConstr(KW == quicksum(I[t] *(1.05**(-i)) for t in Tst + Z[t] 
* (1.05**(-j)) for t in T)

model.setObjective(KW,GRB.MAXIMIZE)
model.optimize()

变量i应该运行从1到Tst和T中的元素个数 分别。 因此,如果 Tst 中的 t 是 [2020,2021,2022],则 I[2020] 将乘以 1.05** (-1) I[2021] 1.05**(-2) 和 I[2022] 1.05**(-3)。 与Z[t]相同,只是T的列表大于Tst。

for i in range(1,len(Tst)+1):
    model.addConstr(KW == quicksum(I[t] * (1.05**(-i)))

然而 KW 始终为 0,这是不应该的。我错过了什么?

我刚刚创建了第二本词典

Expo = {}
i=1
for t in T:
    Expo[t] = i
    i = i + 1

如果我这样做:

model.addConstr(KW == quicksum(I[t] *(1.05**(Expo[t])) for t in Tst + Z[t] 
* (1.05**(Expo[t])) for t in T)

model.setObjective(KW,GRB.MAXIMIZE)
model.optimize()

它做我想做的事。但我认为这不是一个很好的解决方案 :P