NetLogo模型讲解:谣言模型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本文档由netlogo爱好者编,如有不足,请见谅!模型位置Sample-SocialScience-RumorMill谣言传播是社会学里研究比较热的点,利用netlogo对谣言传播过程模拟研究可以方便的实现。原语学习:1.all?all?agentset[reporter]如果主体集合(agentset)中的所有主体对给定的报告器(reporter)都返回true,则返回true。否则返回false。给定的报告器必须对每个主体都返回布尔值(true或false),否则发生错误。2.scale-colorscale-colorcolornumberrange1range2返回明暗与number成正比的color色。number是一个主体变量,但是必须是数字型。如果range1range2,number越大,颜色越亮。如果rangerange2,则相反。如果numberrange1,则为最暗的color色。如果numberrange1,则为最亮的color色。注意:对明暗无关的颜色,例如greenandgreen+2一样,使用同样的色谱本模型概述:本模型对谣言传播弄你,一个人知道了谣言后会告诉和他相近的人(本模型中一个人就是用世界中的瓦片(patch)代替,邻居就是相邻瓦片),以此内推,谣言开始传播。3.display引起视图立刻更新。(例外:如果用户使用速度滑动条快进模型,更新可能被跳过)一般和鼠标点击事件一起使用。模拟界面:程序中先要有一个谣言发起者,就是瓦片中设立一个红色的瓦片,作为谣言的发起者,模型中有三种方式发起谣言(三个按钮):设置一个(setup-one),随机设置几个(setup-random)和使用鼠标左键点击设置(spread-rumor-with-mouse)globals[color-mode;;0=normal,1=whenheard,2=timesheardclique;;howmanypatcheshaveheardtherumorprevious-clique;;valueofcliquefromlasttick,foruseinthesuccessiveplots]设置三个全局变量(globals用来定义全局变量),color-mode对应界面上三种着色类型:color:normal,color:whenheard,color:timesheardclique:英文直译就是初级群体,用来记录多少人(这里用瓦片表示)听到谣言previous-clique:记录上一次tick(netlogo内置计时器,和现实时间不同)的初级群体,用来画图patches-own[times-heard;;trackstimestherumorhasbeenheardfirst-heard;;clocktickwhenfirstheardtherumorjust-heard?;;trackswhetherrumorwasheardthisround--resetseachround]patches-own用来定义patch拥有的变量,times-heard记录听到多少次了,first-heard用来记录第一次听到谣言的tick,just-heard?;;;setupprocedurestosetup[seed-one?]clear-all;;清除所有局部变量,一般这个都要写在setup开始第一行setcolor-mode0;;设置默认着色方法setclique0;;全局变量clique初始群体为0askpatches;;设置所有瓦片(这里就是模拟现实事件的人)[setfirst-heard-1settimes-heard0setjust-heard?falserecolor];;recolor是下面写的函数ifelseseed-one?[seed-one][seed-random]reset-ticks;;一般计时器清除放最后end看一下这个setup初始化例程,我们可以注意到,这个和我们平常看到的不一样,一般情况下就直接是setup,这里使用了个参数[seed-one?],例程里使用参数用中括号括起来,我们前面说到有三种方式发起谣言,带“?”结尾的参数取值一般就取true和false,说明还有一种方式没有使用这个setup例程。到程序运行界面,右键选中setup-one按钮,点编辑,可以看到它的指令是setuptrue,说明传递了一个true到seed-one?里。同理,在setup-random按钮的指令是setupfalse,说明传递了个false。toseed-one;;让中心瓦片[00]发起谣言;;tellthecenterpatchtherumoraskpatch00[hear-rumor0]endtoseed-random;;随机选取一定瓦片;;seedwithrandomnumberofrumorsourcesgovernedbyinit-cliqueslideraskpatcheswith[times-heard=0][if(random-float100.0)init-clique[hear-rumor0]]end发起谣言两种方式,这里面又调用了下面的一个例程函数hear-rumor[when]听到谣言,如果第一次听到,记录first-heard的when(tick),设置just-heard?为true,然后听到次数times-heard听到的次数加1,然后重新着色recolor,如果不是第一次,那就直接记录times-heard和着色就可以了。tohear-rumor[when];;patchprocedureiffirst-heard=-1[setfirst-heardwhensetjust-heard?true]settimes-heardtimes-heard+1recolor;end另外一种模式是根据鼠标单击产生谣言这里要注意,用到鼠标单击,如果不使用display,视图不会马上更新tospread-rumor-with-mouseifmouse-down?[askpatchmouse-xcormouse-ycor[hear-rumorticks]display]end下面看看go例程togoifall?patches[times-heard0][stop];;如果所有的瓦片都听到了谣言,那就停止askpatches[iftimes-heard0;;如果听到谣言次数大于1,那么就传播谣言[spread-rumor]];;下面updatetickend传播就是传播给邻居,因为对应两种模式,先定义一个neighbor来暂时存储对应的方式邻居,然后请求邻居设置just-heard?为真就可以了。tospread-rumor;;patchprocedureletneighbornobodyifelseeight-mode?[setneighborone-ofneighbors][setneighborone-ofneighbors4]askneighbor[setjust-heard?true]end更新就是使得刚听到的变成不是刚听到,然后根据hear-rumor函数,更新times-heard,然后通过previous-clique存储下来先前听到谣言群体数量,再更新cliquetoupdateaskpatcheswith[just-heard?][setjust-heard?falsehear-rumorticks]setprevious-cliquecliquesetcliquecountpatcheswith[times-heard0]end下面是着色方案,比较简单,对应color-mode对应不同的按钮。torecolor;;patchprocedureifelsecolor-mode=0[recolor-normal][ifelsecolor-mode=1[recolor-by-when-heard][recolor-by-times-heard]]endtorecolor-normal;;patchprocedureifelsefirst-heard=0[setpcolorred][setpcolorblue]endtorecolor-by-when-heard;;patchprocedureifelsefirst-heard=-1[setpcolorblack][setpcolorscale-coloryellowfirst-heardworld-width0]endtorecolor-by-times-heard;;patchproceduresetpcolorscale-colorgreentimes-heard0world-widthend本文档由netlogo爱好者编,如有不足,请见谅!需要项目合作的可以加我企鹅:2763035721或者有疑问加我企鹅群:530305942如果你觉得对你有用,欢迎请分享者一杯咖啡!

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功