【问题标题】:Pyomo: Build an abstract modelPyomo:建立一个抽象模型
【发布时间】:2020-07-21 10:28:22
【问题描述】:

我正在尝试使用 Pyomo(求解器 Ipopt)进行优化。

我有 2 个集合(j 代表生成器的数量,t 代表时间),6 个索引参数(A、B、C、Pmin、Pmax :indexed on model.J,Demand indexed on model.T)

我想做的是根据 24 种不同的需求产生 24 种不同的成本。

我运行代码后出现了这个错误:

TypeError: P_LoadgenBalance() 接受 1 个位置参数,但给出了 2 个。

我不知道为什么会出现这个错误,希望你能帮助我。感谢您的帮助!

薇薇

from pyomo.environ import *
import matplotlib.pyplot as plt
import numpy as np
# create a model
model = AbstractModel()

#     There are ten generators with different values of ABC.
#     Minimizing the costs and find the optimal dispatch for 24 different demands changed with time  
#     obj:Cost= sum(ap^2 +bp+c)
#     constraints: sum_i P(i,t)  >= load(t) , (Pmin =< P =< Pmax).

# declare decision variables

model.M = Param(mutable=True)
model.T = RangeSet(model.M)
model.N = Param(mutable=True)
model.J = RangeSet(model.N)
model.A = Param(model.J)
model.B = Param(model.J)
model.C = Param(model.J)
model.D = Param(model.J)
model.E = Param(model.J)
model.F = Param(model.J)
model.P_min = Param(model.J, within=PositiveReals)
model.P_max = Param(model.J, within=PositiveReals)
model.demand = Param(model.T)
model.emission_value = Param(initialize=1000000, mutable=True)

# declare constraints_Pbounds (Pmin =< P =< Pmax)

def Pbounds(model, j,t):
    return (model.P_min[j], model.P_max[j])
model.P = Var(model.J, model.T, bounds=Pbounds, domain=NonNegativeReals)

# declare constraints_P_LoadgenBalance  ( sum P >= demand)

def P_LoadgenBalance(model,t):
    return sum(model.P[j,t] for j in model.J  ) >= model.demand[t]
model.P_LoadgenBalance = Constraint(model.T, rule=P_LoadgenBalance)


# declare objective_cost

def obj_cost(model):
     return sum(model.A[j]* model.P[j,t] ** 2 + model.B[j] * model.P[j,t] + model.C[j] for j in model.J for t in model.T) 
model.cost= Objective(rule=obj_cost, sense=minimize)

# declare objective_emission

def obj_emission(model):
      return sum(model.E[j]* model.P[j,t] ** 2 + model.D[j] * model.P[j,t] + model.F[j] for j in model.J for t in model.T) 
model.emission= Objective(rule=obj_emission, sense=minimize)
model.emission.deactivate()
opt = SolverFactory('Ipopt')
instance = model.create_instance("E:\pycharm_project\END-10units.dat")
results = opt.solve(instance)

print(value(instance.cost)

数据文件

param M:=24;
param N:=10;
# Creating Parameters A, B, C,D,E,F, P_min, P_max:
param : A B C D E F P_min P_max:=
1   0.0148  12.1    82  2.15    3.59    -11.4   80  200
2   0.0289  12.6    49  3.63    2.02    -3.65   120 320
3   0.0135  13.2    100 3.3     4.7     -4.04   50  150
4   0.0127  13.9    105 3.73    1.61    -13.44  250 520
5   0.0261  13.5    72  2.27    2.29    -4.41   80  280
6   0.0212  15.4    29  2.37    2.77    -8.61   50  150
7   0.0382  14      32  2.03    4.86    -8.91   30  120
8   0.0393  13.5    40  2.4     3.32    -31.74  30  110
9   0.0396  15      25  2.5     4.03    -19.14  20  80
10  0.051   14.3    15  3.43    3.27    -21.02  20  60

param demand:=
1 600
2 650
3 680
4 651
5 630
6 650
7 810
8 820
9 883
10 893
11 888
12 901
13 892
14 875
15 843
16 877
17 880
18 904
19 865
20 855
21 766
22 733
23 688
24 654;

【问题讨论】:

    标签: python optimization pyomo


    【解决方案1】:

    您没有在函数 P_LoadgenBalance 中定义 t,因此 t 是另一个预期参数。代码应该是这样的:

    def P_LoadgenBalance(model ,t):
    

    为了存储单个成本,您必须使用新的目标函数为其创建一个变量,如下所示:

    # Cost Variable to store individual cost per j through t
    model.X = Var(model.J, model.T, domain=NonNegativeReals)
    
    
    # Cost Function
    
    def cost(model, j, t):
        return model.X[j, t]  == model.A[j] * model.P[j, t] ** 2 + model.B[j] * model.P[j, t] + model.C[j]
    
    
    model.cost = Constraint(model.T, Model.J, rule=cost)
    
    # Objective
    def obj_cost(model):
        return sum(model.X[j, t] for j in model.J for t in model.T)
    
    
    model.total_cost = Objective(rule=obj_cost, sense=minimize)
    

    【讨论】:

    • 感谢您的帮助。但是如何使用它生成 24 种不同的成本?
    • @ViviAaron 你是指一个成本函数还是 24 个不同的成本函数?
    • 我的意思是针对 24 种不同需求的 24 种不同成本,而不是 24 种成本的总和。它们都基于相同的公式:sum(ap^2 +bp+c):sum 表示对 10 个生成器进行求和。
    • 哦,我明白了。所以你想在优化总成本的同时存储成本信息,不是吗?
    • 是的!我想在优化此模型的同时存储成本并打印 24 个成本。
    猜你喜欢
    • 2020-09-29
    • 2020-10-03
    • 1970-01-01
    • 2023-01-13
    • 2021-12-23
    • 2022-01-21
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多