我有变量,其值在一天中的每一小时都会变化(24个值):
plants = ['Plant1', 'Plant2']
users = ['user1', 'user2']
time_steps = range(0,24)
p_gen = model.addVars(plants, time_steps, name="pow_gen")
tot_consume = model.addVars(users, time_steps, name="total_demand")
p_grid = model.addVars(time_steps, lb = -GRB.INFINITY, name="exch_pow")
我想实现这样的东西:
If ((quicksum(p_gen[t] for pp in plants) - quicksum(tot_d[u,t] for u in users) )>= p_grid[t] for t in time_steps)
model.addConstrs(A)
model.addConstrs(B)
else:
model.addConstrs(C)
我的问题是Gurobi无法理解取决于时间的变量。我要实现条件,因此取决于程序的条件,您是否需要不同的addConstr。
如何在Gurobi中实现这种条件?
答案 0 :(得分:0)
线性编程不能像这样工作。
您有约束条件,并且您的模型必须必须实现它们,否则您的模型将不可行。
您不能基于约束条件放置约束,如果您可以基于布尔条件(例如设置,值...)放置约束,或者可以放置boolean constraints.
但是,您可以同时拥有两个模型,并且在if / else
分支之前 具有相同的变量和约束。
您可以解析第一个模型,使用x
属性获得所需的值(只需调用variable.x
即可获得其值),然后使用该值可以选择将哪些约束添加到第二个模型中,然后解决它。