You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

随时间推移的概率实现:固定患病群体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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:39:01