• 电动汽车有序无序充放电的优化调度(Matlab代码实现)


    💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

    📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文,算法,机器学习和人工智能学习。

                              

                                        🎉🎉欢迎您的到来🎉🎉

                         ⛅⛅⛅ 📃个人主页:科研室🌈🌈🌈

                        📚📚📚📋所有代码目录:电气工程科研社👨‍💻👨‍💻👨‍💻

                               

    【现在公众号名字改为:荔枝科研社】

    📋📋📋本文目录如下:⛳️⛳️⛳️

    目录

    1 全文概述

    2 数学模型

    3 Matlab实现

    3.1 代码前的准备

    3.2 运行结果

    4 Matlab代码及文章详细阅读

    5 参考文献

    6 写在最后

    1 全文概述

    汽车行业正在大力投资插电式混合动力汽车 (PHEV) 和全电动汽车 (EV),主要是为了减少当前汽车技术的二氧化碳排放和对石油的依赖。由于用电量的增加,汽车电气化将对电网产生重大影响。

    由于用电量的增加,汽车电气化将对电网产生重大影响。对电动汽车 (EV) 的充电和放电进行智能调度非常重要。然而,调度问题存在两个主要挑战。首先,寻找可以最小化总成本的全局最优调度解决方案具有挑战性。其次,很难找到能够处理大量人口和电动汽车随机到达的分布式调度方案。在本文中,我们提出了电动汽车充电和放电的全局最优调度方案和局部最优调度方案。首先制定了一个全局调度优化问题,其中优化充电功率以最小化所有在白天进行充电和放电的电动汽车的总成本。全局最优解提供全局最小总成本。然而,全局最优调度方案是不切实际的,因为它需要关于未来基本负载和到达时间以及将在一天中的未来时间到达的电动汽车的充电时间的信息。为了开发一个实用的调度方案,本文制定了一个局部调度优化问题,旨在最小化本地组中当前正在进行的 EV 集中 EV 的总成本。局部最优调度方案不仅可扩展到大型 EV 种群,而且对动态 EV 到达具有弹性。通过仿真,我们证明了与全局最优调度方案相比,局部最优调度方案可以实现接近的性能。

     

    2 数学模型

                  \begin{aligned} C_{i} &=\int_{L_{i}^{b}}^{z_{i}}\left(k_{0}+k_{1} z_{t}\right) d z_{t} \\ &=\left(k_{0} z_{i}+\frac{k_{1}}{2} z_{i}^{2}\right)-\left(k_{0} L_{i}^{b}+\frac{k_{1}}{2}\left(L_{i}^{b}\right)^{2}\right) \end{aligned}

                   \begin{aligned} C_{\mathrm{tot}} &=\sum_{i \in \mathbf{N}} C_{i} \\ &=\sum_{i \in \mathbf{N}}\left(\left(k_{0} z_{i}+\frac{k_{1}}{2} z_{i}^{2}\right)-\left(k_{0} L_{i}^{b}+\frac{k_{1}}{2}\left(L_{i}^{b}\right)^{2}\right)\right) . \end{aligned}

    详细数学模型和解释见第4部分。

    3 Matlab实现

    3.1 代码前的准备

    安装CVX包:

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

    然后:也是代码前的准备

    3.2 运行结果




     

     

     

     

    4 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('全局最优方案中的充放电速率');

     5 往期回顾

    5 参考文献

    电动汽车充放电的最佳调度|IEEE Journals & Magazine |IEEE Xplore

    6 写在最后

    部分理论引用网络文献,若有侵权请联系博主删除。 

  • 相关阅读:
    6月25日PMP考试敏捷怎么考?替你分忧解难
    SpringCloud Alibaba - 分布式事务理论(CAP 定理 和 BASE 理论)
    Open3D 点云分割之区域生长
    gitlab之cicd的gitlab-runner集成-dockerfile构建环境
    opensbi入门
    Promethues-如何监控容器
    JavaScript面向对象(2)—继承的实现
    javadoc:ClassDoc中查找指定方法(Method)对应的MethodDoc对象
    九、Vue3基础之九
    Linux操作系统中的yum命令
  • 原文地址:https://blog.csdn.net/weixin_46039719/article/details/126315351