所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
2020--病毒的群体传播计算机模拟
Anders项勇 Anders项勇 2020-02-04 23:10:13
0
0
简单

最近武汉新型冠状病毒肆虐,让全国人民揪心。想利用mind+的图形化功能模拟病毒的传播及防治。大家听从国家安排,不要外出、聚众,戴好口罩,注意隔离防治。

原理:模拟一个多人群体,然后用一个被传染人作为传染源,在群体中随意移动,判断与群体里面的每个个体的距离传播病毒。被传染的人又会变为新的传播源传播。通过模拟会看到如果不进行隔离,病毒传播将难以控制,这也是这次武汉、湖北要封城的根本原因。

步骤1 步骤1
模拟被传播的群体

使用mind+的克隆,模拟群体,模拟一个80-100人的群体。因为要采集每个克隆体的坐标,但是mind+对每个单独的克隆体没有单独的坐标,所以这里利用一个私有变量作为坐标的索引,用另外两个列表存储生成克隆体时的X、Y坐标。但是不能让每个克隆体在随机移动,并实时获取坐标,这个高手有方法的话可以研究告知下。

projectImage
步骤2 步骤2
传染源代码编写

传染源让其随机移动。同时一直循环判断与列表中形成的坐标的距离计算(就是到每个克隆体的距离),小于一定值就克隆病毒,并公告传播病毒。这里因为循环判断有时间的延迟,所以有时靠近了克隆体,但是还没循环判断到这个序列的坐标,就会导致没有传播,这个还不能解决。

projectImage
步骤3 步骤3
模拟病毒代码编写

把上面的克隆病毒移动到被感染人,报告“一级传染”。同时把被感染人的坐标及时取出。然后用这个坐标到坐标库中去循环判断其他人离自己的距离,如果距离小于一定值即克隆病毒,报告“二级传染”,即被传染人再次传给其他人。但有时会触发远距离的误报,原因应该是两个循环需要消耗时间。本来想用并发来处理,结果mind+的并发好像是只能在有主板的硬件上传模式才能调用出来。如有高手会处理请赐教。

projectImage
步骤4 步骤4
总结

用计算机模拟了病毒在人群传播的模型,类似的群体模型都可以用这种方式来处理,虽然还有不尽如意的地方。请高手赐教。

请大家听从国家安排,不要外出、聚众,戴好口罩,注意隔离防治。天佑中华!


步骤5 步骤5
演示视频
Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]