• MATLB|电动汽车充放电的最优调度


    目录

    一、概述

    二、电动汽车

    2.1 电动汽车的类型

    2.2电动汽车行程开始时间

    2.3 电动汽车行驶里程

    三、Matlab实现

    3.1 代码前的准备

    3.2 Matlab代码

    3.3 运行结果

     四、往期回顾

     

    一、概述

    电动汽车能够良好发展离不开精确的电动汽车充电负荷预测,目前,大多数充电负荷预测研究都基于蒙特卡洛模拟算法来计算。其中,文献[13]将电动汽车分为私家车、公交车和出租车三种类型进行分析建模,但是对于车辆的起始荷电状态和起始充电时间分布的选取存在一定的主观性。文献[14]利用了统计学的方法建立了行程结束时间和日行驶里程的概率分布模型,并认为行程结束时间等于起始充电时间,但对于日充电频率大于1次的电动汽车来说并不合理。文献[15]考虑了电动汽车每天的行驶里程及电池容量,但充电起始时间的确定也不准确。综上所述,目前的研究考虑因素不够全面,导致预测不够准确,例如:1)未考虑到电动汽车的出行轨迹分布;2)未考虑到电动汽车充电场所的不确定性。

    二、电动汽车

    对于电动汽车的负荷来说,影响因素从来都不是单一的,是多种因素共同影响。其大小和出行轨迹分布也由多种情况来左右,比如电动汽车的性能是否优良、汽车用户的使用方式是否合适、电动汽车充电的环境是否适合以及电动汽车的行驶路面是否平坦等。如果想进一步精确预测电动汽车充电负荷的出行轨迹分布,需要对以下几个可能影响因素进行深度考虑:电动汽车的种类、电动汽车行程开始时间电动汽车行驶里程﹑停驻时间、充电方式等。

    2.1 电动汽车的类型

    当前中国的电动汽车广泛应用的地方主要有三种:私家车、出租车、公交车,公交车基本按照计划的轨迹及时间点来行驶,出行轨迹及时间相对固定,所以其充电的场所确定较为简单;私家车和出租车由于出行轨迹复杂且出行时间具有不确定性充电场所的确定存在难度。因此,充电负荷的场所及大小会因为电动汽车类型的不同显示出一些差异性。

    2.2电动汽车行程开始时间

    对电动汽车来说,每天的使用时间及需要充电的时间分布上显然存在密切的联系,本文使用某调查的统计结果,从中调出某私家车一天内的行程开始时间来研究电动汽车的运行特性。
    利用实际数据,可以得到电动私家车行程开始时间的概率分布。用户行程开始时间概率分布如图1所示。

                  

    对该概率分布进行拟合,发现用户行程开始时间的概率近似服从正态分布其概率密度函数为:

                    

    其中,\mu是行程开始时间的期望值,\sigma是标准差。拟合后求得\mu =7.89,\sigma=1.96。

    2.3 电动汽车行驶里程

    电动汽车使用者对电动汽车的充电频次和时间都与其日出行里程数有着密不可分的各种联系。日出行里程数也会因为不同使用者存在差异,主要是因为各电动汽车使用者的使用习惯不同,对私家车来说,主要用于上下班和休闲娱乐途中,行驶里程短且较为规律。

    根据2017年NHTS得出的结果来看,电动私家车的每段行驶里程数趋向于对数正态分布,其概密度函数为:

          

    其中,\mu是行程距离的期望值,\sigma是标准差。拟合后求得\mu =3.68,\sigma =0.88。 

     出租车每日的行驶里程数大约为300km,为三者中行驶里程数最长的车型;公交车比出租每日行

    驶里程数相对少一些,约为 200km

    三、Matlab实现

    3.1 代码前的准备

    安装CVX包:

    先点击这里:风电随机性动态经济调度模型

    然后:也是代码前的准备

    3.2 Matlab代码

    本文是一种最优调度算法,以最大限度地降低电动汽车充放电的总成本。

    本文仅展现部分代码,全部代码点这里:🍞正在为您运送作品详情

    1. close all;
    2. clc;
    3. clear;
    4. %% 参数设置
    5. %==(1)基本荷荷向量===
    6. L_b=[
    7. 1648181.19
    8. 1510114.92
    9. 1404600.51
    10. 1348140.62
    11. 1355294.53
    12. 1380434.41
    13. 1472398.73
    14. 1619859.88
    15. 1774726.71
    16. 1891739.09
    17. 2024589.36
    18. 2154006.65
    19. 2214969.44
    20. 2248348.3
    21. 2257444.05
    22. 2253898.58
    23. 2251095.52
    24. 2240891.11
    25. 2187658.11
    26. 2060455.55
    27. 2032531.95
    28. 1984614.47
    29. 1846244.76
    30. 1676395.15];
    31. %====(2)预测的基本负荷(平均相对误差 = 0.089)====
    32. P_L_b1=[
    33. 1737223.863
    34. 1603267.075
    35. 1501043.33
    36. 1434323.708
    37. 1427034.265
    38. 1445808.13
    39. 1535646.84
    40. 1703557
    41. 1878913.403
    42. 2041190.428
    43. 2189203.243
    44. 2300813.958
    45. 2376838.56
    46. 2431838.998
    47. 2456820.033
    48. 2472628.88
    49. 2497750.498
    50. 2502256.753
    51. 2487853.418
    52. 2333072.535
    53. 2313458.498
    54. 2278059.543
    55. 2121749.573
    56. 1908084.005];
    57. %====(3)预测的基本负荷(平均相对误差 = 0.0414)====
    58. P_L_b2=[
    59. 1599948.91
    60. 1468345.518
    61. 1370502.199
    62. 1310946.046
    63. 1308525.559
    64. 1330298.288
    65. 1417044.254
    66. 1592177.276
    67. 1774327.31
    68. 1935791.394
    69. 2081450.673
    70. 2194127.508
    71. 2266347.528
    72. 2310264.895
    73. 2317806.969
    74. 2328853.886
    75. 2350763.395
    76. 2356239.943
    77. 2340220.599
    78. 2215920.234
    79. 2192252.838
    80. 2168526.739
    81. 2014122.374
    82. 1803843.804];
    83. %=====(4)第二次预测的基本负荷(更好的预测)(平均相对误差=0.0234)===
    84. P_L_b3=[
    85. 1648037.519
    86. 1458944.669
    87. 1366366.043
    88. 1310276.476
    89. 1309105.99
    90. 1329282.055
    91. 1411672.493
    92. 1587762.671
    93. 1728429.463
    94. 1888917.875
    95. 2032770.183
    96. 2133804.711
    97. 2199858.463
    98. 2240117.111
    99. 2241852.165
    100. 2245048.574
    101. 2259487.69
    102. 2260142.395
    103. 2243557.341
    104. 2145562.018
    105. 2122157.145
    106. 2104126.554
    107. 1948760.596
    108. 1740961.875];
    109. %=====选择使用哪个预测负荷====
    110. P_L_b=P_L_b2;
    111. %% 微电网的基本负荷
    112. Scale_factor=1/1500;
    113. L_b_mic=L_b*Scale_factor; % 基本负荷
    114. P_L_b_mic=P_L_b*Scale_factor; % 基本预测负荷
    115. %% 价格模型
    116. % alfa=1.0;
    117. % theta=1;
    118. omega=1.2*max(L_b_mic);
    119. k_0=0.0001;
    120. k_1=0.00012;
    121. k_2=0;
    122. %====(1)寿命缩减成本======
    123. beta=0.001;
    124. beta=0;
    125. %===简单乘法计算=====
    126. % k_con=alfa/(omega^theta*(theta+1));
    127. %=====充电间隔时间======
    128. tau=1; % 小时内
    129. %=====充电间隔数========
    130. num_slot=length(L_b_mic);
    131. %====(2)基本价格=======
    132. price_basic=zeros(num_slot,1); % 基于基本负荷的价格
    133. for i=1:num_slot
    134. price_basic(i)=k_0+k_1* L_b_mic(i);
    135. end
    136. fprintf('价格,最低价格=%g,最高价格=%g.\n',min(price_basic), max(price_basic));
    137. %% 电动汽车EV容量
    138. Cap_battery_org=16; % KWh
    139. gamma=0.9; % 充电完成时电池的百分比
    140. Cap_battery=gamma*Cap_battery_org;
    141. %% ==最大充电率===
    142. P_max=5; % KW
    143. %% 电动汽车数量
    144. num_EV=200;
    145. % 仅给电池充电的电动汽车的百分比
    146. P_Chg=0;
    147. % CHG EVs数量
    148. num_CHG_EV=round(P_Chg*num_EV); % CHG EV 将位于 EV 信息矩阵的前面部分。
    149. % V2G EVs数量
    150. num_V2G_EV=num_EV-num_CHG_EV;
    151. %% 电动汽车充电模式
    152. % 30% 的电动汽车在间隔 1 之前连接到充电站,其余的均匀分布
    153. %EV矩阵:1) 到达时间,2) 出发时间,3) 初始能量,4) 充电周期,5) 最小充电时间%
    154. % EV_info=zeros(num_EV,3);
    155. %===间隔1前接入站的EVS百分比====
    156. % Per_EV=0.1;
    157. %=====其他车辆到达时间均匀分布在[ 1,20 ]之间======
    158. % for i=1:num_EV
    159. % temp_00=rand;
    160. % if temp_00<=Per_EV
    161. % T_arrival(i,1)=1;
    162. % else
    163. % T_arrival(i,1)=round(1 + (20-1).*rand);
    164. % end
    165. % end
    166. %
    167. %=====充电时间均匀分布在 [4, 12] 小时之间======
    168. % T_charging= round(4 + (12-4).*rand(num_EV,1));
    169. % T_charging=-1*sort(-1*T_charging);
    170. %
    171. % % the departure time
    172. % for i=1:num_EV
    173. % T_departure(i,1)=min(24, T_arrival(i,1)+T_charging(i,1));
    174. % end
    175. %====初始电量均匀分布在电池容量的[0 0.8]之间======
    176. % Ini_percentage=0+ (0.8-0).*rand(num_EV,1);
    177. % % fill the EV_info
    178. % EV_info(:,1)=T_arrival;
    179. % EV_info(:,2)=T_departure;
    180. % EV_info(:,3)=Cap_battery_org*Ini_percentage;
    181. %
    182. % for i=1:num_EV
    183. % EV_info(i,4)=EV_info(i,2)-EV_info(i,1)+1; % 充电周期
    184. % EV_info(i,5)=EV_info(i,3)/P_max; % 最小充电时间
    185. % if EV_info(i,4) < EV_info(i,5)
    186. % fprintf('EV %g 充电时间不合理.\n',i);
    187. % end
    188. % end
    189. %
    190. % % save and load EV_info
    191. % save EV_info.txt EV_info -ascii;
    192. load EV_info.txt;
    193. EV_info=EV_info(1:num_EV,:);
    194. %% 电动汽车与充电间隔的关系
    195. F=zeros(num_EV, num_slot);
    196. G=ones(num_EV, num_slot);
    197. for i=1:num_EV
    198. for j=EV_info(i,1):EV_info(i,2)
    199. F(i,j)=1;
    200. G(i,j)=0;
    201. end
    202. end
    203. F1=reshape(F',1,[]);
    204. % F=ones(num_EV, num_slot);
    205. %% 绘制基本负荷
    206. xx_1=1:num_slot;
    207. figure;
    208. yy_1(:,1)=L_b_mic;
    209. yy_1(:,2)=P_L_b_mic;
    210. plot(xx_1,yy_1);
    211. ylabel('负荷[KW]');
    212. xlabel('小时数');
    213. legend('实际负荷量','预测负荷量');
    214. %% 使用CVX工具的V2G全局最优方案
    215. %(1)等式约束: Ax=b
    216. % (2)优化变量x=[z1, z2, ..., z_24, x11, x12, ...., x_100,24]'
    217. num_OptVar=1*num_slot+num_slot*num_EV;
    218. b_a=L_b_mic; %第一个等式约束的矩阵
    219. A1_a=zeros(num_slot, num_OptVar-1*num_slot);
    220. A1=[eye(num_slot) A1_a];
    221. A2_a=zeros(num_slot, num_OptVar-1*num_slot);
    222. s_temp=0;
    223. for i=1:num_slot
    224. for j=1:num_EV
    225. A2_a(i, (j-1)*num_slot+i)=F(j,i);
    226. % fprintf('Assign F(%g,%g)=%g, to A2_a(%g, %g).\n',j,i,F(j,i),i,(j-1)*num_slot+1);
    227. s_temp=s_temp+F(j,i);
    228. end
    229. end
    230. A2_b=zeros(num_slot, num_slot);
    231. A2=[A2_b A2_a];
    232. A_a=A1-A2; % 第一个等式约束的矩阵
    233. clear A1 A2 A1_a A2_a A2_b;
    234. %======第一个等式约束的矩阵=====
    235. B_1=zeros(num_EV, num_OptVar-1*num_slot);
    236. for i=1:num_EV
    237. B_1(i,(i-1)*num_slot+1:(i-1)*num_slot+num_slot)=F(i,:);
    238. end
    239. temp_1=zeros(num_EV, num_slot);
    240. B1=[temp_1 B_1]; % 第二等式约束的矩阵
    241. b_b=(Cap_battery/tau)*ones(num_EV,1)-EV_info(:,3);% 第二等式约束的矩阵
    242. clear B_1 temp_1;
    243. %合并等式矩阵
    244. % Eq_left=[A_a' B1']';
    245. % Eq_right=[b_a' b_b']';
    246. %% ======等式约束=====
    247. Eq_L=A_a;
    248. Eq_R=b_a;
    249. clear A_a b_a;
    250. %% ======不等式约束=====
    251. % ====1)第一个不等式约束=====
    252. In_1=zeros(num_EV*num_slot, num_OptVar);
    253. for i=1:num_slot
    254. for j=1:num_EV
    255. 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);
    256. % fprintf('set row %g, col %g:%g by using F(%g,1:%g).\n',(i-1)*num_EV+j,num_slot+(j-1)*num_slot+1,num_slot+(j-1)*num_slot+i,j,i);
    257. end
    258. end
    259. In_1=-1*In_1; % 第一个不等式,左边
    260. In_b1=zeros(num_EV*num_slot, 1); % 第一个不等式,右边, [EV1_slot1, EV2_slot1, ..., EV1_slot2, EV2_slot2,...]'
    261. for i=1:num_slot
    262. In_b1( (i-1)*num_EV+1:(i-1)*num_EV+num_EV, 1 )= (1/tau)*EV_info(1:num_EV,3);
    263. end
    264. %=====2)第二个不等式约束=====
    265. In_2=-1*In_1; %第二个不等式约束,左边
    266. In_b2=zeros(num_EV*num_slot, 1); % 第二个不等式约束,右边, [EV1_slot1, EV2_slot1, ..., EV1_slot2, EV2_slot2,...]'
    267. temp_b2=Cap_battery_org - EV_info(1:num_EV,3);
    268. for i=1:num_slot
    269. In_b2( (i-1)*num_EV+1:(i-1)*num_EV+num_EV, 1 )= (1/tau)*temp_b2;
    270. ''''''''''''
    271. % 绘出每个电动车(全局最优方案)的电能水平演化图。
    272. figure;
    273. xxx=0:num_slot;
    274. plot(xxx,v_Energy_variation(1:40,:));
    275. ylabel('电能[KWH]');
    276. xlabel('小时数');
    277. legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
    278. title('全局最优方案中的电能变化');
    279. % 绘制每个电动汽车的能量水平演化(局部最优方案)
    280. figure;
    281. xxx=0:num_slot;
    282. plot(xxx,Energy_variation);
    283. ylabel('电能[KWH]');
    284. xlabel('小时数');
    285. legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
    286. title('局部最优方案中的电能变化');
    287. % 绘制每个EV的能量水平演化(等分配方案)
    288. figure;
    289. plot(xxx,N_Energy_variation);
    290. ylabel('电能[KWH]');
    291. xlabel('小时数');
    292. legend('EV1','EV2','EV3','EV4','EV5','EV6','EV7','EV8','EV9','EV10');
    293. title('均等分配最优方案中的电能变化');
    294. % %绘制每辆电动汽车的充电率
    295. figure;
    296. EV_ID=65;
    297. energy_mmm(1,:)=v_Energy_variation(EV_ID,:);
    298. energy_mmm(2,:)=Energy_variation(EV_ID,:);
    299. energy_mmm(3,:)=N_Energy_variation(EV_ID,:);
    300. plot(xxx,energy_mmm);
    301. ylabel('电能 [KWH]');
    302. xlabel('时间(Hours)');
    303. legend('全局最优方案','局部最优方案','均等分配方案');
    304. title('电动汽车的电能变化');
    305. figure;
    306. nnn(:,1)=v_x_Matrix(EV_ID,:)';%全局最优
    307. nnn(:,2)=x_Matrix(EV_ID,:)';%局部最优
    308. nnn(:,3)=N_x_Matrix(EV_ID,:)';%均等分配
    309. h=bar(xx,nnn);
    310. ylabel('速率[KW]');
    311. xlabel('时间(Hours)');
    312. legend('全局最优','局部最优','均等分配');
    313. title('全局最优方案中的充放电速率');

    3.3 运行结果




     

     

     

     

     四、往期回顾

  • 相关阅读:
    三相逆变器下垂控制双机
    android 12.0 去掉未知来源弹窗 默认授予安装未知来源权限
    GIT简单使用
    Qt入门(七)——TCP传输协议(利用多线程实现多个客户机与服务器连接)
    教育直播APP开发
    开学季征文 | 百尺竿头,我们都要更进一步
    Redis高可用部署架构
    Vue项目配置项搭建过程(详细)
    正点原子嵌入式linux驱动开发——Linux设备树
    jQuery事件与特效
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/125436231