基於CVX凸最佳化的電動汽車充放電排程matlab模擬

软件算法开发發表於2024-10-17

1.程式功能描述
基於CVX凸最佳化的電動汽車充放電排程.模擬輸出無電動汽車充電時的負載,電動汽車充電時cvx全域性最佳化求解後的總負載,電動汽車充電時cvx區域性最佳化求解後的總負載,純電動汽車充電時總負載。

2.測試軟體版本以及執行結果展示
MATLAB2022a版本執行

3.核心程式

disp('CVX二次規劃解...');
cvx_begin
    variable v_x(Nvars);
    minimize(  k0*sum(pow_p(v_x(1:Nslot),1)) + (k1/2)*sum(pow_p(v_x(1:Nslot),2)) + beta*sum(square(F1)*square(v_x(Nslot+1:Nvars)))-k0*sum(pow_p(Load_basic0(1:Nslot),1)) - (k1/2)*sum(pow_p(Load_basic0(1:Nslot),2)) )
    % 目標函式和約束條件
    Eq_L * v_x == Eq_R;
    Ij1 * v_x <= Ij2;
    Ij3 * v_x <= Ij4;
    Ij5 * v_x <= Ij6;
    v_x >= Xmin;
    v_x <= Xmax;
cvx_end
................................................................................
% 繪製不包括電動汽車充電的基礎負載
figure;
plot(1:Nslot,Load_basic0,'-bs',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.0,0.0]);
hold on
plot(1:Nslot,VE_load(:,3),'-mo',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.5,0.9,0.0]);
hold on
plot(1:Nslot,Charged_Load(:,3),'-b^',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.2,0.9,0.5]);
hold on
plot(1:Nslot,N_Charged_Load(:,3),'-r>',...
    'LineWidth',1,...
    'MarkerSize',6,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.9,0.9,0.0]);
ylabel('負載 [KW]');
xlabel('小時.');
legend('無電動汽車充電時的負載','電動汽車充電時cvx全域性最佳化求解後的總負載','電動汽車充電時cvx區域性最佳化求解後的總負載','純電動汽車充電時總負載');
 
clc; 
Result(:,1) = Load_basic0;
Result(:,2) = VE_load(:,3);
Result(:,3) = Charged_Load(:,3);
Result(:,4) = N_Charged_Load(:,3);
 
% 總充電能量
total_charged=0;
for i=1:Ncar
    total_charged=total_charged+ (bat_Cap1-E_Charged(i,1));
end
fprintf('應充電能量總量 %g.\n\n',total_charged);
fprintf('實際充電能量總量:全域性最優方案=%g, 區域性最優方案=%g, 等額分配方案=%g.\n\n',sum(Result(:,2)-Result(:,1)), sum(Result(:,3)-Result(:,1)), sum(Result(:,4)-Result(:,1)) );
    
 
% 負載峰值
Peak_based=max(Load_basic0); % 基礎負載
Peak_Charged=max(Charged_Load(:,3)); % 充電後的負載
Peak_reduction=(Peak_based-Peak_Charged)/Peak_based;
fprintf('峰值比較:基礎負載=%g, 全域性最優方案=%g, 區域性最優方案=%g, 等額分配方案=%g KW.\n\n',max(Result(:,1)), max(Result(:,2)), max(Result(:,3)), max(Result(:,4)) );
31

  


4.本演算法原理
隨著電動汽車(Electric Vehicles, EVs)的普及,其充放電排程問題成為了研究熱點。合理的充放電排程不僅可以滿足使用者的出行需求,還可以對電網的負荷進行平抑,減少電網的峰谷差,提高電網的穩定性。CVX是一個用於解決凸最佳化問題的MATLAB軟體包,它可以方便地描述和解決各種凸最佳化問題,包括電動汽車的充放電排程問題。

4.1 CVX凸最佳化
CVX是一個用於解決凸最佳化問題的Matlab工具箱,它能夠自動轉換凸最佳化問題為標準形式,並利用先進的內點法求解。在電動汽車充放電排程問題中,可以使用CVX定義和解決上述最佳化問題。具體步驟包括:

定義最佳化變數:充電和放電功率。

構建目標函式和約束條件。

呼叫CVX求解器求解。

CVX是一個用於解決凸最佳化問題的建模系統,它能夠方便地表述和解決各種凸最佳化問題。凸最佳化是最佳化問題的一個重要分支,一旦找到了一個區域性最優解,那麼這個解也一定是全域性最優的。這使得凸最佳化問題在實際應用中具有非常重要的價值。

CVX支援多種型別的凸最佳化問題,包括線性規劃(LPs)、二次規劃(QPs)、二階錐規劃(SOCPs)和半定規劃(SDPs)等。此外,它還可以解決更復雜的凸最佳化問題,如不可微函式(如L1範數)的最佳化、約束範數最小化、熵最大化、行列式最大化等。CVX也支援求解混合整數凸規劃(MIDCPs)問題。

在使用CVX時,使用者需要定義最佳化問題,包括目標函式和約束條件。目標函式必須是凸的,而約束函式必須是凸的或仿射的。CVX使用了一種特殊的語法來描述這些問題,例如使用“minimize”語句定義目標函式,使用“subject to”語句定義約束條件。此外,CVX還提供了豐富的函式庫和工具箱,方便使用者進行建模和求解。

4.2 電動汽車充放電排程
基於CVX凸最佳化的電動汽車充放電排程方法可以有效地平抑電網的負荷峰值,提高電網的穩定性。透過合理地排程電動汽車的充放電行為,可以滿足使用者的出行需求,同時降低使用者的充電成本。未來可以進一步研究多目標最佳化、不確定性處理等問題,以完善電動汽車的充放電排程方法。

相關文章