天天看點

電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)

1 全文概述

汽車行業正在大力投資插電式混合動力汽車 (PHEV) 和全電動汽車 (EV),主要是為了減少目前汽車技術的二氧化碳排放和對石油的依賴。由于用電量的增加,汽車電氣化将對電網産生重大影響。

由于用電量的增加,汽車電氣化将對電網産生重大影響。對電動汽車 (EV) 的充電和放電進行智能排程非常重要。然而,排程問題存在兩個主要挑戰。首先,尋找可以最小化總成本的全局最優排程解決方案具有挑戰性。其次,很難找到能夠處理大量人口和電動汽車随機到達的分布式排程方案。在本文中,我們提出了電動汽車充電和放電的全局最優排程方案和局部最優排程方案。首先制定了一個全局排程優化問題,其中優化充電功率以最小化所有在白天進行充電和放電的電動汽車的總成本。全局最優解提供全局最小總成本。然而,全局最優排程方案是不切實際的,因為它需要關于未來基本負載和到達時間以及将在一天中的未來時間到達的電動汽車的充電時間的資訊。為了開發一個實用的排程方案,本文制定了一個局部排程優化問題,旨在最小化本地組中目前正在進行的 EV 集中 EV 的總成本。局部最優排程方案不僅可擴充到大型 EV 種群,而且對動态 EV 到達具有彈性。通過仿真,我們證明了與全局最優排程方案相比,局部最優排程方案可以實作接近的性能。

電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)

2 數學模型

詳細數學模型和解釋見第4部分。

3 Matlab實作

3.1 代碼前的準備

安裝CVX包:

​​風電随機性動态經濟排程模型(Matlab代碼實作)​​

然後:也是代碼前的準備:

電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)

3.2 運作結果

電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
電動汽車有序無序充放電的優化排程(Matlab代碼實作)風電随機性動态經濟排程模型(Matlab代碼實作)
close all;
clc;
clear;


%% 參數設定

%==(1)基本荷荷向量===
L_b=[
    1648181.19
    1510114.92
    1404600.51
    1348140.62
    1355294.53
    1380434.41
    1472398.73
    1619859.88
    1774726.71
    1891739.09
    2024589.36
    2154006.65
    2214969.44
    2248348.3
    2257444.05
    2253898.58
    2251095.52
    2240891.11
    2187658.11
    2060455.55
    2032531.95
    1984614.47
    1846244.76
    1676395.15];

%====(2)預測的基本負荷(平均相對誤差 = 0.089)====
P_L_b1=[
    1737223.863
    1603267.075
    1501043.33
    1434323.708
    1427034.265
    1445808.13
    1535646.84
    1703557
    1878913.403
    2041190.428
    2189203.243
    2300813.958
    2376838.56
    2431838.998
    2456820.033
    2472628.88
    2497750.498
    2502256.753
    2487853.418
    2333072.535
    2313458.498
    2278059.543
    2121749.573
    1908084.005];


%====(3)預測的基本負荷(平均相對誤差 = 0.0414)====
P_L_b2=[
    1599948.91
    1468345.518
    1370502.199
    1310946.046
    1308525.559
    1330298.288
    1417044.254
    1592177.276
    1774327.31
    1935791.394
    2081450.673
    2194127.508
    2266347.528
    2310264.895
    2317806.969
    2328853.886
    2350763.395
    2356239.943
    2340220.599
    2215920.234
    2192252.838
    2168526.739
    2014122.374
    1803843.804];

%=====(4)第二次預測的基本負荷(更好的預測)(平均相對誤差=0.0234)===
P_L_b3=[
    1648037.519
    1458944.669
    1366366.043
    1310276.476
    1309105.99
    1329282.055
    1411672.493
    1587762.671
    1728429.463
    1888917.875
    2032770.183
    2133804.711
    2199858.463
    2240117.111
    2241852.165
    2245048.574
    2259487.69
    2260142.395
    2243557.341
    2145562.018
    2122157.145
    2104126.554
    1948760.596
    1740961.875];

%=====選擇使用哪個預測負荷====
P_L_b=P_L_b2;

%% 微電網的基本負荷
Scale_factor=1/1500;
L_b_mic=L_b*Scale_factor;  % 基本負荷
P_L_b_mic=P_L_b*Scale_factor;  % 基本預測負荷

%% 價格模型
% alfa=1.0;
% theta=1;
omega=1.2*max(L_b_mic);
k_0=0.0001;
k_1=0.00012;
k_2=0;
%====(1)壽命縮減成本======
beta=0.001;
beta=0;

%===簡單乘法計算=====
% k_con=alfa/(omega^theta*(theta+1));

%=====充電間隔時間======
tau=1; % 小時内

%=====充電間隔數========
num_slot=length(L_b_mic);

%====(2)基本價格=======
price_basic=zeros(num_slot,1); % 基于基本負荷的價格
for i=1:num_slot
    price_basic(i)=k_0+k_1* L_b_mic(i);
end
fprintf('價格,最低價格=%g,最高價格=%g.\n',min(price_basic), max(price_basic));


%% 電動汽車EV容量
Cap_battery_org=16; % KWh
gamma=0.9; % 充電完成時電池的百分比
Cap_battery=gamma*Cap_battery_org;

%% ==最大充電率===
P_max=5; % KW

%% 電動汽車數量
num_EV=200;

% 僅給電池充電的電動汽車的百分比
P_Chg=0;

% CHG EVs數量
num_CHG_EV=round(P_Chg*num_EV);  % CHG EV 将位于 EV 資訊矩陣的前面部分。
% V2G EVs數量
num_V2G_EV=num_EV-num_CHG_EV;

%% 電動汽車充電模式
% 30% 的電動汽車在間隔 1 之前連接配接到充電站,其餘的均勻分布

%EV矩陣:1) 到達時間,2) 出發時間,3) 初始能量,4) 充電周期,5) 最小充電時間%

% EV_info=zeros(num_EV,3);
%===間隔1前接入站的EVS百分比====
% Per_EV=0.1;
%=====其他車輛到達時間均勻分布在[  1,20 ]之間======
% for i=1:num_EV
%     temp_00=rand;
%     if temp_00<=Per_EV
%         T_arrival(i,1)=1;
%     else
%         T_arrival(i,1)=round(1 + (20-1).*rand);
%     end
% end
%
%=====充電時間均勻分布在 [4, 12] 小時之間======
% T_charging= round(4 + (12-4).*rand(num_EV,1));
% T_charging=-1*sort(-1*T_charging);
%
% % the departure time
% for i=1:num_EV
%     T_departure(i,1)=min(24, T_arrival(i,1)+T_charging(i,1));
% end
%====初始電量均勻分布在電池容量的[0 0.8]之間======
% Ini_percentage=0+ (0.8-0).*rand(num_EV,1);
% % fill the EV_info
% EV_info(:,1)=T_arrival;
% EV_info(:,2)=T_departure;
% EV_info(:,3)=Cap_battery_org*Ini_percentage;
%
% for i=1:num_EV
%     EV_info(i,4)=EV_info(i,2)-EV_info(i,1)+1; % 充電周期
%     EV_info(i,5)=EV_info(i,3)/P_max; % 最小充電時間
%     if EV_info(i,4) < EV_info(i,5)
%         fprintf('EV %g 充電時間不合理.\n',i);
%     end
% end
%
% % save and load EV_info
% save EV_info.txt EV_info -ascii;

load EV_info.txt;
EV_info=EV_info(1:num_EV,:);

%% 電動汽車與充電間隔的關系
F=zeros(num_EV, num_slot);
G=ones(num_EV, num_slot);
for i=1:num_EV
    for j=EV_info(i,1):EV_info(i,2)
        F(i,j)=1;
        G(i,j)=0;
    end
end
F1=reshape(F',1,[]);
% F=ones(num_EV, num_slot);

%% 繪制基本負荷
xx_1=1:num_slot;
figure;
yy_1(:,1)=L_b_mic;
yy_1(:,2)=P_L_b_mic;
plot(xx_1,yy_1);
ylabel('負荷[KW]');
xlabel('小時數');
legend('實際負荷量','預測負荷量');

%% 使用CVX工具的V2G全局最優方案

%(1)等式限制: Ax=b
% (2)優化變量x=[z1, z2, ..., z_24, x11, x12, ...., x_100,24]'
num_OptVar=1*num_slot+num_slot*num_EV;
b_a=L_b_mic; %第一個等式限制的矩陣
A1_a=zeros(num_slot, num_OptVar-1*num_slot);
A1=[eye(num_slot) A1_a];

A2_a=zeros(num_slot, num_OptVar-1*num_slot);
s_temp=0;
for i=1:num_slot
    for j=1:num_EV
        A2_a(i, (j-1)*num_slot+i)=F(j,i);
        % fprintf('Assign F(%g,%g)=%g, to A2_a(%g, %g).\n',j,i,F(j,i),i,(j-1)*num_slot+1);
        s_temp=s_temp+F(j,i);
    end
end
A2_b=zeros(num_slot, num_slot);
A2=[A2_b A2_a];

A_a=A1-A2;  % 第一個等式限制的矩陣
clear A1 A2 A1_a A2_a A2_b;

%======第一個等式限制的矩陣=====
B_1=zeros(num_EV, num_OptVar-1*num_slot);
for i=1:num_EV
    B_1(i,(i-1)*num_slot+1:(i-1)*num_slot+num_slot)=F(i,:);
end
temp_1=zeros(num_EV, num_slot);
B1=[temp_1 B_1];    % 第二等式限制的矩陣
b_b=(Cap_battery/tau)*ones(num_EV,1)-EV_info(:,3);% 第二等式限制的矩陣
clear  B_1  temp_1;

%合并等式矩陣
% Eq_left=[A_a' B1']';
% Eq_right=[b_a' b_b']';


%% ======等式限制=====
Eq_L=A_a;
Eq_R=b_a;
clear  A_a  b_a;
%% ======不等式限制=====
% ====1)第一個不等式限制=====
In_1=zeros(num_EV*num_slot, num_OptVar);
for i=1:num_slot
    for j=1:num_EV
        In_1((i-1)*num_EV+j,num_slot+(j-1)*num_slot+1:num_slot+(j-1)*num_slot+i)=F(j,1:i);
lot1, ..., EV1_slot2, EV2_slot2,...]'

., EV1_slot2, EV2_slot2,...]'

temp_b2=Cap_battery_org - EV_info(1:num_EV,3);
for i=1:num_slot
    In_b2( (i-1)*num_EV+1:(i-1)*num_EV+num_EV, 1 )= (1/tau)*temp_b2;

''''''''''''

% 繪出每個電動車(全局最優方案)的電能水準演化圖。
figure;
xxx=0:num_slot;
plot(xxx,v_Energy_variation(1:40,:));
ylabel('電能[KWH]');
xlabel('小時數');
legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
title('全局最優方案中的電能變化');

% 繪制每個電動汽車的能量水準演化(局部最優方案)
figure;
xxx=0:num_slot;
plot(xxx,Energy_variation);
ylabel('電能[KWH]');
xlabel('小時數');
legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
title('局部最優方案中的電能變化');

% 繪制每個EV的能量水準演化(等配置設定方案)
figure;
plot(xxx,N_Energy_variation);
ylabel('電能[KWH]');
xlabel('小時數');
legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
title('均等配置設定最優方案中的電能變化');

% %繪制每輛電動汽車的充電率
figure;
EV_ID=65;
energy_mmm(1,:)=v_Energy_variation(EV_ID,:);
energy_mmm(2,:)=Energy_variation(EV_ID,:);
energy_mmm(3,:)=N_Energy_variation(EV_ID,:);
plot(xxx,energy_mmm);
ylabel('電能 [KWH]');
xlabel('時間(Hours)');
legend('全局最優方案','局部最優方案','均等配置設定方案');
title('電動汽車的電能變化');

figure;
nnn(:,1)=v_x_Matrix(EV_ID,:)';%全局最優
nnn(:,2)=x_Matrix(EV_ID,:)';%局部最優
nnn(:,3)=N_x_Matrix(EV_ID,:)';%均等配置設定
h=bar(xx,nnn);
ylabel('速率[KW]');
xlabel('時間(Hours)');
legend('全局最優','局部最優','均等配置設定');
title('全局最優方案中的充放電速率');      

繼續閱讀