首页 > 其他分享 >ABM仿真模型介绍

ABM仿真模型介绍

时间:2023-10-15 11:33:24浏览次数:39  
标签:仿真 这个 模型 ABM 个体 当中 我们

从个体动机到群体规律-ABM仿真模型介绍

image-20231015095016108

今天我们谈一谈单体/多体仿真模型,模型的英文名称为Agent based modeling,以下简称为ABM模型

像我们熟悉的基于元胞自动机原理、的生命游戏,不同的生命体按照同一规则,在所设置好的环境中进行交互,演变出复杂的形态,这就是一类典型的ABM模型

其中三个核心要素:个体、环境、规则,它们是相互作用的,产生了1+1大于2的效果。


通过对经典的ABM案例进行模拟,我们可以了解到,受规则/环境影响的个体微观层面的行为、将会对整体的宏观系统产生什么样的影响。

一些看起来很简单的规则/环境,竟然是会产生非常反常识的结果。

这对于相关政策制定,是很有指导意义的

而且这类模拟分析,通常是很难采取传统的数理模型进行推导的,需要借助现代计算机的强大算力,进行仿真模拟,才能够得到系统性的结果。


今天我们会使用NETLOGO作为节目的核心模拟软件,相关的软件介绍,可以参考我们上一期的节目。

进入到具体案例之前,我们先要了解一下NETLOGO的基本信息。

在NETLOGO当中,有4个类别的个体/Agent。

  • 第一类是乌龟Turtle,它们是可以移动的个体,可以在NETLOGO中的二维世界移动,我们可以把它看成是需要模拟的人类、动物、病毒等。
  • 第二类是贴片patch,它们是二维世界当中不能够移动的个体。
  • 第三类是连接link,用于连接以上2种个体。
  • 第四类是观察者observer,它是脱离于二维世界之外的个体,能够和所有二维世界的个体来进行交互,可以把它看成是高维度的超级个体

image-20231015100318230


接下来,我们进入到基于NETLOGO的三个基础ABM模型:

image-20231015100555901


image-20231015100718768

一、森林大火模型

在这个简单模型当中,我们可以分析在不同的森林密度下,火势的蔓延程度。

绿色贴片代表着森林,红色代表是火焰。

程序设计为:当绿色贴片四周相邻的颜色是红色的时候,那么绿色贴片的颜色就会变成红色,代表这个绿色森林着火了,用这个方法推演下去。

模型当中可以设置不同的森林密度,测试对应火势的蔓延程度。

在我们的测试当中,调整森林密度从55%逐渐提高到63%,记录一下对应的森林烧毁的比例,选择森林烧毁比例的平均值作为最终的烧毁比例。

根据模拟结果,我们可以看到,59%是一个临界值,稍微增减对最终的烧毁比例都会产生非常大的边际影响。

这个模型对于绿化规划设计来说是非常具有借鉴意义的。

理解临界值的影响,可以帮助规划者更好地平衡绿化率风险成本之间的关系,实现社会经济利益的最优。


image-20231015100911119

第二个模型是传染病模型。在这个病毒传播模型当中,设计了一个1000人的小城镇,其中2个人携带了某种病毒。其中每个居民会与其他2个人有密切接触。

另外,在这个城镇当中有2所学校、5家餐厅、10个办公楼、15辆公交车。

在这些公共区域当中,人们会有互相交互的机会,每次交互都有相应的感染概率。

感染了之后,有发展成为重症的概率,有发展成为死亡的概率,另外也有恢复产生抗体的概率。

设置好了参数之后,我们进行模拟演变,我们可以看到每天的感染以及恢复的情况。

通过模拟关闭某些公共设施,可以看到相应的病毒传播抑制效果,这类模拟在当下的疫情防疫方面,有着很好的政策指导作用。


image-20231015100949123

第三个模型是交通规划模型,这个模型是可以提供交通规划的模拟。

我们可以设置红绿灯的密度,道路限速等参数,观察汽车的平均时速和道路效率,通过比较不同的规划方案,选择合适的红绿灯和限速设置。

交通规划部门可以按照这个思路,设计更加贴近真实情况的道路模型,录入相应的参数,进行方案的比较,从而对路段的红路灯设置进行优化。


以上3个是典型的ABM模型的应用案例。NETLOGO当中还有很多的内置经典模型提供大家尝试,我相信你会从这些模型当中找到很多的乐趣。


接下来,我会通过一个经典的案例,为大家具体介绍ABM模型的构建思路,并且尝试在EXCEL当中重现这个模型,实现触类旁通。

这个案例是来自于一个诺奖大咖Thomas Crombie Schelling - 托马斯谢林

谢林在博弈论应用方面有着突出的贡献,他在2005年获得了诺贝尔经济学奖。

他的模型并没有高深的数理推导,而是更多的基于ABM模型去分析微观动机宏观表现的关联,从而指导相关政策的制定。

我们今天一起看看他在1971年提出的:居民居住偏好聚类模型

image-20231015103301093


image-20231015101027852

在这个正方形区域当中,居住着两类人。

两类人有着不同的种族、文化或者其他的特征。

同时,我们设置了模型的人口密度为80%。

这意味着区域当中有80%的空置地。

image-20231015104021347

这里我们引入一个概念,相似性偏好值,根据每个居民四周8个方格中、相同类别居民占全部住户的比例。

我们假设模型当中的居民都是具有相同的、相似性偏好值、临界值(30%)。

对于个体来说,当他们的相似性偏好临界值、低于、这个临界值的时候,他就会选择搬家到随机一个地方的空地。

image-20231015104248254

系统就会按照这个规则一直演变下去的,直到群体满意或者达到了系统预设的迭代上限


当我们把这个临界值设置成为30%,从个人的角度来说,他/她对于周围同类型居民的比例要求就是30%。

这体现出来了这个人具有很大的差异容忍性

image-20231015104432337

但是当我们进行了模拟之后,会发现人们最终出现了聚类现象。

image-20231015104536677

如上图所示,红色和红色聚集,蓝色和蓝色聚集了,最终系统的平均相似比例,超过了70%。

这代表什么意思呢?

这意味着,个体的高容忍性、并没有导致、群体的高容忍结果


当我们提升相似性偏好值达到75%的时候,结果体现出来了明显的聚集效应,系统相似度最终达到了99.5%。

image-20231015104815087

当我们再一次提升相似性偏好值达到76%,这个时候系统是没有办法达到均衡的。

image-20231015104927427

这说明了什么呢?这说明这个时候的个体,都是具有排他偏好的,群体是具有了一致性的排他偏好的,结果却是一个平均相似度维持在50%左右的动态系统。

这是一个非常反直觉的结果,但是这又是非常真实的社会现象。


1971年的谢林,在没有计算机的情况下,拿着硬币和棋盘,花费了几个月的时候,才能够得到相似的结论。

现在的我们,可以借助计算机的强大算力进行模拟。

下面我会为大家解释,这个模型的基本构建思路。


首先设置初始状态,两类居民是分布在网格当中的,并且留有空置地,我们把空置地的位置存储在列表1当中。

image-20231015105319358

计算流程如下,每次迭代当中,我们会遍历每一个居民,然后计算这个居民的满意度。

当这个居民的满意度低于我们的系统设定值的时候,在列表1当中随机选择一个空地进行搬家。

原来居住的地方修改成为空置地,原来的空置地搬家到这个地方了修改成为居住状态,然后更新列表1,如下图所示:

image-20231015105557810

如果没有空置地可以提供选择,那么就跳出来遍历,如下图所示:

image-20231015105635061

循环以上的流程,直到以下两个条件满足其一:

image-20231015105808437


在NETLOGO当中的CODE编程区域,存储着这个模型的代码。

image-20231015105906136

这个代码是基于Scala和Java的模型。


在这个模型当中,通过globals命令,设定了两个全局变量。

image-20231015105957906

总体相似度,percent-similar,还有不满意度,percent-unhappy。


通过turtles-own命令,可以设定个体参数,这里定义了每个个体的相应属性。

包括个体的相似性偏好要求,近邻相似度等。

image-20231015110027770


globals和turtles-own命令都是需要再程序的一开始进行声明的。

接下来就是一连串的to...end的语法结构。

这是用来定义程序要执行的动作

首先设定初始状态,然后是每次迭代的流程,其中的子流程,有着各自的to end语句。

image-20231015110309755

这里的子流程包括,第一行判断是否全员满意,第二行移动不满意的个体到空地上,第三行更新个体属性、参数,第四行更新全局变量。


image-20231015110429502

当你在操作界面点击一次go once按钮,程序会运行这个迭代流程一次,点击go按钮之后,程序就会不断运行,直到退出机制被触发了。

其实这个程序还是很好理解的。


这里给大家看一下,我使用excel实现的相同的ABM模型模拟。

Excel当中的每个单元格,可以看成是对应的居住空间,红蓝色的设置可以区分成为两类人。

空格代表的是空置地。

我们可以通过VBA去实现相同的迭代流程。

标签:仿真,这个,模型,ABM,个体,当中,我们
From: https://www.cnblogs.com/gnuzsx/p/17765446.html

相关文章

  • 深度学习模型在基因组选择中的预测能力(统计、总结)
    Gianolaetal.[61]:应用:基因组选择。比较:多层感知器(MLP)与贝叶斯线性回归(BRR)。结果:在小麦数据集中,随着隐藏层神经元数量的增加,MLP的预测能力提高。MLP对BRR的性能提高了11.2%至18.6%。在Jersey数据集中,MLP也超越了BRR,特别是在脂肪产量、牛奶产量和蛋白产量上。Pérez-R......
  • 9月大型语言模型研究论文总结
    大型语言模型(llm)在今年发展迅速,随着新一代模型不断地被开发,研究人员和工程师了解最新进展变得非常重要。本文总结9-10月期间发布了一些重要的LLM论文。这些论文涵盖了一系列语言模型的主题,从模型优化和缩放到推理、基准测试和增强性能。最后部分讨论了有关安全训练并确保其行为......
  • 手动在本地搭建GPT大模型过程
    20211325手动在本地搭建GPT大模型过程一、搭建原因暑假期间由于闲着无聊且有娄老师在群里经常发一些GPT相关的文章和资料,因此对GPT有了兴趣,再加上我也经常在github上浏览和下载使用一些有趣的公开项目,由此开始着手了解GPT的构建和训练。二、搭建过程(由于当时没有想到要写博......
  • 瀑布模型
    软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果实施完成所需的工作内容当前活动的工作结果需要进行验证.如果验证通过,则该结果作为下一项活动的输入继续进行下一项活动,否则返回修改优点1)为项目提供了按阶段划分的检查瀑布模型查点。2)当前一阶段......
  • 【分享】讯飞星火认知大模型Python调用上下文测评
    一个很常用的用法,先是system提示,然后是user问题{"role":"system","content":"假设你是个程序员,你的微信是xxxxxxxx"},{"role":"user","content":"微信多少"}openai测试importopenai#pipinstallopenaiop......
  • 【分享】百度千帆大模型Python调用上下文测评
    一个很常用的用法,先是system提示,然后是user问题{"role":"system","content":"假设你是个程序员,你的微信是llike620"},{"role":"user","content":"微信多少"}openai测试importopenai#pipinstallopenaiope......
  • 【分享】讯飞星火认知大模型Python调用上下文测评
    一个很常用的用法,先是system提示,然后是user问题{"role":"system","content":"假设你是个程序员,你的微信是llike620"},{"role":"user","content":"微信多少"}openai测试importopenai#pipinstallopenaiope......
  • 【CV】图像去雾物理模型推导
    经典大气散射模型描述如下:\[I(x)=J(x)t(x)+A(1-t(x)),\]其中\(I(x)\)为带雾图像,\(J(x)\)为清晰图像,\(t(x)\)为透射率,\(A\)为全局全局背景光。通常定义\[t(x)=e^{-\betad(x)},\]其中\(\beta\)为大气散射系数,\(d(x)\)为相机到物体深度。我们从体渲染角度来考虑带雾图像模型,简......
  • 深度学习模型的基础
    DL与其他模型:深度学习模型是统计学中的“半参数推断模型”的子集。它们通过堆叠多个处理隐藏层来推广人工神经网络,每个层都由许多神经元组成。“深度”之意:“深度”这个词与知识通过连续的表示层被获取的方式有关。工作原理:DL方法基于多层(“深度”)的人工神经网络。不同......
  • 点分类模型实战
    点分类任务Coradataset(数据集描述:Yangetal.(2016))论文引用数据集,每一个点有1433维向量最终要对每个点进行7分类任务(每个类别只有20个点有标注)#点分类任务importtorch.nnfromtorchimportnnfromtorch.nnimportLinearfromtorch_geometric.datasetsimport......