电动汽车蒙特卡洛模拟(附Matlab代码)

电动汽车蒙特卡洛模拟

​ 蒙特卡洛法(Monte Carlo method),也叫模拟抽样方法,起源于 1940 年美国在第二次世界大战中研究原子弹的“曼哈顿计划”,该方法命名来自于世界赌城,摩纳哥的 Monte Carlo,此方法跟“赌”有很大关系,轮盘赌的样本抽取就可以用蒙特卡洛法。蒙特卡洛法已被广泛应用于物理学、经济学、统计学、金融学等等各个领域。蒙特卡洛法就是使用随机数(或者伪随机数)解决一些计算问题。

电动汽车蒙特卡洛模拟代码资源地址
电动汽车蒙特卡洛模拟代码

​ 其有两方面的应用:一方面是已知某一个问题的概率分布模型,根据此模型通过计算机软件随机生成符合该模型的概率分布变量样本,比如:本文中对电动汽车起始充电时间、日行驶里程等等进行抽样;另一方面是通过统计方法估计出某一问题模型的数学特性,从而得到问题的数值解。比如:经典的对圆周率的计算问题:首先在一个面积为 1 的正方形里作内切圆,圆的半径为 0.5,接着在正方形里生成 m 个随机点,统计出单位圆中的点个数 n,圆周率就可以用公式π = 4 ∗n/m估计出来,

蒙特卡洛计算π 值参考博客
而估计值的准确度与随机点个数有关,个数越多,越接近真实解。
蒙特卡洛法有以下步骤:
建立概率过程;
实现从已知概率分布中进行抽样;
建立各种估计量。
本文对于电动汽车充电负荷预测方面的仿真都是应用蒙特卡洛法来抽样模拟的。


 电动汽车的起始充电时刻决定着电动汽车充电负荷的分布规律,不同类型的电动汽车由于其自身用途不同,因此在充电开始时间的选择上有很大差异。

起始充电时刻

​ 对于电动公交车来说,一般公交车最早发车时间是上午 5 点,结束运营时间为 23 点,在公交车运营期间,根据上文分析,需要充两次电。而早上的 6:30 到 9:00 是上班早高峰时期,下午 16:30 到 18:30 是下班的晚高峰时期,为了不耽误乘客的上下班时间,公交车在这段时间发车间隙较短,因此本章假设:电动公交车在高峰时期不充电,为了满足公交车的运营需求,在白天 9:00 到 16:30 期间,电动公交车需要进行充电,由于公交车在运营阶段停车时间不能太长,因此在白天采用快速充电方式进行电能补给;在夜晚电动公交汽车停止运营后,能够充电的时间段为:晚上 23:00 到白天 5:00,停车时间将近 6 个小时,这段时间内采用常规充电方式,一方面可以降低充电成本,另一方面对配电网的安全运行也有一定的作用,晚上电动公交车起始充电时间段为:23:00到 24:00 之间。
​ 对于出租车来说,能够充电的时间段为出租车吃饭、休息时间,能够接受的充电时间长度较短,所以一般采用快速充电方式,根据对北京电动出租车的数据调查 ,电动出租车的休息时间一般为凌晨 2:00 到 4:00,中午 11:00 到 14:00,考虑到出租车的日行驶里程大的特点,电动出租车在这两段时间内都会进行充电。

​ 对于私家车来说,假设其充电起始充电时刻为完成最后一次出行回到家后进行充电。根据 NHTS 2009 的统计数据,电动私家车结束最后一次出行的时间满足正态分布,即充电开始时刻满足正态分布,如下式所示:

在这里插入图片描述

其中,根据拟合数据结果,本章中对μ,σ的取值分别为:17.6 与 3.4,下图 为私家车起始充电时刻概率密度分布图。

在这里插入图片描述

日行驶里程即电动汽车在一天内的行驶的距离长短,结合电动汽车电池容量大小,就可以得出电动汽车一天内所消耗电量的多少,结合用户设定的预期充电阈值,进而会造成充电时长的不同。由于每种类型的电动汽车的行驶特性不同,因此其日行驶里程也有很大的不同,根据 NHTS 对燃油汽车的分析以及 对于各类电动汽车的行为特性的分析,可以对各类电动汽车的日行驶里程进行拟合分析,得到如下式所示的各类电动汽车的日行驶里程概率函数 。下图为私家车的日行驶里程函数分布。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

clc;
close all;
clear all;


ud=3.2;
dd=0.88;

u0=0.205;
yt=0.9;      %效率
cap=30;      %容量
avg_v=40;    %速度
avg_xh=0.2;  %平均耗电量
pcd=5;       %充放电功率
N=200;



%% 电动汽车出行距离概率分布
f1=@(x)1./(x.*dd*(2*pi).^0.5).*exp(-(log(x)-ud).^2/(2*dd^2));  %对数正态分布
x1=linspace(0.01,200,N);
ff=f1(x1);
s=trapz(x1,ff);  %计算整个区间概率密度的积分  
ff=ff/s;         %归一化概率密度
 
n=0;
while n<N
    t=rand(1)*200;       %生成[0,200]均匀分布随机数
    f=f1(t)/s;           %计算概率
    r=rand(1);           %生成[0,1]均匀分布随机数
    if r<=f              %如果随机数r小于f(t),接纳该t并加入序列a中
        n=n+1;
        km_rand(n)=t;    %随机生成行驶里程
    end
end





%% Matlab的hist函数画出频率分布直方图  黑白图
%以上为生成随机数列的过程,以下为统计检验随机数列是否符合分布
num=20;                                      %分num个区间统计
[bin_count,bin_center]=hist(km_rand,num);    %计算 num个等间距 bin 的每一个中有多少个数字。返回 bin 计数和 bin 中心。
dc=200/num;                                  %区间宽度大小,计算宽度
bin_count=bin_count/N/dc;                    %根据统计结果计算概率密度
 
figure(2);
hist(km_rand,num);



%获取用于创建直方图的补片对象的句柄。
h = findobj(gca,'Type','patch');
%将已绘制条形的面颜色设置为 RGB 三元值 [0 0 0]。将边颜色设置为白色。

h.FaceColor = [0 0 0];
h.EdgeColor = 'w';

在这里插入图片描述
在这里插入图片描述
电动汽车蒙特卡洛模拟代码资源地址
电动汽车蒙特卡洛模拟代码

  • 14
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
蒙特卡洛模拟是一种通过随机抽样的方来进行模拟和计算的方。在电动汽车无序充电方面,可以使用蒙特卡洛模拟模拟电动汽车的起始充电时间和日行驶里程的随机分布。 在Python中,可以使用随机抽样函数来进行蒙特卡洛模拟。首先,需要定义电动汽车起始充电时间和日行驶里程的分布函数和设定参数。然后,根据这些分布函数和设定参数,使用随机抽样函数来生成一组随机的起始充电时间和日行驶里程。 接下来,可以根据电动汽车的初始荷电状态和充电所需时长来计算电动汽车的充电负荷。初始荷电状态可以通过电动汽车动力电池的剩余电量来得到,而充电所需时长可以根据电池消耗电量与行驶距离的关系来计算。 最后,通过叠加各个电动汽车的充电负荷曲线,可以得到总的电动汽车充电负荷曲线。 在Python中,可以使用NumPy库来进行随机抽样和数值计算,可以使用Matplotlib库来绘制充电负荷曲线。以下是一种实现蒙特卡洛模拟电动汽车无序充电的Python代码的示例: ```python import numpy as np import matplotlib.pyplot as plt # 定义电动汽车起始充电时间和日行驶里程的分布函数和设定参数 start_time_mean = 8.0 start_time_std = 1.0 mileage_mean = 50.0 mileage_std = 10.0 # 随机抽样生成一组随机的起始充电时间和日行驶里程 num_cars = 1000 start_times = np.random.normal(start_time_mean, start_time_std, num_cars) mileages = np.random.normal(mileage_mean, mileage_std, num_cars) # 计算电动汽车的初始荷电状态和充电所需时长 initial_soc = 0.5 charging_time = mileages / mileage_mean * initial_soc # 绘制充电负荷曲线 time_points = np.arange(0, 24, 0.1) total_load = np.zeros(len(time_points)) for i in range(num_cars): load_curve = np.zeros(len(time_points)) for j, t in enumerate(time_points): if t >= start_times[i and t <= start_times[i + charging_time[i]: load_curve[j = 1 total_load += load_curve plt.plot(time_points, total_load) plt.xlabel('Time (hours)') plt.ylabel('Charging Load') plt.title('Total Charging Load Curve') plt.show() ``` 上述代码示例中,首先使用正态分布函数生成了1000辆电动汽车的起始充电时间和日行驶里程。接下来,根据电动汽车的日行驶里程和初始荷电状态计算了充电所需时长。然后,根据起始充电时间和充电所需时长绘制了充电负荷曲线。 请注意,上述代码示例仅为演示蒙特卡洛模拟电动汽车无序充电的基本思路和示例,实际应用还需要根据具体问题进行适当的调整和扩展。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love coldplay

你的鼓励,将让我持续更新

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值