问题描述:假设一个站台每5分钟会经过一辆A车,每8分钟会经过一辆B车,请问如果你去该站台,平均需要等多长时间可以等到一辆车?
数学思路:
可以假设为概率密度位均匀分布,每一个时间段内等到一辆车的概率是相同的。
五分钟之内的任意时刻等到A车的概率为1/5,八分钟内任意时刻等到B车的概率为1/8.设x等到车的时间,则x / 5为等到A车的概率,(1-x / 5)为没有等到的没有等到的概率。同理,B车的等不到的概率为(1-x / 8)。
因此,在该站台等到A或B车的概率为P=1-((1-x / 5)*(1-x / 8))。之后对P进行求导得到概率密度P‘,最后对P’t在0-5的范围内积分,求得等待时间。
程序设计:
利用random可以生成随机数的功能,可以模拟公交车的等待时间,设计过程如下:
# -*- coding:utf-8 -*-
import random
def double_bus(a,b):#模拟一次等待两辆车的时间
first=random.random()*a;
second=random.random()*b;
if(first<second):
return first
else:
return second
def wait_bus(n,a,b):#模拟n次
i=0
total=0
for i in range(n):
total+=double_bus(a,b)
return total/n
if __name__ == '__main__':
time=wait_bus(100000,5,8)#均匀分布的等车问题
print(time)
如果该问题中站台的公交车不止A和B,又该如何解决呢?
我们可以设计用list进行保存车辆时间,具体设计如些
# -*- coding:utf-8 -*-
import random
def one_bus(realtime):#模拟一次等辆次车
first = random.random()*realtime;
return first
def mul_bus(mul):#模拟一次等n辆车
timelist=[]
for waittime in mul:
temp=one_bus(waittime)
timelist.append(temp)
return min(timelist)
def wait_mulbus(n,mul):#模拟n次
i=0
total=0
for i in range(n):
total+=mul_bus(mul)
return total/n
if __name__ == '__main__':#多车次的等车问题
buslist=[5,8,10]
time = wait_mulbus(100000,buslist);
print("多车次的平均等车时间为:{0}".format(time))