netlogo的基本案例展示
·
以下是 NetLogo 的基础用法 与 典型案例 的详细指南,结合操作步骤和代码示例,帮助您快速上手并构建多主体模型:
一、基础用法:从安装到建模
1. 安装与启动
- 下载:访问 NetLogo官网,根据系统选择对应版本(推荐 6.3.0,6.2.1版本可能存在模型库兼容性问题,需将语言设置为中文解决)。
- 安装:
- Windows/macOS:运行安装包,按提示完成安装(需确保Java环境已更新)。
- Linux:解压下载的压缩包,执行
netlogo.sh。
- 在线版:直接访问 NetLogo Web,无需本地安装即可运行简单模型。
2. 界面与核心组件
- 视图(View):显示海龟(可移动主体)和补丁(网格环境),支持自定义颜色、形状和缩放。
- 代码编辑区:编写模型逻辑(NetLogo语言,类Lisp语法)。
- 界面元素:
- 按钮(Buttons):绑定初始化(
setup)和运行(go)过程。 - 滑动条(Sliders):动态调节参数(如海龟数量、移动速度)。
- 监视器(Monitors):实时显示全局变量(如当前时间步、海龟数量)。
- 按钮(Buttons):绑定初始化(
3. 核心语法与操作
- 主体类型:
- 海龟(Turtles):通过
create-turtles <数量>生成,如create-turtles 100。 - 补丁(Patches):默认网格(如50×50),坐标为
(pxcor, pycor),可通过ask patches with [ 条件 ] [ 命令 ]操作。
- 海龟(Turtles):通过
- 基础命令:
- 移动:
fd 1(前进1步)、rt 90(右转90度)。 - 条件判断:
if pxcor > 10 [ set color red ](若x坐标>10,设为红色)。 - 循环:
repeat 5 [ fd 1 ](重复5次前进1步)。
- 移动:
- 变量定义:
- 海龟变量:
turtles-own [ energy ](每只海龟的能量值)。 - 补丁变量:
patches-own [ resource ](每个补丁的资源量)。 - 全局变量:
globals [ simulation-time ](仿真总时间)。
- 海龟变量:
4. 建模流程示例(随机漫步)
-
初始化:
to setup clear-all ; 清除现有主体 create-turtles 50 [ ; 创建50只海龟 set color blue ; 颜色设为蓝色 setxy random-xcor random-ycor ; 随机分布在网格中 ] ask patches [ set pcolor green ] ; 补丁设为绿色 end -
行为规则:
to go ask turtles [ rt random 360 ; 随机转向 fd 1 ; 前进1步 if pxcor > 10 [ set color red ] ; 超过x=10时变红 ] tick ; 时间步+1 end -
界面设置:
- 添加“设置”按钮绑定
setup,“运行”按钮绑定go。 - 添加监视器
turtle-count和tick。
- 添加“设置”按钮绑定
-
运行与观察:
- 点击“设置”初始化,点击“运行”观察海龟随机移动,部分进入红色区域。
二、典型案例:从简单到复杂
案例1:捕食者-猎物模型(生态模拟)
目标:模拟狼(捕食者)与羊(猎物)的种群动态。
核心规则:
- 羊:吃草(绿色补丁)增加能量,能量耗尽死亡。
- 狼:追逐羊,捕获后增加能量,未捕获时消耗能量。
- 草:被吃掉后20步再生。
关键代码:
turtles-own [ type energy ] ; type=0(羊),type=1(狼)
patches-own [ grass grow-time ] ; grass=1表示有草
to setup
clear-all
create-turtles 50 [ set type 0 set energy 100 ] ; 50只羊
create-turtles 10 [ set type 1 set energy 200 ] ; 10只狼
ask patches [ set grass 0 set grow-time 0 ]
ask n-of 20 patches [ set grass 1 ] ; 生成20个草补丁
end
to go
; 羊的行为
ask turtles with [ type = 0 ] [
move-to one-of neighbors4 ; 随机移动
if patch-here [ grass ] = 1 [ ; 吃到草
set energy energy + 50
set patch-here grass 0
if random 100 < 10 [ reproduce ] ; 10%繁殖概率
]
set energy energy - 5
if energy <= 0 [ die ]
]
; 狼的行为
ask turtles with [ type = 1 ] [
let nearest-sheep min-one-of turtles with [ type = 0 ] [ distance myself ]
if nearest-sheep != nobody [ ; 发现羊
face nearest-sheep
fd 1
if [ type ] of patch-here = 0 [ ; 捕获羊
set energy energy + 100
ask patch-here [ die ]
if random 100 < 5 [ reproduce ] ; 5%繁殖概率
]
]
set energy energy - 10
if energy <= 0 [ die ]
]
; 草再生
ask patches [
if grass = 0 and grow-time >= 20 [ set grass 1 set grow-time 0 ]
set grow-time grow-time + 1
]
tick
end
观察结果:
- 红色狼追逐蓝色羊,草被吃掉后再生,种群数量呈现周期性波动。
- 可调整繁殖概率和能量消耗参数,观察生态平衡变化。
案例2:交通拥堵模拟(路口信号灯控制)
目标:探究红绿灯时长对路口通行效率的影响。
核心规则:
- 车辆(海龟)沿道路(灰色补丁)行驶,遇红灯停止,绿灯通行。
- 车辆间距过近时减速,避免碰撞。
关键步骤:
-
初始化道路:
ask patches with [ ycor = 0 and abs(pxcor) <= 50 ] [ set pcolor gray ] ; 横向道路 ask patches with [ xcor = 0 and abs(pycor) <= 50 ] [ set pcolor gray ] ; 纵向道路 ask patch 0 0 [ set pcolor red ] ; 路口设为红色 -
车辆生成与移动:
to go ; 切换红绿灯(每20步) if tick mod 20 = 0 [ ask patch 0 0 [ set pcolor ifelse pcolor = red [ green ] [ red ] ] ] ; 车辆移动 ask turtles [ let next-patch ahead 1 if next-patch = patch 0 0 [ ; 到达路口 if pcolor of patch 0 0 = red [ stop ] ; 红灯停 ] else [ fd 1 ] ; 非路口正常行驶 ] ; 生成新车辆 if random 10 < 1 [ create-turtles 1 [ setxy -50 0 set heading 0 ] ; 横向入口 create-turtles 1 [ setxy 0 -50 set heading 90 ] ; 纵向入口 ] tick end
观察结果:
- 无红绿灯时路口频繁堵塞,引入红绿灯后车辆有序通过。
- 可通过调整红绿灯时长(如
if tick mod 30 = 0)优化通行效率。
案例3:舆论扩散模型(社会传播)
目标:模拟观点在人群中的从众效应。
核心规则:
- 个体(海龟)初始观点随机(0或1),每步观察邻居观点,若多数为1则转为1。
关键代码:
turtles-own [ opinion ]
to setup
clear-all
create-turtles 1000 [ ; 1000个个体
set opinion random 2
set color ifelse opinion = 0 [ blue ] [ red ]
setxy random-xcor random-ycor
]
end
to go
ask turtles [
let neighbors-opinions [ opinion ] of neighbors4
let count-1 count neighbors-opinions with [ ? = 1 ]
if count-1 > 2 [ ; 超过半数邻居为1则改变观点
set opinion 1
set color red
]
]
tick
end
观察结果:
- 初始随机分布的红色个体可能逐渐扩大,最终形成大面积同色区域,体现“从众效应”。
- 可调整邻居数量(如
neighbors8)或阈值(如count-1 > 3),观察传播速度变化。
三、进阶技巧与资源
1. 内置模型库(快速学习)
- 访问路径:
File → Model Library,包含100+预建模型,例如:- 生物学:病毒传播(Virus)、森林火灾。
- 社会学:隔离模型(Schelling Model)、谣言扩散。
- 物理学:元胞自动机(康威生命游戏)。
- 使用方法:直接打开模型,修改参数运行,查看代码学习逻辑。
2. 数据收集与可视化
- 实时监控:
- 用 监视器 显示全局变量(如
turtle-count)。 - 用 图表(Plots) 绘制趋势(如种群数量随时间变化)。
- 用 监视器 显示全局变量(如
- 数据导出:
to log-data file-open "results.csv" append? true [ file-write tick "," turtle-count cr ; 写入时间步和海龟数量 ] end
3. 连续空间与3D建模
- 连续坐标:海龟可在任意实数坐标移动(如
setxy 5.5 3.2)。 - 3D视图:需启用扩展(如
3D NetLogo),支持立体环境(如无人机群)。
4. 错误处理与调试
- 语法检查:NetLogo实时高亮错误代码,帮助快速定位问题。
- 探针工具:点击海龟或补丁查看其属性(如
energy)。 - 控制台输出:用
show <变量>在控制台打印数据。
四、总结与学习路径
- 适用场景:教育演示、科研建模、快速原型验证(如生态、交通、社会系统)。
- 学习建议:
- 新手入门:从内置模型库入手,运行并修改示例。
- 基础掌握:学习海龟-补丁交互语法(
ask、with)。 - 进阶实践:尝试复杂案例(如交通流优化),结合数据收集分析。
通过以上步骤,您可逐步掌握NetLogo的多主体建模能力,探索微观规则如何涌现出宏观复杂现象。
更多推荐


所有评论(0)