NetLogo新手求助:协助构建简易谣言传播模型及示例代码
Hey there! 刚入门NetLogo就想搞谣言传播模型,这想法超棒的~我给你整个最简易的版本,代码不多但能把核心传播逻辑(简化版的SIR模型)体现出来,你可以跟着改着玩:
极简谣言传播NetLogo模型代码
先放完整代码,之后我给你拆着解释:
; 定义海龟的状态变量:易感(susceptible)、传播者(infected)、免疫(recovered) turtles-own [status] to setup clear-all ; 创建100只海龟,初始都是易感状态(白色) create-turtles 100 [ set status "susceptible" set color white setxy random-xcor random-ycor ] ; 随机选1只海龟当初始谣言传播者(红色) ask one-of turtles [ set status "infected" set color red ] reset-ticks end to go ; 让传播者行动:随机移动,然后尝试传播谣言 ask turtles with [status = "infected"] [ fd 1 ; 给周围3个单位内的易感者传播谣言,传播概率100%(你可以改成0.5这类数值调难度) ask turtles in-radius 3 with [status = "susceptible"] [ set status "infected" set color red ] ; 传播者过10个tick后变成免疫状态(灰色,不再传播) if ticks mod 10 = 0 [ set status "recovered" set color gray ] ] ; 让易感者和免疫者随机移动 ask turtles with [status != "infected"] [ fd 1 ] tick end
代码拆解说明
- 状态变量:用
turtles-own [status]给每只海龟加了个状态属性,区分三种角色:- susceptible(易感):还没听到谣言,白色
- infected(传播者):正在传谣言,红色
- recovered(免疫):听过谣言不再传,灰色
- setup过程:清空画布、创建海龟、选初始传播者,准备好模拟的初始状态
- go过程:核心运行逻辑:
- 传播者移动+接触周围易感者,把他们变成传播者
- 传播者每隔10个tick自动“免疫”,停止传播
- 其他海龟正常随机移动
可以自己折腾的扩展点
- 把传播概率改成非100%:比如把传播逻辑改成
if random-float 1 < 0.7 [ask turtles in-radius 3 with [status = "susceptible"] [...]],意思是70%的概率成功传播 - 调整传播范围:把
in-radius 3的3改成更大或更小的数 - 给免疫状态加过期时间:比如免疫一段时间后又变回易感,模拟“遗忘谣言”
- 加界面控件:用滑块控制初始传播者数量、传播概率、移动速度这些参数,不用改代码就能调
内容的提问来源于stack exchange,提问作者שני גולדשטיין
相关产品推荐
相关产品推荐

