如何手动调整netlogo界面的换行拓扑?

时间:2018-07-20 17:43:50

标签: netlogo

Netlogo仅提供了四个拓扑选项,这些选项决定了当乌龟和补丁到达netlogo世界或界面的任何给定边缘时的行为,即盒子,圆环,水平环绕和垂直环绕...是否有调整的方法这些选择,以便只包装一条边?还是例如包裹了三个边缘?

1 个答案:

答案 0 :(得分:2)

尼古斯-我记得,我永远不会忘记柯基犬!无论如何,正如Jen提到的那样,它没有内置功能,但是您可以将其内置到乌龟移动规则中。例如,使用以下设置:

to setup
  ca
  crt 10 [ pd ]
  reset-ticks
end

如果您希望乌龟将边界视为封闭状态,则可以让它们根据移动速度(例如速度1,此处为1)检查其patch-ahead并进行简单的数学运算以查看它们是否被“允许”包裹在那个边界。要关闭左边界,请尝试:

to left-closed ; turtle procedure
  ask turtles [ 
    let target patch-ahead 1 
    if  ( ( [pxcor] of target ) - pxcor ) <= 1 [
      fd 1
    ]
  ] 
  tick  
end

要关闭右侧边界,您可以执行相反的操作:

to right-closed ; turtle procedure
  ask turtles [ 
    let target patch-ahead 1 
    if  ( pxcor - ( [pxcor] of target ) ) <= 1 [
      fd 1
    ]
  ] 
  tick  
end

显然,这是一个非常简单的示例,需要做一些工作才能使其适应当前的运动规则。

修改:

要显示此效果,请查看此示例代码。首先,修改后的设置指定乌龟应在何处产卵,并创建红色补丁的“墙”:

to setup
  ca
  ask patches with [ pxcor = 5 ] [
    set pcolor red
  ]
  ask patch -5 0 [
    sprout 10 [
      pd
    ]
  ]
  reset-ticks
end

现在,上面right-closed过程的修改版本将其转变为to-report

to-report closed-border-right? [ target-patch ]
  report ( pxcor - ( [pxcor] of patch-ahead 1 ) ) <= 1 
end

现在,我们应该期望乌龟不能越过红墙。他们也应该不能越过右边界,但是他们应该能够越过左边界。因此,如果海龟可以自由游荡,请使用以下移动过程:

to move-example
  ask turtles [
    rt random 61 - 30
    let target patch-ahead 1
    if closed-border-right? target and [pcolor] of target != red [
      fd 1
    ]
  ]
  tick
end

我们应该期望它们最终会被“包裹”在未包裹的边界和红色墙壁之间,这正如我们所期望的那样发生,一旦海龟穿过左边界,它们就无法返回:

enter image description here