本程序参考Energy期刊SCI论文《A coordinated charging scheduling method for electric vehicles considering different charging demands》,程序注释清晰,算例丰富,下面对文章和程序做简单介绍。
大量电动汽车充电的不协调可能导致峰值负荷的大幅激增,进一步影响电力系统的运行稳定性。因此,文章提出了一种微电网中电动汽车的协调充电调度方法,将负荷需求从高峰时段转移到低谷时段。在所提出的方法中,基于充电紧急度指标来选择电动汽车的充电模式,该指标可以反映不同的充电需求。然后,建立了协调充电调度优化模型,以最小化总峰谷负荷差。考虑了慢充电动汽车、快充电动汽车和微电网运行的约束条件。此外,使用蒙特卡罗(MCS)来模拟电动汽车的随机性。研究结果揭示了电动汽车车主的充电模式选择以及微电网运行的调峰填谷。
该模型在MATLAB/YALMIP中建立,并通过CPLEX求解器进行求解。实验中的输入数据是根据概率密度函数随机生成的,以模拟真实的电动汽车充电情况。家庭充电模式采用的晚充白用,文中结果:
程序组成:本程序由主函数和多个子函数组成,每个子函数对应不同的优化目标和约束条件。
程序结果:
限于篇幅,还有部分结果未展示!!!
部分程序:
%以矩阵运算为主,进行求解
function [] = homeChargingPattern(n)
init;%获取所有参数
EV = getHomeEV(n);%生成家庭充电模式下EV信息
printHomeEV(EV);%显示EV的统计信息
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);%到达时间早于出发时间,视作第二天到达
EV.J_dis(EV.J_c<=48)=EV.J_dis(EV.J_c<=48)+96;%第一天的1~48时隙视作第二天1~48时隙
EV.J_c(EV.J_c<=48)=EV.J_c(EV.J_c<=48)+96;%第一天的1~48时隙视作第二天1~48时隙
EV.J_dis(EV.J_dis>=49+96)=48+96;%离开时间超出调度时间视作在调度截止前离开
%计算非协调调度下微电网在一天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)';
%计算协调调度下微电网在一天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;%调度总负载
SOC_dis = EV.SOC_con;%最终充电量
%定义约束条件
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,:)';
%表示ev的最终充电量
SOC_dis(i) = ev.SOC_con + (Delta_T*P_slow_EV*eta_EV/Cap_bat_EV)*sum(x(i,:),2);
end
end
欢迎感兴趣的小伙伴关注并获取完整版代码哦~,小编会不定期推送更有质量的学习资料、文章程序代码~