火电机组经济调度建模及求解——基础篇 原创

本期内容介绍

  • 火电机组经济调度模型介绍

  • QP模型用于实现建模(基础模型见前期推文: Python|Gurobi——零基础学优化建模-QCP

  • addVarsaddConstrs的使用方法

  • 展示求解结果的方法:var.varName,'=',var.x

  • 结果记录的方法:m.write('output.sol')

Part 1 火电机组经济调度模型介绍

火电机组技术就是将基于化石燃料的能源转化为电能。火电机组 的生产成本可以表示为下式:

式中,、、 表示火电机组 的燃料成本系数,表示机组数量。因此总燃料成本可以表示为下式: 火电机组的运行约束可以表示为: 式中, 表示火电机组 的输出功率;、 表示火电机组 的最大、最小输出功率;表示机组数量。火电机组完整经济调度模型如下: 上述模型中,目标函数为二次函数,约束条件为线性约束的模型称之为二次规划(Quadratic Programming, QP)模型。此模型是凸的,可以利用Gurobi实现直接求解。非凸模型的建模求解可以参考:Python|Gurobi——零基础学优化建模-NLP。

Part 2 Python+Gurobi代码实现

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') 

下面为代码的求解结果:

火电机组经济调度建模及求解——基础篇 原创_第1张图片

Part 3 MATLAB + Yalmip + Gurobi 代码实现

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: 模型声明方法1
    import gurobipy as gp
    from gurobipy import GRB
    m = gp.Model()

  • Tips 5: 模型声明方法2
    from gurobipy import *
    m = Model()


参考文献

[1] A. Soroudi, Power System Optimization Modeling in GAMS, DOI 10.1007/978-3-319-62350-4_3.

-作者|脱同学、李同学
-代码|脱同学(Python)、王同学(MATLAB)
-审核|李同学
---欢迎扫码关注公众号,获取最新内容---

火电机组经济调度建模及求解——基础篇 原创_第2张图片

往期内容回顾

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——零基础学优化建模

你可能感兴趣的:(Python,Gurobi,能源利用,python,matlab,算法,数据建模)