PYOMO:LP热存储优化问题,我想用离散浮点数定义变量的域

问题描述 投票:0回答:1

我正在致力于优化区域供热 (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 中正确实施此类约束的指导吗?

所以我试图使用一组来定义我的变量的离散选项,但这不起作用......

python linear-programming pyomo gurobi
1个回答
0
投票

约束

 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)
© www.soinside.com 2019 - 2024. All rights reserved.