【電力系統(tǒng)】考慮不同充電需求的電動汽車有序充電調度方法論文復現(xiàn)附matlab代碼
?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術同步精進,matlab項目合作可私信。
??個人主頁:Matlab科研工作室
??個人信條:格物致知。
更多Matlab完整代碼及仿真定制內(nèi)容點擊??
智能優(yōu)化算法?? ? ??神經(jīng)網(wǎng)絡預測?? ? ??雷達通信?? ? ?無線傳感器?? ? ? ?電力系統(tǒng)
信號處理?? ? ? ? ? ? ?圖像處理?? ? ? ? ? ? ??路徑規(guī)劃?? ? ??元胞自動機?? ? ? ?無人機
?? 內(nèi)容介紹
電動汽車(Electric Vehicle, EV)作為一種環(huán)保、高效的交通工具,受到越來越多人的青睞。然而,隨著電動汽車數(shù)量的增加,對電力系統(tǒng)的沖擊也越來越大。為了滿足不同充電需求的電動汽車有序充電調度,需要一種高效的算法步驟。
電動汽車有序充電調度是指根據(jù)電動汽車的充電需求和電力系統(tǒng)的供電能力,合理安排電動汽車的充電順序和充電時間。這樣可以最大程度地利用電力系統(tǒng)的資源,保證電動汽車的充電需求得到滿足,同時減少對電力系統(tǒng)的沖擊。
下面將介紹一種電動汽車有序充電調度方法的算法步驟。
第一步是確定電動汽車的充電需求。通過與電動汽車車主進行溝通,了解每輛電動汽車的充電需求,包括充電時間、充電電量等。同時,根據(jù)電動汽車的剩余電量和行駛里程,確定其充電的緊急程度。這些信息將作為算法的輸入。
第二步是獲取電力系統(tǒng)的供電能力。通過監(jiān)測電力系統(tǒng)的供電情況,包括發(fā)電能力、輸電能力和配電能力,確定電力系統(tǒng)的供電能力。這些信息將作為算法的輸入。
第三步是建立數(shù)學模型。根據(jù)電動汽車的充電需求和電力系統(tǒng)的供電能力,建立數(shù)學模型。這個模型可以是一個優(yōu)化問題,目標是最小化電力系統(tǒng)的負荷峰值或最大化電動汽車的充電效率。通過數(shù)學模型,可以將電動汽車的充電調度轉化為一個優(yōu)化問題,從而可以通過算法求解。
第四步是選擇合適的算法。根據(jù)建立的數(shù)學模型,選擇合適的算法進行求解。常用的算法包括貪心算法、遺傳算法、模擬退火算法等。選擇合適的算法可以提高算法的效率和準確性。
第五步是實施算法。將選擇的算法應用到實際情況中,根據(jù)電動汽車的充電需求和電力系統(tǒng)的供電能力,進行電動汽車的有序充電調度。這個過程需要考慮實際情況中的各種約束條件,包括電力系統(tǒng)的安全性、電動汽車的充電效率等。
第六步是評估算法的效果。根據(jù)實際情況中的數(shù)據(jù),評估算法的效果??梢酝ㄟ^比較電力系統(tǒng)的負荷峰值、電動汽車的充電效率等指標,來評估算法的效果。如果效果不理想,可以對算法進行調整和改進。
綜上所述,電動汽車有序充電調度方法的算法步驟包括確定電動汽車的充電需求、獲取電力系統(tǒng)的供電能力、建立數(shù)學模型、選擇合適的算法、實施算法和評估算法的效果。通過這些步驟,可以有效地滿足不同充電需求的電動汽車的充電調度,減少對電力系統(tǒng)的沖擊,提高電動汽車的充電效率。這對于推動電動汽車的發(fā)展和電力系統(tǒng)的可持續(xù)發(fā)展具有重要意義。


?? 部分代碼
%以矩陣運算為主,進行求解,接受外部EV數(shù)據(jù)進行求解
function [] = homeChargingPattern3(EV) ?
? ?init;%獲取所有參數(shù)
? ?P_basic_home = [P_basic(49:96,1);P_basic(1:48,1)];%家庭模式下以12點作為調度起點,36點作為調度終點
? ?EV.J_dis=EV.J_c + mod(EV.J_dis-EV.J_c+96,96);%到達時間早于出發(fā)時間,視作第二天到達
? ?EV([EV.J_dis< 48+1 EV.J_c> 48+96],:)=[];
? ?EV.J_dis(EV.J_dis>48+96 & EV.J_c<=48+96)=48+96;
? ?EV.J_c(EV.J_dis>=48+1 & EV.J_c<48+1)=48+1; ?
? ?[n,~]=size(EV);
? ?%計算非協(xié)調調度下微電網(wǎng)在一天96個時隙下的負載 ?
? ?x_min = false(n,96);%保存調度結果
? ?x_max = false(n,96);
? ?%計算每個EV滿足SOC_max電量和SOC_min電量的結束充電時刻
? ?J_min_end = min(EV.J_dis,EV.J_c+floor(((EV.SOC_min-EV.SOC_con)*Cap_bat_EV)/(P_mid_EV*eta_EV*Delta_T)));
? ?J_max_end = min(EV.J_dis,EV.J_c+floor(((EV.SOC_max-EV.SOC_con)*Cap_bat_EV)/(P_mid_EV*eta_EV*Delta_T)));
? ?for i=1:n
? ? ? ?x_min(i,(EV.J_c(i)-48):(J_min_end(i)-48))=1;
? ? ? ?x_max(i,(EV.J_c(i)-48):(J_max_end(i)-48))=1;
? ?end
? ?P_SOC_min = P_basic_home + P_mid_EV*sum(x_min,1)';
? ?P_SOC_max = P_basic_home + P_mid_EV*sum(x_max,1)';
? ?%計算協(xié)調調度下微電網(wǎng)在一天96個時隙下的負載
? ?%YALMIP建模
? ?%定義待調度變量
? ?x = binvar(n,96);
? ?%計算EV的充電需求
? ?EV.CUI = (EV.J_dis-EV.J_c)*Delta_T*P_slow_EV*eta_EV-...
? ? ? ?(EV.SOC_min-EV.SOC_con)*Cap_bat_EV;
? ?P_SOC_crd = P_basic_home;%調度總負載
? ?%表示ev的最終充電量
? ?SOC_dis = EV.SOC_con + (Delta_T*P_slow_EV*eta_EV/Cap_bat_EV)*sum(x,2);
? ?%定義約束條件
? ?c1 = false(n,96);%約束比較矩陣c1,記錄x中為定值的點的值為c1中的值
? ?c2 = false(n,96);%約束矩陣c2,x中為定值的點在c2中為1
? ?for i = 1:n
? ? ? ?ev = EV(i,:);%取出EV(i)的信息
? ? ? ?if ev.CUI<0%如果ev為緊急充電需求(第i行為定值,)
? ? ? ? ? ?%計算緊急充電需求的充電結束時刻,J_end
? ? ? ? ? ?J_end = min(ev.J_dis,ev.J_c+floor(((ev.SOC_max-ev.SOC_con)*Cap_bat_EV)/(P_fast_EV*eta_EV*Delta_T)));
? ? ? ? ? ?c1(i,ev.J_c-48:J_end-48)=1;
? ? ? ? ? ?c2(i,:)=1; ? ? ? ? ?
? ? ? ? ? ?%將其加入總負載
? ? ? ? ? ?P_SOC_crd = P_SOC_crd + P_fast_EV * x(i,:)';
? ? ? ?else%如果ev為非緊急充電需求
? ? ? ? ? ?c2(i,[1:ev.J_c-48-1 ev.J_dis-48+1:96])=1;
? ? ? ? ? ?%將其加入總負載
? ? ? ? ? ?P_SOC_crd = P_SOC_crd + P_slow_EV * x(i,:)';
? ? ? ?end ? ? ? ? ?
? ?end
? ?%添加此約束確保c2矩陣中為1的點的值為c1
? ?constraint1 = c2.*x==c1;
? ?%添加此約束確保非緊急充電需求下SOC_dis在SOC_min和SOC_max之間
? ?constraint2 = EV.SOC_min(EV.CUI>=0)<=SOC_dis(EV.CUI>=0)<=EV.SOC_max(EV.CUI>=0);
? ?%定義目標函數(shù)使得負載高峰max(P_SOC_crd)與負載低谷min(P_SOC_crd)之間插值最小
? ?objective = max(P_SOC_crd)-min(P_SOC_crd);
? ?%定義求解器為cplex
? ?options = sdpsettings('solver','cplex');
? ?%求解
? ?result = solvesdp([constraint1 constraint2],objective,options);
? ?result.info
? ?yalmiperror(result.problem)
? ?x = double(x);
? ?P_SOC_crd = double(P_SOC_crd);
? ?%顯示
? ?f=figure;
? ?bar(12+0.125:0.25:36-0.125,P_basic_home,1);
? ?hold on;
? ?stairs(12+0.125:0.25:36-0.125,P_SOC_min,"LineWidth",1);
? ?hold on;
? ?stairs(12+0.125:0.25:36-0.125,P_SOC_max,"LineWidth",1);
? ?hold on;
? ?stairs(12+0.125:0.25:36-0.125,P_SOC_crd,"LineWidth",1);
? ?legend('basic load','minSOC','maxSOC','crdSOC');%增加圖例
? ?legend('Location','northeast');%圖例放在左上角
? ?set(gca,'xtick',12:2:36); %x軸刻度
? ?%
end
?? 運行結果



?? 參考文獻
