元胞自动机模拟病毒传染(SEIR模型)(Python代码实现)

news2024/11/20 21:17:01

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Python代码实现

🎉4 参考文献


💥1 概述

病毒在人群中的流行以及在信息网络上的蔓延都已经给人们带来了巨大的损失,因此研究病毒的传播机理进而采取措施来有效控制其传播具有重要现实意义。另外,现实生活中大量的社会、生物以及通讯等系统,都可以适当利用复杂网络来描述,复杂网络理论的发展为人们理解病毒的传播特征以及防御其传播提供了新的方法。近年来,借助于复杂网络理论研究病毒传播动力学行为越来越受到人们的关注。随着复杂网络传播动力学研究的逐步深入,在取得丰硕研究成果的同时人们也发现病毒的传播特性将会受到传播延迟、传染媒介、不完全免疫以及网络交通流等传播因素的影响。

本文设置一定大小的人数、四种人群(四种状态)、传染概率、潜伏时间、治愈时间、免疫时间,即可对其进行模拟也可以更改规则和人数、人群,实现自己想要的模拟。

参考文献:

[1]张丽娟,王福昌,李振刚.基于元胞自动机的病毒传播和系统仿真模型[J].系统仿真学报,2021,33(10):2449-2459.DOI:10.16182/j.issn1004731x.joss.21-0131.

根据病毒传播特点及城市空间地图模式,建立了一类易感者,潜伏者,患病者,治愈者,免疫者,病毒传播模型,将环境中的个体看作Agent智能体,根据元胞自动机原理构建病毒传播机制。依据病毒的不同传播特点、不同防控策略对病毒的时空传播进行了仿真,讨论了关键因素对病毒扩散的影响。

📚2 运行结果

部分代码:

# 定义规则
    def next_iter(self):
        # 规则1,易感者
        if self.stage==0:
            probability=random.random()#生成0到1的随机数
            s1_01 = self.s1_0 * k + self.s1_1 * l

            if (s1_01>probability) and (s1_01!=0):
                p1 = random.random()
                if p1>c1:
                    self.stage=1
                else:
                    self.stage=3
            else:
                self.stage = 0
        # 规则2,感染者
        elif self.stage == 1:
            if self.t_ >= t_max:
                self.stage = 2
            else:
                self.t_ = self.t_ + 1
        # 规则3,治愈者(永久免疫规则)
        elif self.stage == 2:
            if self.T_ >= T_max:
                self.stage = 0
            else:
                self.T_ = self.T_ + 1
        # 规则4,潜伏者
        elif self.stage == 3:
            if self.t1_ >= t1_max:
                self.stage = 1  # 转变为感染者
            else:
                self.t1_ += 1

"""细胞网格类,处在一个长cx,宽cy的网格中"""
class CellGrid:

    cells = []
    cx = 0
    cy = 0

    # 初始化
    def __init__(self, cx, cy):
        CellGrid.cx = cx
        CellGrid.cy = cy
        for i in range(cx):
            cell_list = []
            for j in range(cy):
                cell = Cell(i, j, 0)            #首先默认为全是易感者
                if (i == cx/2 and j ==cy/2) or (i==cx/2+1 and j==cy/2) or (i==cx/2+1 and j==cy/2+1):#看26行就可以了
                    cell_list.append(Cell(i,j,1))
                else:
                    cell_list.append(cell)
            CellGrid.cells.append(cell_list)
# 定义规则
    def next_iter(self):
        # 规则1,易感者
        if self.stage==0:
            probability=random.random()#生成0到1的随机数
            s1_01 = self.s1_0 * k + self.s1_1 * l

            if (s1_01>probability) and (s1_01!=0):
                p1 = random.random()
                if p1>c1:
                    self.stage=1
                else:
                    self.stage=3
            else:
                self.stage = 0
        # 规则2,感染者
        elif self.stage == 1:
            if self.t_ >= t_max:
                self.stage = 2
            else:
                self.t_ = self.t_ + 1
        # 规则3,治愈者(永久免疫规则)
        elif self.stage == 2:
            if self.T_ >= T_max:
                self.stage = 0
            else:
                self.T_ = self.T_ + 1
        # 规则4,潜伏者
        elif self.stage == 3:
            if self.t1_ >= t1_max:
                self.stage = 1  # 转变为感染者
            else:
                self.t1_ += 1

"""细胞网格类,处在一个长cx,宽cy的网格中"""
class CellGrid:

    cells = []
    cx = 0
    cy = 0

    # 初始化
    def __init__(self, cx, cy):
        CellGrid.cx = cx
        CellGrid.cy = cy
        for i in range(cx):
            cell_list = []
            for j in range(cy):
                cell = Cell(i, j, 0)            #首先默认为全是易感者
                if (i == cx/2 and j ==cy/2) or (i==cx/2+1 and j==cy/2) or (i==cx/2+1 and j==cy/2+1):#看26行就可以了
                    cell_list.append(Cell(i,j,1))
                else:
                    cell_list.append(cell)
            CellGrid.cells.append(cell_list)

🌈3 Python代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]张丽娟,王福昌,李振刚.基于元胞自动机的病毒传播和系统仿真模型[J].系统仿真学报,2021,33(10):2449-2459.DOI:10.16182/j.issn1004731x.joss.21-0131.

[2]王亚奇. 多传播因素的复杂网络病毒传播及免疫策略研究[D].南京邮电大学,2011. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM整合-如何配置相关文件

下述操作都是在IDEA上进行 1.首先新建一个Maven工程。 2.在pom.xml中增加相关依赖 <properties><spring.version>5.3.1</spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId>&l…

安卓玩机搞机技巧综合资源----手机各种代码 查询信息 开启端口 调试选项【十】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

踩坑Xxljob本地部署后调度一半成功一半失败原因分析及解决方案记录

缘由 入门学习和本地部署Xxljob过程中&#xff0c;发现Xxljob任务一半调度成功&#xff0c;一半调度失败&#xff0c;给我邮箱发爆了&#xff0c;为啥呢&#xff1f;查了半天资料都没解决 成功比例图&#xff1a; 实际操作时&#xff0c;发现单次手动执行一定成功&#xff0…

Python之数据库编程

目录 一、MySQL数据库的使用 数据库相关操作 二、数据库增删改查 增加 修改 删除 三、数据库标准写法 一、MySQL数据库的使用 建表 CREATE TABLE py_student( id INTEGER primary key auto_increment, name INTEGER not null, gender varchar(11) default 男 , birthday d…

CMake中define_property的使用

CMake中的define_property命令用于定义和记录自定义属性&#xff0c;其格式如下&#xff1a; define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |TEST | VARIABLE | CACHED_VARIABLE>PROPERTY <name> [INHERITED][BRIEF_DOCS <brief-doc> [docs...]]…

php+vue基于微信小程序的在线挂号预约小程序

网络的广泛应用给生活带来了十分的便利。所以把在线挂号管理与现在网络相结合&#xff0c;利用ThinkPHP5技术建设在线挂号微信小程序&#xff0c;实现在线挂号的信息化。则对于进一步提高在线挂号管理发展&#xff0c;丰富在线挂号管理经验能起到不少的促进作用。 在线挂号微信…

在飞书搞了个机器人,我让ChatGPT帮忙写算法

一、前言 环境&#xff1a; 系统&#xff1a;Windows 11 64位 Python版本&#xff1a;Python 3.9 注&#xff1a;本文不讲怎么实现&#xff0c;只讲实现的效果和一些思考。大家感兴趣再考虑去配置相关机器人。 先来问问ChatGPT两个问题&#xff1a; 1、ChatGPT是什么&#xff…

Java面试题总结-面向对象

面试题总结第一篇面向对象面向对象和面向过程的区别面向对象三大特性Java是如何实现多态的面向对象 面向对象和面向过程的区别 面向过程&#xff1a; 优点&#xff1a;性能比面向对象高&#xff0c;因为类调用时需要实例化&#xff0c;开销比较大&#xff0c;比较消耗资源;比如…

非零基础自学计算机操作系统 第1章 操作系统概述 1.2 操作系统的历史 1.2.1 操作系统的产生

非零基础自学计算机操作系统 文章目录非零基础自学计算机操作系统第1章 操作系统概述1.2 操作系统的历史1.2.1 操作系统的产生第1章 操作系统概述 1.2 操作系统的历史 由于操作系统是直接建造于硬件层之上的&#xff0c;它的演变必然与计算机系统结构的演变有着密切的联系。 …

Java基于JSP的小区内部物业管理系统

对于规模较小的物业管理公司来说,传统的人工小区物业管理模式仍旧可以应付日常的工作需求。但是,随着该行业不断的发展,竞争日益激烈,提高物业管理的工作水平与效率、为业主提供更好的服务,已经成为物业管理公司当前必须考虑的问题。而将计算机引入到管理机制中来将是一个不错的…

2022-12- 05 网工进阶(三十七)MPLS--基本概念、转发过程、基本配置、配置静态LSR

MPLS概述 基本概念 MPLS&#xff08;Multi-Protocol Label Switching&#xff0c;多协议标签交换&#xff09;位于TCP/IP协议栈中的数据链路层和网络层之间&#xff0c;可以向所有网络层提供服务。 通过在数据链路层和网络层之间增加额外的MPLS头部&#xff0c;基于MPLS头部…

木字楠后台管理系统开发(3):Vue项目初始化并引入基础依赖

&#x1f3b6; 文章简介&#xff1a;木字楠后台管理系统开发(3)&#xff1a;Vue项目初始化并引入基础依赖 &#x1f4a1; 创作目的&#xff1a;为了带大家完整的体验木字楠后台管理系统模版的开发流程 ☀️ 今日天气&#xff1a;温度骤降&#xff0c;差点给爷送走。 &#x1f4…

Js逆向教程23-AST Babel插件最简单修改值示例

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; AST Babel插件最简单修改值示例 一、文档地址和安装的方式 https://github.com/jamiebuilds/babel-handbook/blob/master/translation…

动态规划

什么是动态规划 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中&#xff0c;可能会有许多可行解。每一个解都对应于一个值&#xff0c;我们希望找到具有最优值的解。 动态规划的前提是什么&#xff1f; 存在最优解 拿出来任意一块物品&#xff0c;仍旧是最…

详解C++11

文章目录前言一、C11简介二、统一的列表初始化2.1 {}的初始化2.2 std::initializer_list三、声明3.1 auto3.2 decltype3.3 nullptr四、范围for五、智能指针六、STL中一些变化新容器容器中的一些新方法七、右值引用和移动语义7.1 左值引用和右值引用7.2 左值引用和右值引用比较左…

灵魂拷问,你真的了解DNS吗?

未来已来&#xff0c;只是不均衡地分布在当下 大家好&#xff0c;我是菜农&#xff0c;欢迎来到我的频道。 都说程序员是面向Google编程&#xff0c;殊不知当你输入 www.google.com 地址的时候&#xff0c;是否有想过&#xff0c;在回车的一瞬间浏览器如何将请求发送&#xff…

价值年薪70W的JAVA进阶学习路线!终于让我从阿里P8手里抠出来了

作为一个男人我感觉必须得做点什么来证明一下自己&#xff0c;现在我又回来了&#xff0c;准备把自己的节操准备补一下。另外给各位未来的Java程序员说一句&#xff0c;别的我不清楚&#xff0c;学习编程请从一而终 咱们学习编程就挺难的&#xff0c;有这些先驱者来带领咱们学习…

【Maven基础】命令行环境使用

实验一&#xff1a;根据坐标创建 Maven 工程 1、Maven 核心概念&#xff1a;坐标 1.1、数学中的坐标 使用 x、y、z 三个『向量』作为空间的坐标系&#xff0c;可以在『空间』中唯一的定位到一个『点』。 1.2、Maven中的坐标 1.2.1、向量说明 使用三个『向量』在『Maven的仓…

[附源码]计算机毕业设计会议室预定管理APPSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【个人笔记 hive】hive里面的说SerDe含义

官网中这样介绍serde&#xff1a;https://cwiki.apache.org/confluence/display/Hive/SerDe&#xff1a; SerDe Overview SerDe is short for Serializer/Deserializer. Hive uses the SerDe interface for IO. The interface handles both serialization and deserialization …