clear
clc
yalmip;
Cplex;
%%系统参数
%所有参数均用有名值表示
paragen=xlsread('excel2017','机组参数');
loadcurve=xlsread('excel2017','负荷曲线');
limit=paragen(:,3:4);%机组出力上下限//limit(:,1)表示上限,limit(:,2)表示下限
para=paragen(:,5:7);%成本系数//para(:,1)表示系数a,para(:,2)表示系数b,para(:,3)表示系数c。
price=100;
para=price*para;%价格换算
lasttime=paragen(:,9);%开关机持续时间
Rud=paragen(:,8);%上下爬坡速率//因题中简化上坡下坡速度相同
H=paragen(:,10);%启动成本
J=paragen(:,11);%关停成本
u0=[1 1 1 1 1 1];%初始状态
%% 规模变量
%机组数
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;
%各时刻节点总负荷
PL=loadcurve(numnodes+1,2:T+1);
%%
%决策变量
u=binvar(gennum,T,'full');%0-1状态变量
p=sdpvar(gennum,T,'full');%连续变量,即各机组实时功率p(i,t)
Ps=sdpvar(gennum,T,m,'full');%连续变量,分段出力
costH=sdpvar(gennum,T,'full');%连续变量,启动成本
costJ=sdpvar(gennum,T,'full');%连续变量,关停成本
%% 目标函数线性化
MaxPs=zeros(gennum,T,m);%这里表示分段出力的上限
st=[];%st约束初始化
for i=1:gennum %目标函数线性化后分段出力的不等式约束
for t=1:T
for s=1:m
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)];
end
end
end
K=zeros(gennum,m);%煤耗函数的斜率值
for i=1:gennum
for s=1:m
K(i,s)=2*para(i,1)*(2*s-1)*MaxPs(i,1,1)+para(i,2);%推导简化后的煤耗斜率
end
end
%目标函数线性化后分段出力的等式约束
for i=1:gennum
for t=1:T
st=st+[p(i,t)==(sum(Ps(i,t,:),3)+u(i,t)*limit(i,2))];
end
end
%% 目标函数
totalcost=0;%机组费用成本最小
%线性化的最优成本目标
for i=1:gennum
for t=1:T
for s=1:m
totalcost=totalcost+K(i,s)*Ps(i,t,s);%线性化煤耗成本
end
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);%加上机组启停产生的开停机成本
end
end
%原二次函数式的最优成本目标
% for i=1:gennum
% for t=1:T
% totalcost=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); %关停成本
% end
% end
%%
for t=1:T
st=st+[sum(p(:,t))==PL(1,t)];%负荷平衡约束;
end
%%
for t=1:T
for i=1:gennum
st=st+[u(i,t)*limit(i,2)<=p(i,t)<=u(i,t)*limit(i,1)];%机组出力上下限约束
end
end
%% 机组爬坡约束
%按下式进行推导编程
% %启动最大升速率
% Su=(Pmax+Pmin)/2;
% %停机最大降速率
% Sd=(Pmax+Pmin)/2;
%Ru=Rud;Rd=Rud;
% %上爬坡约束
% for t=2:T
% st=st+[p(:,t)-p(:,t-1)<=u(:,t-1).*(Ru-Su)+Su];
% end
% %下爬坡约束
% for t=2:T
%st=st+[p(:,t-1)-p(:,t)<=u(:,t).*(Rd-Sd)+Sd];
% end
%展开表达式:
for t=2:T
for i=1:gennum
% st=st+[-Rud(i,1)*u(i,t)+(u(i,t)-u(i,t-1))*limit(i,2)-limit(i,1)*(1-u(i,t))<=p(i,t)-p(i,t-1)];
% st=st+[p(i,t)-p(i,t-1)<=Rud(i,1)*u(i,t-1)+(u(i,t)-u(i,t-1))*limit(i,2)+limit(i,1)*(1-u(i,t))];
%由于原式可能关机以后就无法再开动了,改用下式
st=st+[p(i,t-1)-p(i,t)<=Rud(i,1)*u(i,t)+(1-u(i,t))*(limit(i,2)+limit(i,1))/2];%下坡
st=st+[p(i,t)-p(i,t-1)<=Rud(i,1)*u(i,t-1)+(1-u(i,t-1))*(limit(i,2)+limit(i,1))/2];%上坡
end
end
%% 热备用约束
hp=0.05;%热备用系数
for t=1:T
st=st+[sum(u(:,t).*limit(:,1)-p(:,t))>=hp*PL(1,t)];
end
%% 启停时间约束
%启动约束
for t=2:T
for i=1:gennum
indicator=u(i,t)-u(i,t-1);%启停时间约束的简化表达式(自己推导的),indicator为1表示启动,为0表示停止
range=t:min(T,t+lasttime(i)-1);
st=st+[u(i,range)>=indicator];
end
end
%停机约束
for t=2:T
for i=1:gennum
indicator=u(i,t-1)-u(i,t);%启停时间约束
range=t:min(T,t+lasttime(i)-1);%特别限制时间上限
st=st+[u(i,range)<=1-indicator];
end
end
%% 启停成本约束
for t=1:T %启停成本零限约束
for i=1:gennum
st=st+[costH(i,t)>=0];
st=st+[costJ(i,t)>=0];
end
end
for i=1:gennum %启停成本条件约束
for t=2:T
st=st+[costH(i,t)>=H(i,1)*(u(i,t)-u(i,t-1))];
st=st+[costJ(i,t)>=J(i,1)*(u(i,t-1)-u(i,t))];
end
st=st+[costH(i,1)>=H(i,1)*(u(i,1)-u0(1,i))];%初始状态下的启停成本
st=st+[costJ(i,1)>=J(i,1)*(u0(1,i)-u(i,1))];
end
%% 求解
ops=sdpsettings('solver', 'cplex');
result=solvesdp(st,totalcost);
double(totalcost)
% 画图
subplot(1,2,1)
bar(value(p)','stack')%阶梯图
legend('Unit 1','Unit 2','Unit 3','Unit 4','Unit 5','Unit 6'); %在坐标轴上添加图例
subplot(1,2,2)
stairs(value(p)')
legend('Unit 1','Unit 2','Unit 3','Unit 4','Unit 5','Unit 6'); %在坐标轴上添加图例
xlswrite('机组组合问题求解结果',double(u),'机组各时段启停计划');
set(0,'ShowHiddenHandles','On')
set(gcf,'menubar','figure')
uc_matlab电力_机组组合优化、MATLAB_UC机组组合_机组问题_matlab_
版权申诉
4星 · 超过85%的资源 77 浏览量
2021-10-02
00:10:04
上传
评论 1
收藏 2KB RAR 举报
呼啸庄主
- 粉丝: 74
- 资源: 4702
最新资源
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 基于Python皮肤电信号的情绪识别算法源码+模型+PPT+详细文档+全部数据资料.zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 区块链毕业设计 基于区块链的慈善募捐平台的智能合约源码+详细文档+全部资料(高分项目).zip
- 免费听歌软件,支持无损音乐下载,支持收藏音乐同步
- 锐起RDV-5.0 build 6503
- ngrok-stable-windows-amd64.zip
- 狗脸检测数据集VOC+YOLO格式6154张1类别.7z
- 使用C++制作一个头像框
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈