0

Netlogo 只提供了四个拓扑选项,它们指示海龟和补丁在到达 netlogo 世界或界面的任何给定边缘时会做什么,即盒子、圆环、水平环绕和垂直环绕......有没有办法调整这些选项,所以只有一个边缘被包裹?或者例如三个边缘被包裹?

4

1 回答 1

2

Nigus-我记得,我永远不会忘记一只柯基犬!无论如何,正如 Jen 提到的,没有内置的,但你可以将它构建到你的海龟运动规则中。例如,使用此设置:

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

如果您希望您的海龟将边界视为封闭,您可以让它们检查它们patch-ahead的移动速度(例如速度为 1,此处)并进行简单的数学运算以查看它们是否“允许”换行边界。要关闭左边界,请尝试:

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

我们应该期望它们最终会被“困”在展开的边界和红墙之间——这正如我们所料,一旦海龟穿过左边界,它们就无法返回:

在此处输入图像描述

于 2018-07-21T00:25:24.330 回答