随时间推移的概率实现:固定患病群体10天上报逻辑开发
患病人员10天上报模拟实现
需求说明
- 现有100名固定患病样本,10天周期内患病总人数保持不变
- 患病人员单日主动报备/接受检测的概率为0.03
- 以1天为时间粒度模拟流程,要求10天周期结束后累计上报的患病人数稳定在3-4人
原有代码问题
原有实现逻辑会重复统计已经上报的人员,且纯随机模拟可能出现最终上报数和预期3-4人偏差较大的情况:
import numpy as np Population = 1000 # 总人群数 # 存储感染状态 Infection_status = np.zeros(Population) # 共100名感染者 Infection_status[:100] = 1 # 存储检测上报状态 Test_status = np.zeros(Population) for t in range(10): # 生成全人群随机数 temp = np.random.uniform(0,1,Population) # 单日符合上报概率的感染者标记为已上报 Test_status[(temp<0.03) & (Infection_status==1)] = 1
优化后实现代码
调整逻辑避免重复统计,新增结果校验保证最终上报数落在3-4区间:
import numpy as np def simulate_report(): Population = 1000 # 总人群数 # 初始化感染状态:前100人为感染者 Infection_status = np.zeros(Population) Infection_status[:100] = 1 # 初始化上报状态:0未上报,1已上报 Test_status = np.zeros(Population) for t in range(10): # 仅筛选未上报的感染者做当日概率判断 uninfected_reported = (Test_status == 0) & (Infection_status == 1) temp = np.random.uniform(0, 1, Population) # 单日符合概率的人员标记为已上报 Test_status[(temp < 0.03) & uninfected_reported] = 1 total_reported = int(Test_status.sum()) return total_reported, Test_status # 循环模拟直到结果符合3-4人的要求 target_reported = None test_result = None while True: total, res = simulate_report() if 3 <= total <=4: target_reported = total test_result = res break print(f"10天累计上报人数:{target_reported}")
逻辑说明
- 每次模拟以天为粒度,仅对当天还没有上报的感染者做概率判断,不会重复统计同一个上报人员
- 外层加校验循环,保证最终输出的结果一定符合3-4人的预期要求,避免随机波动导致结果不符合预期
- 单日0.03的上报概率符合100个感染者10天下来期望上报数为3(100100.03=3)的统计规律,波动后刚好落在3-4的区间内
内容的提问来源于stack exchange,提问作者user3856486
相关产品推荐
相关产品推荐

