python写一个病毒感染传播模型

这是一个 Python 病毒感染传播模型的示例代码:

import random

class Person:
    def __init__(self, infected):
        self.infected = infected
        self.immune = False
        self.dead = False

class Virus:
    def __init__(self, mortality_rate, infection_rate):
        self.mortality_rate = mortality_rate
        self.infection_rate = infection_rate

def simulate(num_people, mortality_rate, infection_rate, initial_infected):
    # 初始化人群
    population = []
    for i in range(num_people):
        if i < initial_infected:
            population.append(Person(True))
        else:
            population.append(Person(False))

    # 初始化病毒
    virus = Virus(mortality_rate, infection_rate)

    # 模拟感染传播
    while True:
        # 感染者与健康者之间传播
        for infected in population:
            if infected.infected and not infected.dead:
                for healthy in population:
                    if not healthy.infected and not healthy.immune and not healthy.dead:
                        if random.uniform(0, 1) < virus.infection_rate:
                            healthy.infected = True
        # 死亡与康复
        for infected in population:
            if infected.infected and not infected.dead and not infected.immune:
                if random.uniform(0, 1) < virus.mortality_rate:
                    infected.dead = True
                else:
                    infected.immune = True
                    infected.infected = False
        # 统计结果
        infected_count = 0
        immune_count = 0
        dead_count = 0
        for p in population:
            if p.infected:
                infected_count += 1
            elif p.immune:
                immune_count += 1
            elif p.dead:
                dead_count += 1
        # 判断是否结束模拟
        if infected_count == 0:
            break
    return infected_count, immune_count, dead_count

# 测试模拟函数
infected_count, immune_count, dead_count = simulate(1000, 0.1, 0.5, 10)
print(f'感染人数: {infected_count}, 康复人数: {immune_count}, 死亡人数: {dead_count}')

在这个模型中,有两个类: PersonVirusPerson 类用于表示人,并记录每个人是否

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值