您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页NetLogo模型讲解:谣言模型

NetLogo模型讲解:谣言模型

来源:抵帆知识网
本文档由netlogo爱好者编,如有不足,请见谅! 模型位置 Sample ->Social Science->Rumor Mill

谣言传播是社会学里研究比较热的点,利用netlogo对谣言传播过程模拟研究可以方便的实现。

原语学习:

1. all?

all? agentset [reporter] 如果主体集合(agentset)中的所有主体对给定的报告器(reporter)都返回true,则返回true。否则返回false。

给定的报告器必须对每个主体都返回布尔值(true或 false),否则发生错误。 2. scale-color

scale-color color number range1 range2 返回明暗与number成正比的color色。

number是一个主体变量,但是必须是数字型。

如果range1 < range2, number越大,颜色越亮。如果range > range2,则相反。 如果number < range1,则为最暗的color色。 如果number > range1,则为最亮的color色。

注意:对明暗无关的颜色,例如green and green + 2一样,使用同样的色谱

本模型概述:本模型对谣言传播弄你,一个人知道了谣言后会告诉和他相近的人(本模型中一个人就是用世界中的瓦片(patch)代替,邻居就是相邻瓦片),以此内推,谣言开始传播。 3. display

引起视图立刻更新。(例外:如果用户使用速度滑动条快进模型,更新可能被跳过)一般和鼠标点击事件一起使用。

模拟界面:

程序中先要有一个谣言发起者,就是瓦片中设立一个红色的瓦片,作为谣言的发起者,模型中有三种方式发起谣言( 三个按钮):设置一个(setup-one),随机设置几个(setup-random)和使用鼠标左键点击设置(spread-rumor-with-mouse)

globals [

color-mode ;; 0 = normal, 1 = when heard, 2 = times heard clique ;; how many patches have heard the rumor

previous-clique ;; value of clique from last tick, for use in the \"successive\" plots ]

设置三个全局变量(globals用来定义全局变量),color-mode 对应界面上三种着色类型:color:normal,color:when heard , color:times heard

clique :英文直译就是初级群体,用来记录多少人(这里用瓦片表示)听到谣言

previous-clique:记录上一次tick(netlogo内置计时器,和现实时间不同)的初级群体,用来画图

patches-own [

times-heard ;; tracks times the rumor has been heard first-heard ;; clock tick when first heard the rumor

just-heard? ;; tracks whether rumor was heard this round -- resets each round ]

patches-own 用来定义patch拥有的变量,times-heard 记录听到多少次了,first-heard用来记录第一次听到谣言的tick,just-heard?

;;; setup procedures

to setup [seed-one?] clear-all ;;清除所有局部变量,一般这个都要写在setup开始第一行 set color-mode 0 ;;设置默认着色方法 set clique 0 ;;全局变量clique 初始群体为0 ask patches ;;设置所有瓦片(这里就是模拟现实事件的人) [ set first-heard -1 set times-heard 0 set just-heard? false recolor ];;recolor是下面写的函数 ifelse seed-one? [ seed-one ] [ seed-random ] reset-ticks ;;一般计时器清除放最后 end

看一下这个setup初始化例程,我们可以注意到,这个和我们平常看到的不一样,一般情况下就直接是setup,这里使用了个参数 [seed-one?] ,例程里使用参数用中括号括起来,我们前面说到有三种方式发起谣言,带“?”结尾的参数取值一般就取true 和 false,说明还有一种方式没有使用这个setup例程。

到程序运行界面,右键选中setup-one 按钮,点编辑,可以看到它的指令是 setup true,说明传递了一个true 到seed-one?里。同理,在setup-random 按钮的指令是 setup false,说明传递了个false。

to seed-one ;;让中心瓦片[0 0]发起谣言 ;; tell the center patch the rumor ask patch 0 0

[ hear-rumor 0 ] end

to seed-random ;;随机选取一定瓦片

;; seed with random number of rumor sources governed by init-clique slider ask patches with [times-heard = 0] [ if (random-float 100.0) < init-clique [ hear-rumor 0 ] ] end

发起谣言两种方式,这里面又调用了下面的一个例程函数 hear-rumor [when] 听到谣言,如果第一次听到,记录first-heard 的when(tick),设置just-heard?为true

,然后听到次数times-heard 听到的次数加1,然后重新着色recolor, 如果不是第一次,那

就直接记录times-heard和着色就可以了。 to hear-rumor [when] ;; patch procedure if first-heard = -1

[ set first-heard when set just-heard? true ]

set times-heard times-heard + 1 recolor ; end

另外一种模式是根据鼠标单击产生谣言

这里要注意,用到鼠标单击,如果不使用display,视图不会马上更新

to spread-rumor-with-mouse if mouse-down?

[ ask patch mouse-xcor mouse-ycor [ hear-rumor ticks ] display ] end

下面看看go例程 to go

if all? patches [times-heard > 0] [ stop ] ;;如果所有的瓦片都听到了谣言,那就停止 ask patches

[ if times-heard > 0 ;;如果听到谣言次数大于1,那么就传播谣言 [ spread-rumor ] ] ;;下面 update tick end

传播就是传播给邻居,因为对应两种模式,先定义一个neighbor来暂时存储对应的方式邻居,然后请求邻居设置just-heard?为真就可以了。

to spread-rumor ;; patch procedure let neighbor nobody ifelse eight-mode?

[ set neighbor one-of neighbors ] [ set neighbor one-of neighbors4 ] ask neighbor [ set just-heard? true ] end

更新就是使得刚听到的变成不是刚听到,然后根据hear-rumor函数,更新times-heard,然后通过previous-clique存储下来先前听到谣言群体数量,再更新clique

to update

ask patches with [just-heard?] [ set just-heard? false hear-rumor ticks ] set previous-clique clique

set clique count patches with [times-heard > 0] end

下面是着色方案,比较简单,对应color-mode对应不同的按钮。 to recolor ;; patch procedure ifelse color-mode = 0 [ recolor-normal ] [ ifelse color-mode = 1

[ recolor-by-when-heard ] [ recolor-by-times-heard ] ] end

to recolor-normal ;; patch procedure ifelse first-heard >= 0 [ set pcolor red ] [ set pcolor blue ] end

to recolor-by-when-heard ;; patch procedure ifelse first-heard = -1 [ set pcolor black ]

[ set pcolor scale-color yellow first-heard world-width 0 ] end

to recolor-by-times-heard ;; patch procedure

set pcolor scale-color green times-heard 0 world-width end

本文档由netlogo爱好者编,如有不足,请见谅! 需要项目合作的可以加我企鹅:2763035721 或者有疑问加我企鹅群:530305942

如果你觉得对你有用,欢迎请分享者一杯咖啡!

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务