该文研究了同一配电网下的多个综合能源微网 (integrated energy microgrids,IEM)的协同管理问题,旨在通 过配电网运营商(distribution system operator,DSO)制定电能 价格以协调 IEM 联盟的机组调度、需求响应和成员间的点 对点(peer-to-peer,P2P)电能交易。首先,构建了 DSO 与 IEM 联盟能源交易框架,分析了 DSO 与 IEM 联盟的博弈关系。 其次,将主从博弈与合作博弈相结合,建立了 DSO 与 IEM 联盟混合博弈优化模型,其中 DSO 为领导者,以最大化自 身效益为目标,通过制定电能价格引导 IEM 联盟运行优化; IEM 联盟为跟随者,以最大化自身效益为目标,通过合作 对 DSO 的决策进行响应。基于纳什谈判理论,将 IEM 模型 等效为联盟效益最大化和合作收益分配 2 个子问题,以保证 IEM 联盟的合作收益能在联盟成员之间公平分配。最后,利 用二分法分布式优化算法结合交替方向乘子法(alternating direction multiplier method,ADMM)求解所构建的模型。结 果表明,该文提出的混合博弈模型有效协调了 IEM 联盟的 运行优化,并实现了 IEM 联盟成员合作收益的公平分配。
部分代码:
%% 主从博弈过程
F = 0.5; % 缩放因子
CR = 0.9; % 交叉因子
%参数设置
groupSize =40; %个体数目(Number of individuals)
groupDimension=48; %染色体长度
MAXGEN =30; %最大遗传代数(Maximum number of generations)
v=zeros(groupSize,groupDimension); % 变异种群
u=zeros(groupSize,groupDimension); % 交叉种群
Unew=zeros(groupSize,groupDimension); % 边界处理后的种群
%初始种群
population = smartGroupInit(groupSize,groupDimension);% 初始化群体
gen=0; %种群世代计数器
fitness=-10000; %初始适应度
% fitness=-10000*ones(1,MAXGEN);%上层目标函数
user=1000000;%用户成本
while gen<MAXGEN
gen=gen+1
if gen==1
%计算目标函数值
[P_IL,P_IL_2,P_IL_3,P_batc,P_batc_2,P_batc_3,P_batc_0,P_batc_01,P_batc_02,P_batc_03,P_batd_01,P_batd_02,P_batd_03,P_batd,P_batd_2,P_batd_3,P_batd_0,P_MT,P_MT_2,P_MT_3,Obj_User1,Obj_User2,Obj_User3,Obj123,P_user12LA,P_LA2user1,P_user22LA,P_LA2user2,P_user32LA,P_LA2user3,value_P_user12users,value_P_user22users,value_P_user32users] = computeUserObj(population,P_PV,P_WT,P_BUILD,P_PV_2,P_WT_2,P_BUILD_2,P_PV_3,P_WT_3,P_BUILD_3);
[Pri_e_1,Pri_e_2,Pri_e_3,Pri_e_C01,Pri_e_C02,Pri_e_C03,Pri_e_D01,Pri_e_D02,Pri_e_D03,Objs1,Objs2,Objs3,Objs4,Objs]=computeUserObjs(population,Obj_User1,Obj_User2,Obj_User3,Obj123,value_P_user12users,value_P_user22users,value_P_user32users,P_batc_0,P_batd_0,P_batc_01,P_batc_02,P_batc_03,P_batd_01,P_batd_02,P_batd_03);
else
[P_IL,P_IL_2,P_IL_3,P_batc,P_batc_2,P_batc_3,P_batc_0,P_batc_01,P_batc_02,P_batc_03,P_batd_01,P_batd_02,P_batd_03,P_batd,P_batd_2,P_batd_3,P_batd_0,P_MT,P_MT_2,P_MT_3,Obj_User1,Obj_User2,Obj_User3,Obj123,P_user12LA,P_LA2user1,P_user22LA,P_LA2user2,P_user32LA,P_LA2user3,value_P_user12users,value_P_user22users,value_P_user32users] = computeUserObj(best,P_PV,P_WT,P_BUILD,P_PV_2,P_WT_2,P_BUILD_2,P_PV_3,P_WT_3,P_BUILD_3);
[Pri_e_1,Pri_e_2,Pri_e_3,Pri_e_C01,Pri_e_C02,Pri_e_C03,Pri_e_D01,Pri_e_D02,Pri_e_D03,Objs1,Objs2,Objs3,Objs4,Objs]=computeUserObjs(best,Obj_User1,Obj_User2,Obj_User3,Obj123,value_P_user12users,value_P_user22users,value_P_user32users,P_batc_0,P_batd_0,P_batc_01,P_batc_02,P_batc_03,P_batd_01,P_batd_02,P_batd_03);
end
%变异操作
v=mutate(population,F,MAXGEN,gen); %针对整个种群的变异
%交叉操作
u=crossover(population,v,CR);%40*24
%边界处理
Unew = boundaryprocess(u,pe_grid_S,pe_grid_B);
% 选择操作 (计算新的适应度)Unew,population都是40*24
[Newpopulation,fitbest,best,P_LA] =select(Unew,population,P_user12LA,P_user22LA,P_user32LA,P_LA2user1,P_LA2user2,P_LA2user3,pe_grid_S,pe_grid_B);
trace(gen,1)=gen; %赋值世代数
population=Newpopulation;
if fitness<=fitbest
fitness = fitbest;
trace(gen,2)=fitbest;
trace(gen,4)=Objs;
trace(gen,5)=Objs1;
trace(gen,6)=Objs2;
trace(gen,7)=Objs3;
remainbest=best;
else
trace(gen,2)=fitness;
trace(gen,4)=trace(gen-1,4);
trace(gen,5)=trace(gen-1,5);
trace(gen,6)=trace(gen-1,6);
trace(gen,7)=trace(gen-1,7);
end
trace(gen,3)=Objs4; %共享储能商的成本
end