我正在致力于优化区域供热 (DH) 网络的热量调度模型。在这个模型中,我有不同的热资产,可以以不同的价格产生热量。挑战源于这样一个事实:热电联产 (CHP) 工厂产生的热量价格取决于其热负荷。
我想在优化过程中包含这种依赖性。具体来说,我的目标是将 CHP 热负荷 (model.CHP[t]) 及其相应的价格 ($model.price_CHP[t]$) 限制为离散点。在每个时间步骤,我都有预定义的数组,其中包含不同的热负载点 ($chp.Line_PQ$) 及其相应的价格 ($chp.Price_PQ[0]$)。
以下是我的 Pyomo 模型中的相关变量和参数:
model.CHP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.EB = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.HP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.BO = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.price_CHP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)```
model.CHP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.EB = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.HP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.BO = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.price_CHP = pyomo.Var(model.T, domain=pyomo.NonNegativeReals)
model.price_EB = pyomo.Param(model.T, initialize=Day_price_EB)
model.price_HP = pyomo.Param(model.T, initialize=Day_price_HP)
model.price_BO = pyomo.Param(model.T, initialize=Day_price_BO)
这是我正在使用的目标函数:
def objective_func(model):
return sum([model.CHP[t]*model.price_CHP[t] + model.HP[t]*model.price_HP[t] + model.EB[t]*model.price_EB[t] + model.BO[t]*model.price_BO[t] for t in model.T])
对于约束,我尝试按如下方式实现:
discrete_points_chp = chp.Line_PQ
discrete_prices_chp = chp.Price_PQ[0]
def constrain_chp_to_discrete_points(model, t):
return model.CHP[t] in set(discrete_points_chp)
model.constr_chp_discrete = pyomo.Constraint(model.T, rule=constrain_chp_to_discrete_points)
def constrain_price_chp_to_discrete_points(model, t):
return model.price_CHP[t] in set(discrete_prices_chp)
但是,当我运行优化时,我遇到了这些约束的问题。有人可以提供有关如何在 Pyomo 中正确实施此类约束的指导吗?
所以我试图使用一组来定义我的变量的离散选项,但这不起作用......
约束
x ∈ {p[0],p[1],...p[n-1]} (p[i] are constants)
可以实现为:
x = sum(p[i]*y[i])
sum(y[i]) = 1
y[i] ∈ {0,1} (binary variable)