等公交车问题-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))

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值