我一直在尝试进入 python 优化,我发现 pyomo 可能是要走的路;作为学生,我有一些使用 GUROBI 的经验,但当然这不再可能,所以我必须研究开源选项。
我基本上想执行一个非线性混合整数问题,我将最小化某个比率。问题本身是在可再生能源方案中建立电力购买协议 (PPA)。根据发电量,您将不得不根据 PPA 购买或出售电力。
唯一的起始数据是世代;PPA 是主要的决策变量,但我需要其他变量。“buy”、“sell”、“b1”和“b2”在没有 PPA 值的情况下是未知的。这些是方程式:
使用 pyomo,我试图将问题设置为:
# Dataframe with my Generation information:
January = Data['Full_Data'][(Data['Full_Data']['Month'] == 1) & (Data['Full_Data']['Year'] == 2011)]
Gen = January['Producible (MWh)']
Time = len(Generacion)
M=100
# Model variables and definition:
m = ConcreteModel()
m.IDX = range(time)
m.PPA = Var(initialize = 2.0, bounds =(1,7))
m.compra = Var(m.IDX, bounds = (0, None))
m.venta = Var(m.IDX, bounds = (0, None))
m.b1 = Var(m.IDX, within = Binary)
m.b2 = Var(m.IDX, within = Binary)
然后是约束;只有第一个,因为我已经收到错误:
m.b1_rule = Constraint(
expr = (((Gen[i] - PPA)/M for i in m.IDX) <= m.b1[i])
)
这给了我错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-5d5f5584ebca> in <module>
1 m.b1_rule = Constraint(
----> 2 expr = (((Generacion[i] - PPA)/M for i in m.IDX) <= m.b1[i])
3 )
pyomo\core\expr\numvalue.pyx in pyomo.core.expr.numvalue.NumericValue.__ge__()
pyomo\core\expr\logical_expr.pyx in pyomo.core.expr.logical_expr._generate_relational_expression()
AttributeError: 'generator' object has no attribute 'is_expression_type'
老实说,我不知道这意味着什么。我觉得这应该是一个简单的问题,但我在语法上苦苦挣扎。我基本上必须对“Generation”中的每个单独数据应用约束,不涉及总和;所有约束都是一对一的约束设置,因此物理能量需求是有意义的。
如何设置这样的约束?
非常感谢