👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
分布式能源的部署,结合更加积极主动的需求侧管理,正在电力系统运行和电力市场中引入一种新的范式。在以消费者为中心的市场框架中,点对点方法获得了极大的兴趣。点对点市场依赖于所有代理之间的多边双边谈判来匹配供应和需求。这些市场可以将交易所完整地映射到电网上,因此可以重新考虑与使用公共基础设施和服务相关的成本分担。在这里,我们建议以几种可选的方式,即统一地,基于代理之间的电距离和区域,通过外生网络费用来确定这种成本。这个品种涵盖了主要的电网物理和调节配置。由于归因机制是以外生的方式定义的,以影响每个P2P交易,它们最终将市场问题转移到覆盖网格开发成本。必要时,它甚至可以用来释放网格上的应力。我们的方法在一个使用IEEE 39总线测试系统的测试用例中得到了说明,该测试用例说明了归因机制对交易和网格使用的影响。
📚2 运行结果
文章结果:
主函数代码:
clc;
clearvars ;
close all;
%% Definition of the agents and their costs/benefits
testcase = case39b_31a;
[nodes,ref_node,n_units,units_Pmin,units_Pmax,units_a,units_b,units_node,node_units,branch_conn,branch_B,branch_G,branch_max,bus_area] = read_mpc_case(testcase,'DC');
n_agents = n_units - length(nodes);
Pmin = units_Pmin(1:n_agents);
Pmax = units_Pmax(1:n_agents);
a = units_a(1:n_agents);
b = units_b(1:n_agents);
consumers = (find(Pmin<0))'; % No prosumers present
producers = (find(Pmax>0))'; % No prosumers present
% a(consumers) = -a(consumers);
% b(consumers) = -b(consumers);
% Definition of the negocation neigbourhoods
om= cell( n_agents ,1);
Conn = zeros(n_agents);
for n= producers
om{n}= consumers ;
Conn(n,consumers) = ones(1,length(consumers));
end
for n= consumers
om{n}= producers ;
Conn(n,producers) = ones(1,length(producers));
end
Conn = logical(Conn);
%% Network fees
N_tests = 1;
n_tests_start = 1;
n_tests_stop = n_tests_start+N_tests-1;
gamma_free % Free market
% gamma_unique % Unique Transmission Price (UTP)
% gamma_distance % Distance Transmission Price (DTP)
% gamma_zonal % Uniform Zonal Transmission Price (ZTP)
%% Definition of optimization parameters
ADMM_opt.rho = 1;
ADMM_opt.maxit = 2000;
ADMM_opt.method = 'quadprog';
ADMM_opt.stopcrit = 'on';
ADMM_opt.espPrimR = 1e-3;
ADMM_opt.espDualR = 1e-3;
ADMM_opt.TradeBound = 'on';
ADMM_opt.Plot = 'none';
%% Simulation
for test=n_tests_start:n_tests_stop
disp(strcat('Test case',{' '},num2str(test)))
% Test case's gamma
gamma = gamma_base(:,:,test-n_tests_start+1);
% Opti algo
[P,Y,success,flagout,raw] = QP_P2P_ADMM(a,b,Pmin,Pmax,Conn,gamma,[],ADMM_opt);
% Save results
results.Yall = raw.Y;
results.Pall = raw.P;
results.Mumall = raw.Mum;
results.Mupall = raw.Mup;
results.Y = Y;
results.P = P;
results.Mum = raw.Mum(:,raw.last_it);
results.Mup = raw.Mup(:,raw.last_it);
results.gamma = gamma;
results.gamma_base = gamma_base;
results.Fees = Fees;
results.current_network_fee = test;
results.current_network_fee_what = 'index number in tested Fees array';
results.testcase = testcase;
results.n_agents = n_agents;
results.a = a;
results.b = b;
results.Pmin = Pmin;
results.Pmax = Pmax;
results.consumers = consumers;
results.producers = producers;
results.om = om;
results.Conn = Conn;
results.k = raw.last_it;
results.comptime = raw.comptime;
results.comptime_unit = 's';
results.rho_ADMM = ADMM_opt.rho;
addpath('simulations/old');
save(strcat('simulations/old/results_',Fees.label,'_',num2str(test),'.mat'),'results')
rmpath('simulations/old');
results=rmfield(results,{'Pall','Yall','Mumall','Mupall'});
save(strcat('simulations/results_',Fees.label,'_',num2str(test),'.mat'),'results');
% Show results
disp(strcat('Stopped after',{' '},num2str(raw.last_it),...
' iterations computed in',{' '},num2str(raw.comptime),'s'))
disp(strcat('Primal and Dual residual:',{' '},...
num2str(raw.PrimR(raw.last_it)),' and',{' '},num2str(raw.DualR(raw.last_it))))
end
🎉3 文献来源
部分理论来源于网络,如有侵权请联系删除。