clc
clear
close all
%% 算法总参数设定
Number=5;
%% 根据超拉丁采样(LHS)生成Number个初始样本点
lambda_Wb=[0.40*ones(1,7),0.75*ones(1,4),1.20*ones(1,3),0.75*ones(1,4),1.20*ones(1,4),0.40*ones(1,2)];
% % lambda_Ws = 0.4*ones(1,24);
lambda_Ws=[0*ones(1,7),0.35*ones(1,4),0.5*ones(1,3),0.35*ones(1,4),0.5*ones(1,4),0*ones(1,2)];
%通过LHS生成样本点
for t=1:24
temp=lhsdesign(Number,1); %生成每个时段的抽样中间辅助矩阵,为1维分Number层的超拉丁抽样结果
lambda_DAs(:,t)=temp.*(lambda_Wb(t)-lambda_Ws(t))+lambda_Ws(t); %生成运营商制定的售电价格
lambda_DAb(:,t)=lambda_DAs(:,t)+rand(Number,1).*(lambda_Wb(t)-lambda_DAs(:,t)); %生成运营商制定的购电价格(购电价应大于售电价所以这么写)
end
disp('超拉丁采样(LHS)生成Number个初始样本点,结束!')
%% 通过生成的样本点调用下层博弈模型,计算出每个VPP的交易电量来构成样本数据集
for i=1:Number
[P_VPP_s1,P_VPP_b1,~]=Fun_VPP1(lambda_DAb(i,:),lambda_DAs(i,:));
[P_VPP_s2,P_VPP_b2,~]=Fun_VPP2(lambda_DAb(i,:),lambda_DAs(i,:));
[P_VPP_s3,P_VPP_b3,~]=Fun_VPP3(lambda_DAb(i,:),lambda_DAs(i,:));
P_VPP_s(i,:)=[P_VPP_s1,P_VPP_s2,P_VPP_s3];
P_VPP_b(i,:)=[P_VPP_b1,P_VPP_b2,P_VPP_b3];
end
disp('样本数据集构成,结束!')
%% 修正Kriging模型,计算每组样本点对应的目标函数值
for i=1:Number
[C_DSO(i,1)]=Fun_DSO(lambda_DAs(i,:),lambda_DAb(i,:),P_VPP_b(i,:),P_VPP_s(i,:));
end
disp('计算每组样本点对应的目标函数值,结束!')
%% 关键区域划分,并计算各个区域的最优值
l=1; %划分的区域的编号,初始化为1(编号越小,说明该区域包含最优解的概率越大)
S=C_DSO; %设定S为所有电价样本对应的上层目标函数值集
for i=1:Number
lambda_DA(i,:)=[lambda_DAs(i,:),lambda_DAb(i,:)]; %将售卖电价统一放入lambda_DA中存储
end
X=lambda_DA; %设定X为所有电价样本点集
SL=lambda_DA; %后续计算半径r中用于生成电价上下边界值的辅助变量
k_max=5; %设定均衡算法的最大迭代次数
[Max_C_DSO,ind]=max(C_DSO); %寻找区域1中最大的上层目标函数值和对应的电价样本点集编号
y(1).S=[Max_C_DSO]; %给y(l)的S赋予当前找到的上层目标函数值
y(l).X=lambda_DA(ind,:); %给y(1)的X赋予当前找到的最优电价样本
S(ind)=[]; %将S的集合中删去此时的区域1的最优解的值
SL(ind,:)=[];
lambda_DA0=lambda_DA(ind,:); %设定区域l的中心电价的值
while 1
if isempty(S) %判断S是否为非空集(也就是关键区域完成划分)
break;
end
eval(['y',num2str(l),'.S=[];']);
eval(['y',num2str(l),'.X=[];']);
k=1; %设定初始迭代次数
while k<=k_max
if isempty(S) %判断S是否为非空集(也就是关键区域完成划分)
break;
else
lambda_DA_max=max(sqrt(sum(SL.^2,2))); %计算得到电价的上边界值
lambda_DA_min=min(sqrt(sum(SL.^2,2))); %计算得到电价的下边界值
r=norm(lambda_DA_max-lambda_DA_min)/3*(k_max-k+1)/k_max; %计算得到半径r
ind=Fun_R(lambda_DA0,SL,r); %寻找距离中心点小于等于r的点的编号
if isempty(ind) %确认寻找到的点集非空
break;
else
eval(['y',num2str(l),'.S=[y',num2str(l),'.S;S(ind)];']);
eval(['y',num2str(l),'.X=[y',num2str(l),'.X;SL(ind,:)];']);
S(ind)=[]; %将S的集合中删去此时距离小于r的值
SL(ind,:)=[]; %将SL的集合中删去此时距离小于r的值
k=k+1; %均衡算法迭代次数加一
end
end
end
[Max_C_DSO,ind]=max(S); %寻找除去区域l外的最大的上层目标函数值和对应的电价样本点集编号
lambda_DA0=SL(ind,:); %重新给中心电价赋值
l=l+1; %划分区域编号加一
end
disp('关键区域划分,结束!')
%% 在每个关键区域上,采用粒子群算法求解局部最优电价
Opt_C=zeros(l,1); %初始化每个关键区域的Kriging最终最优收益
Opt_X=zeros(l,48); %初始化每个关键区域的Kriging最终最优电价点集
MaxIter=30; %设定求解粒子群算法的最大迭代次数
vlimit=[-1,1]; %设置速度限制
w=0.8; %惯性权重设定
c1=0.5; %自我学习因子设定
c2=0.5; %群体学习因子设定
for i=1:l
if ~exist(eval(['''y',num2str(i),'''']))
break;
else
if eval(['numel((y',num2str(i),'.S))==1;'])
Opt_C(i)=eval(['y',num2str(i),'.S;']);
Opt_X(i,:)=eval(['y',num2str(i),'.X;']);
else
eval(['xm=[y',num2str(i),'.X];']); %每个个体的历史最佳位置
x=xm; %当前最佳位置
v=zeros(size(x));
eval(['num=size(y',num2str(i),'.S,1);']); %种群数目
fym=-inf; %种群历史最佳适应度
eval(['fxm=y',num2str(i),'.S;']); %每个个体的历史最佳适应度
[~,ind]=max(fxm);
ym=x(ind,:); %种群的历史最佳位置
iter=2;
Record=zeros(MaxIter,1);
Record(1)=max(eval(['y',num2str(i),'.S;']));
while iter<=MaxIter
for s=1:num
[P_VPP_s1,P_VPP_b1,~]=Fun_VPP1(x(s,25:48),x(s,1:24));
[P_VPP_s2,P_VPP_b2,~]=Fun_VPP2(x(s,25:48),x(s,1:24));
[P_VPP_s3,P_VPP_b3,~]=Fun_VPP3(x(s,25:48),x(s,1:24));
P_VPP_s(s,:)=[P_VPP_s1,P_VPP_s2,P_VPP_s3];
P_VPP_b(s,:)=[P_VPP_b1,P_VPP_b2,P_VPP_b3];
[fx]=Fun_DSO(x(s,1:24),x(s,25:48),P_VPP_b(s,:),P_VPP_s(s,:));
if fxm(s)<fx
fxm(s)=fx; %更新个体历史最佳适应度
xm(s,:)=x(s,:); %更新个体历史最佳位置
end
end
if fym<max(fxm)
[fym,nmax]=max(fxm); %更新群体历史最佳适应度
ym=xm(nmax,:); %更新群体历史最佳位置
end
v=v*w+c1*rand*(xm-x)+c2*rand*(repmat(ym,size(v,1),1)-x); %速度更新
%边界速度处理
v(v>vlimit(2))=vlimit(2);
v(v<vlimit(1))=vlimit(1);
x=x+v; %位置更新
for s=1:num
%边界位置处理
ind=find(x(s,1:24)<lambda_Ws(1:24));
x(s,ind)=lambda_Ws(ind);
ind=find(x(s,25:48)>lambda_Wb(1:24));
x(s,24+ind)=lambda_Wb(ind);
end
Record(iter)=fym; %最大值记录
iter=iter+1;
end
Opt_C(i)=Record(end);
Opt_X(l,:)=ym;
end
end
end
disp('局部最优电价求解,结束!')
%% 结果输出
[P_VPP_s1,P_VPP_b1,Out1]=Fun_VPP1(ym(25:48),ym(1:24));
[P_VPP_s2,P_VPP_b2,Out2]=Fun_VPP2(ym(25:48),ym(1:24));
[P_VPP_s3,P_VPP_b3,Out3]=Fun_VPP3(ym(25:48),ym(1:24));
Result_P_VPP_s=[P_VPP_s1,P_VPP_s2,P_VPP_s3];
Result_P_VPP_b=[P_VPP_b1,P_VPP_b2,P_VPP_b3];
[Result_C_DSO]=Fun_DSO(ym(1:24),ym(25:48),Result_P_VPP_b,Result_P_VPP_s);
disp(['DSO的收益为 ', num2str(Result_C_DSO),' 千元']);
figure(1)
plot(ym(1:24),'-s','LineWidth',1.5,'Color',[227, 181, 135]/255)
hold on
plot(ym(25:48),'-d','LineWidth',1.5,'Color',[37 120 181]/255)
hold on
plot(lambda_Ws,'-x','LineWidth',1.5,'Color',[227, 181, 135]/255)
hold on
plot(lambda_Wb,'-^','LineWidth',1.5,'Color',[37 120 181]/255)
legend('售电价','购电价','上网电价','电网电价')
legend('boxoff')
grid on
xlabel('时间/h');
ylabel('电价/(千元/MWh)')
title('交易电价')
figure(2)
b4 = bar([P_VPP_b1-P_VPP_s1;P_VPP_b3-P_VPP_s3;P_VPP_b3-P_VPP_s3]','stack');
set(b4(1),'FaceColor',[182 91 70]/255)
set(b4(2),'FaceColor',[245 161 31]/255)
set(b4(3),'FaceColor',[132 192 190]/255)
xlabel('\fontname{宋体}时间\fontname{Times New Roman}/h')
ylabel('\fontname{宋体}功率\fontname{Times New Roman}/MW')
legend('VPP1','VPP2','VPP3')
figure(3)
b1 = bar(Out1','stack');
set(b1(1),'FaceColor',[197 105 120]/255)
set(b1(2),'FaceColor',[225 161 77]/255)
set(b1(3),'FaceColor',[171 204 137]/255)
set(b1(4),'FaceColor',[37 120 181]/255)
set(b1(5),'FaceColor',[245 193 155]/255)
set(b1(6),'FaceColor',[197 187 163]/255)
xlabel('\fontname{宋体}时间\fontname{Times New Roman}/h')
ylabel('\fontname{宋体}功率\fontname{Times New Roman}/MW')
legend('共享电量','微燃机组','储能','柔性负荷','风机','总负荷')
figure(4)
b2 = bar(Out2','stack');
set(b2(1),'FaceColor',[197 105 120]/255)
set(b2(2),'FaceColor',[225 161 77]/255)
set(b2(3),'FaceColor',
没有合适的资源?快使用搜索试试~ 我知道了~
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理.zip
共6个文件
m:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 159 浏览量
2023-10-26
23:10:59
上传
评论 1
收藏 8KB ZIP 举报
温馨提示
参考文档:《基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理》复现元模型 matlab+cplex 主要内容:代码主要做的是虚拟电厂的优化调度策略,其实是多虚拟电厂/微网的优化调度策略,模型为双层,首先下层模型中,构建了多个虚拟电厂的联合调度模型,以每个虚拟电厂的运行成本最低为优化目标,而上层为领导者模型,主要是优化市场运营商的电价,包括售电电价和购电电价的优化,从而构成了主从博弈模型,在求解的过程中,上层采用的是粒子群算法,而下层则是调用CPLEX求解器进行求解,由于模型整体规模较大,故采用了元模型算法加速求解
资源推荐
资源详情
资源评论
收起资源包目录
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理.zip (6个子文件)
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理
Fun_VPP3.m 2KB
Fun_VPP1.m 2KB
Fun_VPP2.m 2KB
Main.m 9KB
Fun_R.m 214B
Fun_DSO.m 847B
共 6 条
- 1
资源评论
- wjlassassin2024-02-01资源很实用,内容详细,值得借鉴的内容很多,感谢分享。
- qq_303955212024-01-16这个资源对我启发很大,受益匪浅,学到了很多,谢谢分享~
- liuguangfu012024-05-10超级好的资源,很值得参考学习,对我启发很大,支持!
- 2301_766993512023-11-22资源很不错,内容和描述一致,值得借鉴,赶紧学起来!
程高兴
- 粉丝: 258
- 资源: 427
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功