netlogo元胞自动机室内疏散

毕业设计,做一个基于元胞自动机的室内人员疏散的模型分析,听说netlogo适合做这一类的模型分析,虽然没接触过这东西,而且国内对于netlogo的学习资料还是很少,自己也只有一个中文用户手册供学习,但还是硬着头皮写入论文开题报告了。

然而自己的惰性使我荒度了两个星期。

理智告诉我不能再这样了。为了给自己的研究过程添点动力,决定通过写博客的方式让自己获得一些阶段性的反馈

室内的话,要先做出课桌作为障碍物,只是怎么在net logo中找到制作障碍物的方法呢?

搜索未果后突然想到,可以设置瓦片颜色,然后再通过海龟移动前的判定也许能实现?那就试一试吧

这是初步的模拟教室的场景,之后可能会再改变人数或过道位置之类的

 

 

这时,我又遇到一个问题:怎么实现海龟对于出口的运动趋向呢?

搜了几篇博客了解到可以通过设置瓦片的危险度来实现,让海龟向危险度低的瓦片运动

这就需要给瓦片加入危险度这一属性,到这了就可以想到对于障碍功能的实现也可以利用危险度来完成

具体思路就是离出口越近的瓦片危险度越低,手动赋值麻烦但简单,不过以后如果改变过道位置的话还得重新再赋值

这里可以设置为在程序初始化时根据瓦片与出口的距离来对每个瓦片的危险度属性进行赋值,

然后再对桌子瓦片赋予较高的危险度。

赋值结束以后,就是设计海龟的移动规则了,基本规则如下

1.每个海龟遍历自己所处瓦片与周围4或8个瓦片(与之对应的是4邻居模型和8邻居模型),

   下一时间段所在位置就是危险度最低的那个瓦片。

   如果有两个及其以上的最低危险度瓦片,就要随机选择,这也为模拟加入了随机性。

2.在遍历瓦片之前,要筛选出其上没有海龟的瓦片,这里就要给瓦片加入一个属性【occupied】

   其值为0或1,用来判定瓦片上是否有海龟

   但在netlogo是有自带的方法来判定瓦片上有没有海龟的,所以无需再额外设置属性来判定。

3.出口设置的危险度为0,是最低的,那么海龟到此地以后就要die,然后统计海龟数量归零的时间,以此来观察疏散效率

 

这些只是最基本的规则,如果要考虑研究的复杂度,就要加入从众心理,个人的慌乱情绪之类,现阶段以先做出一个较为简单的完整作品为目的,而元胞的运动规则差不多就是这个疏散实验最重要,最有价值的部分。

这里用瓦片的颜色来表现出危险度直观的效果,最后的结果是这个样子。

 

posted @ 2020-09-11 10:54  emojio  阅读(410)  评论(0)    收藏  举报