从基础抓起!基于线性规划的机组最优组合模型程序代码!

前言

为了实现电力供需的平衡,并最合理地利用发电资源,预先对发电机组的启停和出力进行调度安排就是非常必要的,这就是机组组合问题(Unit Commitment, UC)。机组组合问题问题是一类混合整数规划问题(Mixed Integer Programming, MIP),要求基于已知的系统数据,求解计划时间内机组决策变量的最优组合,使得系统总成本达到最小。该问题的决策变量由两类,一类是各时段机组的启停状态,为整数变量,0表示关停,1表示启动;另一类是各时段机组的出力,为连续变量。对于混合整数规划,常用的方法有分支定界法,benders分解等。CPLEX提供了快速的MIP求解方法,只需要按照程序规范在MATLAB中编写程序化模型,调用CPLEX求解器,即可高效求解。

数学模型

1)目标函数:

目标函数即为最小化成本,包括发电带来的煤耗成本和机组启停产生的开停机成本。

其中,机组的能耗成本可用二次函数表述:

2)约束条件​:

由上小节构建的机组组合优化模型,煤耗成本采用二次函数,当系统规模较大时(如节点数超过1000),求解起来将消耗大量时间。因此我们可以对原模型进行线性化处理。

​算例分析

本程序算例基于IEEE-30节点标准测试系统,系统接线图如下图所示。系统包含30个节点,6台发电机组。要求确定系统最优机组组合,使得系统各机组总运行成本(煤耗成本+启停成本)最小化,对学习机组组合的小伙伴很有帮助!

适用平台:Matlab+Yalmip+Cplex/Gurobi

程序结果

从上到下依次为热备用系数:0.02,0.05,0.08,0.15,0.25,0.35;

部分程序:

%% 规模变量%机组数
gennum=size(paragen);gennum=gennum(1,1);
%节点数
numnodes=size(loadcurve);numnodes=numnodes(1,1)-1;
%时间范围
T=size(loadcurve);T=T(1,2)-1;
%线性化分段数(按需要更改)
m=4;%各时刻节点总负荷​%决策变量
u=binvar(gennum,T,'full');%状态变量p=sdpvar(gennum,T,'full');%即各机组实时功率p(i,t)
Ps=sdpvar(gennum,T,m,'full');%分段出力costH=sdpvar(gennum,T,'full');%启动成本
costJ=sdpvar(gennum,T,'full');%关停成本sum_PowerGSDF=sdpvar(T,branch_num,numnodes,'full');%发电机的输出功率转移总和
%% 目标函数线性化
MaxPs=zeros(gennum,T,m);%这里表示分段出力的上限st=[];%st约束初始化
for i=1:gennum   %目标函数线性化后分段出力的不等式约束
MaxPs(i,t,s)=(limit(i,1)-limit(i,2))/m;st=st+[Ps(i,t,s)>=0,Ps(i,t,s)<=MaxPs(i,t,s)];
K=zeros(gennum,m);%煤耗函数的斜率值​
K(i,s)=2*para(i,1)*(2*s-1)*MaxPs(i,1,1)+para(i,2);%推导简化后的煤耗斜率​
 %目标函数线性化后分段出力的等式约束​
st=st+[p(i,t)==(sum(Ps(i,t,:),3)+u(i,t)*limit(i,2))];​
%% 目标函数
totalcost=0;%机组费用成本最小​%线性化的最优成本目标
    totalcost=totalcost+K(i,s)*Ps(i,t,s);%线性化煤耗成本​
    totalcost=totalcost+u(i,t)*(para(i,2)*limit(i,2)+para(i,1)*limit(i,2)^2+para(i,3));%加上表示机组开机并以最小出力 运行产生的煤耗
    totalcost=totalcost+costH(i,t)+costJ(i,t);%加上机组启停产生的开停机成本​
%原二次函数式的最优成本目标​
otalcost=totalcost+para(i,1)*p(i,t).^2+para(i,2)*p(i,t)+para(i,3)*u(i,t);  %煤耗成本%    
totalcost=totalcost+costH(i,t);   %启动成本​totalcost=totalcost+costJ(i,t); %关停成本
​st=st+[u(i,t)*limit(i,2)<=p(i,t)<=u(i,t)*limit(i,1)];%机组出力上下限约束

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值