我的gurobi模型模拟了电池的功能。但是,我想知道是否可以为半连续变量设置滚动的上下限。以下示例显示了(恒定)上限和下限,我希望每个间隔取一个不同的值。 T是间隔的总数。
P_bat_discharge = m.addVars(T, vtype = gp.GRB.SEMICONT, name="P_bat_discharge", lb = x, ub = y)
我想知道是否可以指定要模拟的每个区间的上下限,在任何地方都找不到,但是也许你们中的任何人都知道一个聪明的窍门。
类似的东西:
P_bat_discharge = m.addVars(T, vtype = gp.GRB.SEMICONT, name="P_bat_discharge", lb = x[t] for t in range (T), ub = y[t] for t in range (T))
答案 0 :(得分:0)
创建变量后,可以传递lb
和ub
属性的值列表。这是一个简单的示例,试图捕获您想要实现的目标:
import gurobipy as gp
T = 3
lbdata = [1,2,3]
ubdata = [4,5,6]
m = gp.Model()
m.addVars(3, vtype=gp.GRB.SEMICONT, lb=lbdata[0:T], ub=ubdata[0:T])
m.write('a.lp')
在我的机器上,这会生成LP
Minimize
0 C0 + 0 C1 + 0 C2
Subject To
Bounds
1 <= C0 <= 4
2 <= C1 <= 5
3 <= C2 <= 6
Semi-continuous
C0 C1 C2
End