Netlogo建模求助:实现幼苗基于所在斑块数值的概率死亡逻辑
NetLogo 植物 epizoochory 传播模型修复方案
你需要实现的幼苗死亡逻辑核心是:基于所在斑块的value值计算死亡概率,value越高存活概率越高,死亡概率为 1 - 斑块value,以下是补全并优化后的完整代码:
patches-own [value] breed [hikers hikes] breed [seedlings seedling] hikers-own [hiker-seed] to setup clear-all ask N-of 500 patches [set pcolor red] ask N-of 500 patches [set pcolor blue] ask patches [ if pcolor = blue [set value 0.5] if pcolor = red [set value 0.9] if pcolor = black [set value 0.1] ] create-hikers 10 [ setxy random-ycor random-xcor set size 2 set color yellow set shape "person" set hiker-seed 10 ] reset-ticks end to go ask hikers [drop-seeds] ask seedlings [chance-to-die] tick ; 原代码缺失tick调用,补上才能正常推进时间步 end to drop-seeds ; 原代码此处多余ask hikers,已删除:外层go已经遍历所有hiker调用本过程 if hiker-seed > 0 [ ; 可以用你定义的hiker-seed变量控制单徒步者可携带的种子总数 hatch-seedlings 1 [ set pcolor white set size 2 set shape "plant" ] set hiker-seed hiker-seed - 1 ] end to chance-to-die ; 本过程被ask seedlings调用,直接操作当前幼苗个体即可 let death-prob 1 - [value] of patch-here if random-float 1 < death-prob [ die ] end
关键修改说明
- 修复了
drop-seeds过程的重复遍历问题:原代码在go中已经调用ask hikers [drop-seeds],过程内部不需要再嵌套一次ask hikers,否则会导致单时间步生成的幼苗数量是预期的10倍 - 补全了
chance-to-die过程逻辑:用random-float 1生成0-1区间的均匀随机数,小于死亡概率时幼苗直接销毁 - 补充了
go过程缺失的tick调用:保证模型时间步正常推进 - 新增了
hiker-seed变量的使用逻辑:如果不需要限制种子总数,删除对应判断即可
内容的提问来源于stack exchange,提问作者Trillium
相关产品推荐
相关产品推荐

