蒙特卡洛方法
当所求解可视为某个随机变量的概率或期望的函数时,通过随机抽样,计算频率或平均值,以估计概率或期望,从而得到所求解。也称MC方法。
1. 矿井脱险模拟
矿工在矿井中迷失了方向,身处三个矿道交汇处,不知选择哪个矿道脱险。事实是:一号矿道能脱险,二号、三号矿道只能回到原处。若任意随机选择一个矿道,安全走出需要花费多少时间?
实验内容:如果选择一号矿道,假设走3小时可脱险,选择二号、三号矿道分别走5小时、7小时回到原处。如果矿工任何时间都随机选择其中一个矿道行走,用模拟实验的方法计算他安全走出矿井平均花费多少时间。
解:产生n个均匀随机整数,取1,2,3。利用fix函数将它转化为3,5,7。当第一次出现3时,表示这个人走出了矿井,程序结束。
程序代码:n = 10000;
S = [];
for i=1:100000 %做了100000次试验
N=1+fix(3*rand(1,n)); %产生10000个随机数,并记为1,2,3. T=2*N+1; %产生10000个随机数,并记为3,5,7. K=find(T==3); %用find函数找出3的位置,并且赋值给K k=K(1); %取第一个3的位置
S=[S,sum(T(1:k))]; %对第一个3前面的所有值求和,放在矩阵中
end
Tmax=max(S)
Tmin=min(S)
Tavg=sum(S)/100000
2. 生日问题
在座60人,生日在同一天的概率是多少?
(1)理论计算
(2)实验模拟
解:把n个人看成是n个球,将一年365天看成是N=365个盒子,则“n个人的生日全部不相同”就相当于“恰好有n(n
365*364*......*(365601)P=1- p。(1)理论计算p=1- = 0.9941。(2) 36560的生日完全不相同的概率为p
for k = 1:60
p(k) = 1-prod(365-k+1:365)/365^k;
end
plot(p,'.r') p(60) = 0.9941
3. 定积分的计算
(1)计算
a = 0;
b = 1;
n=500000;
N=0;
c = 1;
d = exp(1); %g(x) = exp(x.^2);所以f(y)=(g(a+(b-a)*y)-c)/(d-c) for i=1:n
x=rand;y=rand;
if(y
N=N+1;
end
end
s=(N/n)*(exp(1)-1)+1 %S = S0*N+c*(b-a) S0 = (b-a)(d-c)
(2)通过计算来求π。
n = input('请输入产生点的个数:');
s =0;
for i=1:n
if(rand^2+rand^2
s = s+1;
end
end
pi = 4*s/n %随着m,n的增大它们的比值应该趋近于为两区域面积的比值,所以pi=4*s/n
4. 超市收款问题
超市有两个出口的收款台,两项服务:收款、装袋。两名职工在出口处工作。 有两种安排方案:开一个出口,一人收款,一人装袋,或者开两个出口,每个人既收款又装袋。问商店经理应选择哪一种收款台的服务方案。 选择服务方案的标准:
1、 顾客平均等待时间最短
2、 每分钟服务的顾客数量最多
3、 服务的工作效率最高(除去空闲时间,每位职工每分钟实际服务顾客数最多) 目标:(1)编写两种情况下的仿真程序,根据两个模拟结果评价两个方案,确定出口处收款台安排方案。
(2)对两种服务方案分别模拟30分钟内收款台的排队情况,通过比较确定首选方案。
假设:
(1)顾客到达收款台是随机的,服从规律:40%的时间没有人来,30%的时间有一个人来,30%的时间有2个人来。
(2)收款装袋的时间是相同的
(3)在第一种方案中,收款与装袋同时进行
或假设:
(1)顾客到达收款台是随机的,平均时间间隔为2分钟,即间隔时间服从均值为2的指数分布。
(2)顾客购买的货物量不同,因此服务时间的长短随机。两位工作人员分别收款装袋,对顾客服务时间服从正态分布N(1,1/3), 一位工作人员既收款又装袋,对顾客服务时间服从正态分布N(1,2/3)。
第一类假设的思路:顾客到达收款台的规律是:40%的时间没有人来,30%的时间有1个人来,30%的时间有2个人来。首先模拟十分钟内顾客到达收款台情况。 每分钟到达收款台的人数是随机变量n:{0,1,2}, 具有分布列
n 0 1 2
p 0.4 0.3 0.3
模拟方法:
取(0,1)区间内均匀分布随机数y=rand,
记n为新到的顾客数,L是队列长,Tao是服务时间,T1是总和排队时间,T2shi总和服务时间,则
当0
当0.4
当0.7
每分钟记录一次系统状态,模拟10分钟, 得到n的值,寻找几个量之间的关系。 想想这样做的道理是什么?
把整个仿真过程分成许多相等的时间间隔
每个间隔为一个时间单位-时间步长
在每个时间步长内模拟系统的动态
仿真时钟:用以控制时间步进的过程,每一次步进一个步长。
注意:每重复一次模拟所得到的结果都不一样,需要经过多次模拟,求得统计意义上的顾客平均等待时间,以及平均每分钟服务的顾客人数。
蒙特卡洛方法
当所求解可视为某个随机变量的概率或期望的函数时,通过随机抽样,计算频率或平均值,以估计概率或期望,从而得到所求解。也称MC方法。
1. 矿井脱险模拟
矿工在矿井中迷失了方向,身处三个矿道交汇处,不知选择哪个矿道脱险。事实是:一号矿道能脱险,二号、三号矿道只能回到原处。若任意随机选择一个矿道,安全走出需要花费多少时间?
实验内容:如果选择一号矿道,假设走3小时可脱险,选择二号、三号矿道分别走5小时、7小时回到原处。如果矿工任何时间都随机选择其中一个矿道行走,用模拟实验的方法计算他安全走出矿井平均花费多少时间。
解:产生n个均匀随机整数,取1,2,3。利用fix函数将它转化为3,5,7。当第一次出现3时,表示这个人走出了矿井,程序结束。
程序代码:n = 10000;
S = [];
for i=1:100000 %做了100000次试验
N=1+fix(3*rand(1,n)); %产生10000个随机数,并记为1,2,3. T=2*N+1; %产生10000个随机数,并记为3,5,7. K=find(T==3); %用find函数找出3的位置,并且赋值给K k=K(1); %取第一个3的位置
S=[S,sum(T(1:k))]; %对第一个3前面的所有值求和,放在矩阵中
end
Tmax=max(S)
Tmin=min(S)
Tavg=sum(S)/100000
2. 生日问题
在座60人,生日在同一天的概率是多少?
(1)理论计算
(2)实验模拟
解:把n个人看成是n个球,将一年365天看成是N=365个盒子,则“n个人的生日全部不相同”就相当于“恰好有n(n
365*364*......*(365601)P=1- p。(1)理论计算p=1- = 0.9941。(2) 36560的生日完全不相同的概率为p
for k = 1:60
p(k) = 1-prod(365-k+1:365)/365^k;
end
plot(p,'.r') p(60) = 0.9941
3. 定积分的计算
(1)计算
a = 0;
b = 1;
n=500000;
N=0;
c = 1;
d = exp(1); %g(x) = exp(x.^2);所以f(y)=(g(a+(b-a)*y)-c)/(d-c) for i=1:n
x=rand;y=rand;
if(y
N=N+1;
end
end
s=(N/n)*(exp(1)-1)+1 %S = S0*N+c*(b-a) S0 = (b-a)(d-c)
(2)通过计算来求π。
n = input('请输入产生点的个数:');
s =0;
for i=1:n
if(rand^2+rand^2
s = s+1;
end
end
pi = 4*s/n %随着m,n的增大它们的比值应该趋近于为两区域面积的比值,所以pi=4*s/n
4. 超市收款问题
超市有两个出口的收款台,两项服务:收款、装袋。两名职工在出口处工作。 有两种安排方案:开一个出口,一人收款,一人装袋,或者开两个出口,每个人既收款又装袋。问商店经理应选择哪一种收款台的服务方案。 选择服务方案的标准:
1、 顾客平均等待时间最短
2、 每分钟服务的顾客数量最多
3、 服务的工作效率最高(除去空闲时间,每位职工每分钟实际服务顾客数最多) 目标:(1)编写两种情况下的仿真程序,根据两个模拟结果评价两个方案,确定出口处收款台安排方案。
(2)对两种服务方案分别模拟30分钟内收款台的排队情况,通过比较确定首选方案。
假设:
(1)顾客到达收款台是随机的,服从规律:40%的时间没有人来,30%的时间有一个人来,30%的时间有2个人来。
(2)收款装袋的时间是相同的
(3)在第一种方案中,收款与装袋同时进行
或假设:
(1)顾客到达收款台是随机的,平均时间间隔为2分钟,即间隔时间服从均值为2的指数分布。
(2)顾客购买的货物量不同,因此服务时间的长短随机。两位工作人员分别收款装袋,对顾客服务时间服从正态分布N(1,1/3), 一位工作人员既收款又装袋,对顾客服务时间服从正态分布N(1,2/3)。
第一类假设的思路:顾客到达收款台的规律是:40%的时间没有人来,30%的时间有1个人来,30%的时间有2个人来。首先模拟十分钟内顾客到达收款台情况。 每分钟到达收款台的人数是随机变量n:{0,1,2}, 具有分布列
n 0 1 2
p 0.4 0.3 0.3
模拟方法:
取(0,1)区间内均匀分布随机数y=rand,
记n为新到的顾客数,L是队列长,Tao是服务时间,T1是总和排队时间,T2shi总和服务时间,则
当0
当0.4
当0.7
每分钟记录一次系统状态,模拟10分钟, 得到n的值,寻找几个量之间的关系。 想想这样做的道理是什么?
把整个仿真过程分成许多相等的时间间隔
每个间隔为一个时间单位-时间步长
在每个时间步长内模拟系统的动态
仿真时钟:用以控制时间步进的过程,每一次步进一个步长。
注意:每重复一次模拟所得到的结果都不一样,需要经过多次模拟,求得统计意义上的顾客平均等待时间,以及平均每分钟服务的顾客人数。