等公交车问题-python

问题描述:假设一个站台每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))

猜你喜欢

转载自blog.csdn.net/noingw96/article/details/83039654