Loops 循环到Netlogo中的修补程序编号
我试图在Netlogo上模拟空间模式。我已经编写了一个代码,根据用户设置的行数和列数,将景观分成相等的部分。例如,在本例中,3 X 3景观由9个“营地”组成: 我试图为每个营地设置一个不同的plabel,在本例中编号为0到8,以确定这是哪个营地。我尝试过使用循环来设置,但意外的问题正在发生Loops 循环到Netlogo中的修补程序编号,loops,while-loop,netlogo,Loops,While Loop,Netlogo,我试图在Netlogo上模拟空间模式。我已经编写了一个代码,根据用户设置的行数和列数,将景观分成相等的部分。例如,在本例中,3 X 3景观由9个“营地”组成: 我试图为每个营地设置一个不同的plabel,在本例中编号为0到8,以确定这是哪个营地。我尝试过使用循环来设置,但意外的问题正在发生 to set-camp-number let startcol max-pxcor / no-of-cols let startrow max-pycor / no-of-rows let
to set-camp-number
let startcol max-pxcor / no-of-cols
let startrow max-pycor / no-of-rows
let t 1
set camp-number 0
while [ t <= no-of-cols ] [
set a startcol * t
ask patches with [ pxcor <= a and pxcor >= a - startcol ] [
let k 1
loop [
if k > no-of-rows [ stop ]
set b startrow * k
ask patches with [ pxcor <= a and pxcor >= a - startcol and pycor <= b and pycor >= b - startrow ] [
set plabel camp-number ]
set camp-number camp-number + 1
set k k + 1 ]]
set t t + 1 ]
end
设置营地编号
让startcol最大pxcor/cols数量
让startrow max pycor/行数
让t 1
设置营地编号0
而[t行数[停止]
设置b startrow*k
使用[pxcor=a-startcol和pycor=b-startrow]询问补丁程序[
设置plabel营地编号]
设置营地编号营地编号+1
设置k+1]]
设置t+1]
结束
而不是得到我想要的(在这个场景中,每个营地的补丁都将自己标记为0到8),营地编号似乎自己在一个循环中运行,结果是plabel的值非常大
我尝试过其他方法,但这似乎是最容易理解的,但我知道在Netlogo中循环有时会很困难。我尝试实现foreach命令,因为循环似乎是标记补丁的一种非常麻烦的方法(必须有另一种方法吗?),但我被卡住了。我非常感谢你的帮助。谢谢大家! 为什么不直接说let_x pxcor-min pxcor?y型也一样。我认为没有必要传递对自身的引用。这是一个更有效的代码!我对最后一行后面的逻辑有点纠结,但现在这更有意义了!谢谢你,艾伦@马特萨:是的,你可以在这里做。我倾向于编写没有副作用的程序,即使在NetLogo中也是如此。
globals [n-rows n-cols] ; to be set by user in your code
to setup
ca
set n-rows 3
set n-cols 3
ask patches [set plabel category self]
end
to-report category [#patch]
let _colstep world-width / n-cols
let _rowstep int (world-height / n-rows)
let _x [pxcor] of #patch - min-pxcor
let _y [pycor] of #patch - min-pycor
let _rownum int (_y / _rowstep)
let _colnum int (_x / _colstep)
report _rownum * n-cols + _colnum
end