二、蒙特卡洛算法简介
1 蒙特卡洛算法定义
蒙特卡洛(Monte Carlo)方法,在渲染中,我们经常听到术语“蒙特卡洛”(通常缩写为MC)。但是这是什么意思?实际上,它所指的是一个非常简单的想法,蒙特卡洛方法指的是一系列统计方法,这些方法本质上用于查找事物的解决方案,例如计算函数的期望值,或者对由于没有封闭形式而无法进行分析积分的函数进行积分。我们可以用该原理来解决不同的问题,并且针对这些问题中都可以关联不同的技术或算法。所有这些算法的共同点是它们使用随机(或随机)采样。
2 蒙特卡洛模拟法的原理
蒙特卡洛法(Monte Carlo)是统计试验计算方法,高斯正太分布的期望值µ决定函数分布位置,标准差σ决定函数分布幅度,其概率密度函数公式如下:
根据中心极限定理,当统计样本足够充足时,各独立同分布随机变量之和的分布趋近于高斯正态分布,且尺寸分布符合伯努利大数定律。因此,蒙特卡洛模拟法计算中所求数学期望即可通过函数f(x)的积分获取。
三、部分源代码
clc;
clear all;
%本程序基于蒙特卡洛思想生成10000台充电汽车充电负荷曲线
rate=[0.1 0.4 0.5]; %三种充电汽车比例
P_h=[1.4 1.9; 7.7 25.6;40 100];%三种充电功率取值范围
M=10000; %10000辆车
r=0;
Bh=zeros(M,96); % 10000辆车行,96个时间列
for i=1:M
Ph=zeros(96,1); %96个时间行,1列
r=r+1;
for j=1:96
T_star=get_star(); %充电开始时间 每15分钟
qua=get_qua(); %充电电量
P_hi=get_i(rate,P_h); %充电功率 每小时
T_char=round(4*qua/P_hi(2)); %一小时有4个15分钟
T_sum=T_star+T_char; %充电结束时间
if T_sum>96 %时间不能大于96
new_T_sum=T_sum-96;
Ph(T_star:96)=P_hi(2); %从开始时间个数到96 放功率
Ph(1:new_T_sum)=P_hi(2); %从1到结束个时间 放功率
else
Ph(T_star:T_sum)=P_hi(2); %开始到结束 功率
end
end
for i=1:96
Bh(r,i)=Ph(i); %每辆车功率放入每行
end
end
B=sum(Bh,1); %每列求和
%%%%%寻找最大功率值,最大同时充电数量%%%%
max_P=max(B); %最大功率
Max_moun=zeros(96,1); %每时刻最大充电数量 96行
function P_hi=get_i(rate, P_h)
%get_i 得到充电方式及其功率
P=rand();%随机生成一个取值范围在[0-1]的数字
if 0<=P&&P<rate(1) %充电汽车比例
P_hi=[1,(P_h(1,1)+P_h(1,2))/2]; %选择第一种充电方式
elseif rate(1)<=P&&P<0.5
P_hi=[2,(P_h(2,1)+P_h(2,2))/2]; %选择第二种充电方式
else
P_hi=[3,(P_h(3,1)+P_h(3,2))/2];%选择第三种充电方式
end
while 1
P=normrnd(12.94,11.8);
if P<0
continue; %返回到while 否则 break
end %只是个标志 相当于括号
break;
end
qua=P;
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]王锋.基于蒙特卡洛模拟法的动车组裙板装配优化研究[J].中国设备工程. 2020,(06)