python按钮点击按一次触发一次_【概率】每0.1s几率触发后持续时间(1.4s)覆盖,求3600s期望时长...

(一) 问题的提出

某灯设置有一个概率触发器,每0.1秒触发一次,每次15%几率点亮该灯,持续时间为1.4秒,若再次触发点亮时该灯已经点亮,则持续时间覆盖。求该灯一小时内处于点亮状态的期望

(二)分析问题

2.1基本分析:

在这个问题中,有一些问题需要界定,界定如下:第0s的时候判定触发器是否触发,来决定第0-0.1s的状态。前者对应时间轴上的点,后者对应时间轴上的线段。总共有36000个点 以及36000个时间段对于点来说,有触发,不触发两种状态;对于段来说,有亮与不亮两种状态。每个时间段有0.1s长

在这个过程中,前1.4s及前14段和第15段到第36000段有着明显的不同。

对于前14段的每N段(0≤N≤14):只要只要前N个点(第1到N)中有任何一个触发成功,则这一段既为亮的状态。

对于第15段到第36000段(15≤N≤36000):从正面想有一定困难,会涉及到多种情况讨论,但其对立面不亮的状态较为简单,只有第N段前的14个点均触发失败,第N段是不亮的状态,否则第N段为亮的状态。

2.2求解方法分析:

2.2.1第一种算法常规方法

需要求出所有可能情况,即设X为亮灯时常(X=0,0.1,0.2,……3600)的概率(X-P),然后再对X*P(X)累加,这种做法会涉及到3601种概率的计算,需要用到比较大的组合值求解,十分繁琐。

2.2.2第二种算法采取递归的方法

第一步算出N≤14的期望值:

可以采取常规方法求X*P(X)的累加

第二步算15≤N的情景:

前N秒亮的段数的期望记为A(N),则第N+1秒时:

A(N+1)=(0.85^13)[0.15*(A(N)+1)+0.85A(N)]+(1-0.85^13)*[A(N)+1]

解释一下这个地推公式:

公式分为两部分:

第一部分

(0.85^13)[0.15*(A(N)+1)+0.85A(N)]

(0.85^13)表示这一点(N+1点)之前的13个点都没有触发成功的概率

之后看第14点(N+1点),分为两种情况,

  1. 如果第14点触发(0.15概率)则总段数要在A(N)基础上加1,
    即为0.15*(A(N)+1)
  2. 如果第14点不触发(0.85概率)则总段数即为A(N)。

第二部分

(1-0.85^13)*[A(N)+1]

(1-0.85^13)表示这一点(N+1点)之前的13个点至少有一个触发成功的概率

这种情况下第N+1段一定为亮的状态,因此总段数要在A(N)基础上加1

(三)计算理论值

3.1前14段计算

亮灯0段的概率为0.85^14

亮灯1段的概率为(0.85^13)*0.15

...

亮灯X段的概率为(0.85^14-X)*0.15

...

亮灯14段的概率为(0.85^0)*0.15=0.15

在Excel种计算

603c3a69d4d530790f143e638d3cc94e.png

3.214段之后计算

将14段作为初始值誊写

13821d12f73431007a8ad23ad1af9316.png

从第15段开始写入递推公式F3=

a5bae68f12260be3aade324f502523b9.png

下拉到第36000段(可以在填充种选中序列填充到36000)

cfe6849769010d5b44078984601da4aa.png

得到结果

7da7fa8e728739cd55ee4aacf08a7620.png

(四)模拟实验值

4.1Excel模拟

在Excel 中插入一个按钮,点击按钮后开始模拟

按钮中写入如下代码

080bd02e956b5eb687aa3150f5aabbec.png

点击开始模拟

8db43635349d44e9ac794a7c2b5aaa24.png

之后计算多次实验模拟结果的平均值

4.2 python 模拟

c80adb195be246fde5d8fb20975859ef.png

(五)近似值计算

假设不考虑前1.4s的特殊性,所有的段都遵循跟15-36000段一样的规则

则每一段亮的概率为前13个点触发成功加前13个点触发失败、14个点触发成功

近似算法A(N)=(1-0.85^13+(0.85^13)*0.15)*N

7bdc5ca6d87600f0e81a58c2d10463fb.png

G2=

a68a0bc37b6183de80a9fc8fb3d67eea.png

到36000时结果为

4ad9d63beaa1da396c05ee290f81f4fc.png

(六)总结

最终结果

429715fb79e8a58133133ac90e4d6cca.png

在以上的过程中

用到了互斥事件通过求其补集的概率来求其概率

在常规方法较繁琐时使用递推方法计算

Excel中

1 .使用POWER(底数,指数)函数进行幂运算

2 .使用填充序列快速填充到36000

Vba中

1.设置按钮

2.定义数组

3.定义函数

4.使用MsgBox弹出对话框

python中

1.引入random模块模拟概率

其他注意事项

1.Vba中0.15的概率中 A<0.15 不能写为A ≤0.15

2.python中要严格注意缩进(吐槽一下python老卡在的格式问题,赞美一下Vba中自动帮你修改格式)

3.python模拟中存在系统性误差,次误差未查明原因

内容同步更新在公众号:蜘蛛见闻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值