(全网最详细最标准,看这一篇就够了,附有可操作性代码,保姆教程)电动汽车蒙特卡洛模拟电动汽车出行密度电动汽车充电时间的概率密度模拟

新能源车的背景引入

众所周知,现在电动汽车是非常火爆的,已经有好几个月新能源渗透率大于百分之50,此外我还想提一句,在豪华新能源车型里面,比如说年度爆款问界M9,均价50W左右的豪华大型SUV,直接让国产新能源扬眉吐气了一把,值得点赞,附一张图

遥遥领先 遥遥领先 尤其是遥遥领先的智能驾驶水平

蒙特卡洛模拟在电动汽车领域的应用场景包括但不限于:

电动汽车的负荷预测,通过建立电动汽车的出行时间、行驶里程和充电时间的概率模型,并采用蒙特卡洛方法进行抽样,进而对电动汽车的充电负荷进行累加,得到负荷预测结果。

电动汽车充放电负荷计算,通过蒙特卡洛抽样方法生成电动汽车的充电功率、电池容量、充电时间以及每日行驶里程的概率密度分布,计算电动汽车的充放电负荷。

电动汽车的有序充放电优化调度,利用蒙特卡洛模拟来模拟不同的充电和放电策略,并评估它们在不同场景下的性能表现。 

模拟的优势:

蒙特卡洛模拟的优势在于其能够模拟各种不确定因素,并通过大量的模拟次数得到稳定的结果。在电动汽车负荷预测中,这一特性非常重要,因为它可以捕捉到负荷的峰谷特性,并允许调节峰值时间、功率、仿真次数等参数,以满足不同的应用需求。

那么问题来了,我们如何知道这新能源车什么时候充电,每次充电能跑多久呢???

电动汽车起始充电时间概率分布

根据美国 NHTS的统计数据显示,家用汽车的行驶结束时间满足分段正态分布。一般而言,家用汽车普遍在一天的行驶结束后接受充电,故可以仿照家用车的行驶结束时间拟定电动汽车的充电开始时间。电动汽车行驶结束时间分段概率分布函数如下:

当然这些数据,只是举个例子,只是老美那边研究的他们的数据,我们当然可以拟合自己的数据,收藏加关注过50+我将更新怎么根据数据建立自己的概率密度函数

随后进行编程出图如下:

根据图概率分布曲线我们可以看出,电动汽车每天开始充电的高峰时段处于晚上6-7点左右,符合车主出行时间规律及下午下班后回家即充电的习惯。

图片代码在讲完出行密度后统一附上给主人们

电动汽车行驶里程概率分布

根据 NHTS 的数据,家用车日行驶里程近似服从对数正态分布。电动汽车一天中消耗的电能由车辆行驶里程所决定,消耗的电能也决定着电动汽车的充电时间和从电网中吸收的电能。电动汽车日行驶里程概率分布密度函数如式:

随后编程出图为:

分析图片我们可以得出以下结论:

分布特征:

最高点:在大约20公里左右,该点显示出行驶大约20公里的概率密度最大。这意味着行驶较短距离(如040公里)的概率密度较高,而行驶较长距离(超过100公里)的概率密度很低。分布可能是由于电动汽车的电池容量限制、用户的日常使用习惯等因素导致的。

最最最重要的全套代码如下:该代码就是原封不动的亲自编制的代码,引用论证加出图都非常齐全,可以说是复制粘贴一下就能出来。

import numpy as np
import matplotlib
matplotlib.use('TkAgg')
from matplotlib import pyplot as plt
from scipy.integrate import trapz
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'


# 电动汽车起始充电时间概率密度函数
us = 17.6  # 均值
ds = 3.4   # 标准差

def fs1(x):
    return 1 / (ds * (2 * np.pi) ** 0.5) * np.exp(-(x - us) ** 2 / (2 * ds ** 2))

def fs2(x):
    return 1 / (ds * (2 * np.pi) ** 0.5) * np.exp(-(x + 24 - us) ** 2 / (2 * ds ** 2))

# 确定计算概率分布的区间和点数
x_range = [0, 24]
num_points = 1000
xs = np.linspace(x_range[0], x_range[1], num_points)

# 计算概率密度值
fs_values = np.zeros_like(xs)
for i in range(len(xs)):
    if xs[i] <= us - 12:
        fs_values[i] = fs2(xs[i])
    else:
        fs_values[i] = fs1(xs[i])

# 归一化概率密度值
s_st = np.trapz(fs_values, xs)  # 计算整个区间概率密度的积分(面积)
fs_normalized = fs_values / s_st  # 归一化概率密度

# 电动汽车行驶里程概率密度函数
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

def f1(x):
    return 1 / (x * dd * (2 * np.pi) ** 0.5) * np.exp(-(np.log(x) - ud) ** 2 / (2 * dd ** 2))

x1 = np.linspace(0.1, 200, N)
ff = f1(x1)
s = np.trapz(ff, x1)  # 计算整个区间概率密度的积分
ff = ff / s  # 归一化概率密度

# 设置随机种子以便复现结果
np.random.seed(42)

# 定义舍选抽样函数
def rejection_sampling(pdf, x_values, max_value, num_samples):
    samples = []
    while len(samples) < num_samples:
        x = np.random.uniform(low=min(x_values), high=max(x_values))
        u = np.random.uniform(0, max_value)
        if u < pdf(x):
            samples.append(x)
    return samples

# 使用舍选抽样法生成ff行驶距离的样本
ff_samples = rejection_sampling(f1, x1, np.max(ff), 1000)

# 使用舍选抽样法生成fs_normalized行驶时间的样本
fs_samples = rejection_sampling(lambda x: fs_normalized[np.argmin(np.abs(xs - x))], xs, np.max(fs_normalized), 1000)
# 电动汽车参数
cap_kWh = 30  # 电池容量 (kWh)
avg_xh_kWh_per_km = 0.2  # 平均耗电量 (kWh/km)
yt = 0.9  # 充电效率



# 绘制起始充电时间概率密度函数
plt.figure()
plt.plot(xs, fs_normalized, linewidth=2)
plt.title('电动汽车起始充电时间概率密度函数')
plt.xlabel('时间 (小时)')
plt.ylabel('概率密度')
plt.grid(True)

# 绘制电动汽车行驶里程概率密度函数
plt.figure()
plt.plot(x1, ff, linewidth=2)
plt.title('电动汽车行驶里程概率密度函数')
plt.xlabel('行驶里程 (km)')
plt.ylabel('概率密度')
plt.grid(True)

plt.show()

当然还有什么蒙特卡洛模拟充电负荷,这个代码非常难得,也是研究了很久,代码图片如下:

如果点赞收藏破200+我将免费提供给大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值