火电机组经济调度模型介绍
QP模型用于实现建模(基础模型见前期推文: Python|Gurobi——零基础学优化建模-QCP
addVars
和addConstrs
的使用方法
展示求解结果的方法:var.varName,'=',var.x
结果记录的方法:m.write('output.sol')
火电机组技术就是将基于化石燃料的能源转化为电能。火电机组 的生产成本可以表示为下式:
式中,、、 表示火电机组 的燃料成本系数,表示机组数量。因此总燃料成本可以表示为下式: 火电机组的运行约束可以表示为: 式中, 表示火电机组 的输出功率;、 表示火电机组 的最大、最小输出功率;表示机组数量。火电机组完整经济调度模型如下: 上述模型中,目标函数为二次函数,约束条件为线性约束的模型称之为二次规划(Quadratic Programming, QP)模型。此模型是凸的,可以利用Gurobi实现直接求解。非凸模型的建模求解可以参考:Python|Gurobi——零基础学优化建模-NLP。
import gurobipy as gp
from gurobipy import GRB
# In[] data input
load_demand = 400 ##(Mw)
units = 5 # the total number of thermal units
# In[] minimum and maximum generating limits of each unit
output_min = [28,90,68,76,19] ## P_i^th,min (MW)
output_max = [206,284,189,266,53] ## P_i^th,max (MW)
# In[] the cost coef a b c of these thermal units
coef_A = [3,4.05,4.05,3.99,3.88] ## a_i^th ($/MW^2)
coef_B = [20,18.07,15.55,19.21,26.18] ## b_i^th ($/MW)
coef_C = [100,98.87,104.26,107.21,95.31] ## c_i^th ($)
##Difining the model
m = gp.Model("thermal_unit_dispatch_example ")
##Defining the decision variables
thermal_output = m.addVars(units, vtype = GRB.CONTINUOUS, name='thermal_output')
## Constranits of the operating
m.addConstrs((thermal_output[i]>=output_min[i] for i in range(units)),name='Operating_Limits_min')
m.addConstrs((thermal_output[i]<=output_max[i] for i in range(units)),name='Operating_Limits_max')
## Constranits of the load demanding
m.addConstr(gp.quicksum(thermal_output[i] for i in range(units))>=load_demand,name='demand_load')
## seting the objective function
total_cost = gp.quicksum(coef_A[i]*thermal_output[i]*thermal_output[i]+coef_B[i]*thermal_output[i]+coef_C[i]
for i in range(units))
m.setObjective(total_cost,GRB.MINIMIZE)
## sloving of the model
#m.write('thermal_unit_dispatch_example.lp')
m.optimize()
print('总运行成本',m.objVal)
for var in m.getVars():
print(var.varName,'=',var.x)
m.write('output.sol')
下面为代码的求解结果:
clc
clear
load=400; % 负载
N_units=5; % 火电机组数量
Pg=sdpvar(1,5); % 发电变量声明
Pg_min=[28,90,68,76,19]; % 发电下限
Pg_max=[206,284,189,266,53]; % 发电上限
a=[3,4.05,4.05,3.99,3.88]; % 费用系数 a
b=[20,18.07,15.55,19.21,26.18] ; % 费用系数 b
c=[100,98.87,104.26,107.21,95.31]; % 费用系数 c
cons=[Pg_min<=Pg<=Pg_max,sum(Pg)>=load]; % 模型的约束
obj=sum(a.*Pg.^2+b.*Pg+c); % 模型的目标函数
optimize(cons,obj,sdpsettings('solver','gurobi')); % 构建模型,并用Gurobi进行求解
value(obj) % 获得目标值
value(Pg) % 获得变量的解
Tips 1: addVars和addConstrs的使用方法addVar
: 可用于添加一个决策变量addVars
: 可用于添加多个决策变量addConstr
:可用于添加一个约束addConstrs
:可用于添加多个约束
Tips 2: 展示求解结果的方法m.objVal
:可以获取目标函数的属性var.x
:可以获取变量值的属性
Tips 3:记录结果的方法m.write('output.sol')
Tips 4: 模型声明方法1import gurobipy as gp
from gurobipy import GRB
m = gp.Model()
Tips 5: 模型声明方法2from gurobipy import *
m = Model()
[1] A. Soroudi, Power System Optimization Modeling in GAMS, DOI 10.1007/978-3-319-62350-4_3.
-作者|脱同学、李同学
-代码|脱同学(Python)、王同学(MATLAB)
-审核|李同学
---欢迎扫码关注公众号,获取最新内容---
往期内容回顾
8. Python|Gurobi——零基础学优化建模-终章
7. Python|Gurobi——零基础学优化建模-压轴篇:多目标优化
6. Python|Gurobi——零基础学优化建模-分段模型线性化(PWL)
5. Python|Gurobi——零基础学优化建模-QCP
4. Python|Gurobi——零基础学优化建模-NLP
3. Python|Gurobi——零基础学优化建模-MIP
2. Python|Gurobi——零基础学优化建模-LP
1. Python|Gurobi——零基础学优化建模