zl程序教程

您现在的位置是:首页 >  后端

当前栏目

基于P2P电力市场中的成本分配研究【IEEE39节点】(Matlab代码实现)

MATLAB节点代码 实现 基于 研究 市场 分配
2023-09-14 09:05:19 时间

👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 文献来源

🌈4 Matlab代码实现


💥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 文献来源

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码实现