首页 > 解决方案 > 一旦前面的海龟离开,如何在指定区域不断孵化海龟?

问题描述

我是新手netlogo 用户。最近,我正在尝试开发一个模型来模拟航站楼区域下的空中交通流量。现在我可以引导一架飞机着陆,我想不断引导更多的飞机进入终端区域。我的想法是在入口点周围定义一个区域(名为 spawnpool),如图所示。当前面的飞机离开该区域时,我孵化了一架新飞机进入。如果“生成池”中有任何飞机,则不应再孵化任何飞机。

在 OP 中显示 PNG

但我不确定如何正确实现这个想法。如图所示,第一架飞机离开“spawnpool”区域后。出现大量飞机,我不确定这个错误是由于熟练程度不足或不适合此目的的想法。真诚地为这个问题寻找一些见解。

to setup-spawnpool
  ask patches
  [set spawnpool? (pxcor > -8.4  and pxcor < -5.4 and pycor < 5.8 and pycor > 
3.8 )  ]
end


to new-aircraft-approaching0
 ask aircrafts [
    while [spawnpool? = false ]
 [hatch-aircrafts 1
      [ set color black 
        set size 0.7
        setxy -7.4 4.8
        route-check-02]]]
end

标签: netlogo

解决方案


好的,你的问题是你有很多补丁,每个补丁都有 spawnpool?设置为真。然后,您的while声明要求每架飞机检查patch它是否恰好位于该补丁是否已将 spawnpool 设置为 true。所以他们不断地孵化新飞机。你真正想做的是在没有生成池的情况下制造一架新飞机?补丁上有一架飞机。这涉及到许多变化:

  1. sprout或者create而不是hatch飞机,这样它就不会继承其父级的属性
  2. 您不应该使用while,因为while在不提前时钟的情况下连续运行
  3. 您需要询问所有补丁是否有飞机

我无法对此进行测试,因为我需要创建品种等才能使模型运行。但是你想要这样的东西:

to setup
  clear-all
  setup-spawnpool
  ...
  reset-ticks
end

to go
  ...
  new-aircraft-approaching0
  ...
  tick
end

to setup-spawnpool
  ask patches
  [set spawnpool? (pxcor > -8.4  and pxcor < -5.4 and pycor < 5.8 and pycor > 3.8 )
  ]
end

to new-aircraft-approaching0
  let aircraft-source patches with [ spawnpool? ]
  if not any? aircrafts-on aircraft-source
  [ ask one-of aircraft-source
    [ sprout-aircrafts 1
      [ set color black 
        set size 0.7
        setxy -7.4 4.8
        route-check-02]
       ]
     ]
   ]
end

推荐阅读