NetLogo:结合并形成一只新龟

时间:2015-09-02 13:32:23

标签: netlogo

我目前正在学习NetLogo,我需要帮助。在我的模型中,我有相同大小的10只龟随机移动。当两只或更多只乌龟在同一个斑块上时,它们将结合并组成一只双倍大小的新乌龟。以这种方式,主要规则是max。 5只乌龟可以相互结合。这种形成将持续到将有2只海龟(每只包含5只海龟)留下。

我创造了海龟并使它们随机移动,但我无法将它们组合起来。你能给我一个办法吗?任何帮助赞赏。问候。

编辑:我尝试了“in-radius”命令失败。 5-5龟的分布(从代码中可以看出,它们代表H2O分子)对于系统定义至关重要,并且模型中不允许任何其他分布。

详细地说,当随机移动的2个H2O分子在同一个贴片上相遇时,它们将结合形成一个新的分子(2H2O)。主要规则如前所述,最大值。 5个分子可以结合,其结束形成5H2O。由于最初系统中有10H2O分子,最后会有2个5H2O分子。

我试图实现的代码如下,

breed [h2o-molecules h2o]

to setup
  clear-all
  reset-ticks

  create-h2o-molecules h2o-num [
    set color 105
    set sIze .5
    set shape "circle"
    setxy random-xcor random-ycor
    set pen-mode "up"
  ]
end

to setup-patches
  ask patches [set pcolor 0]
  show count turtles
end

to set-label
  ask patches [
    ifelse count turtles-here > 0 
    [set plabel count turtles-here]
    [set plabel ""]
  ]
end

to move-h2o-molecules
  ask h2o-molecules [
    let dice random 1000
    let change (dice - 1)
    forward 2
    set HEADING (HEADING + change * 2)
  ]
end

to go 
  setup-patches
  move-h2o-molecules

  ask turtles [rt random 1
    fd 0.3]
  set-label

  tick
end

感谢您的时间和耐心。的问候,

1 个答案:

答案 0 :(得分:1)

使用turtles-here

ask patches不需要turtles-here(就像设置补丁标签一样)。如果被乌龟调用,该函数也会运行(当有比海龟更多的补丁时效率更高)。但是,如果您不想包含呼叫乌龟,请注意使用other turtles-here

合并程序

如果你宣布 品种宣言后的海龟变量:

h2o-molecules-own [
  turtles-inside
]

(在create-h2o-molecules

中设置变量值

和您的组合限制max-inside作为全局变量(使用滑块小部件,默认值为5) 然后,合并程序可能如下所示:

to combine  ;; turtle procedure
  ; take one turtle from the same patch as a target
  ; which has turtles-inside low enough to combine with
  let target one-of other h2o-molecules-here with 
    [turtles-inside <=  max-inside - [turtles-inside] of myself]     
  if target != nobody                        
  [ 
    set turtles-inside turtles-inside + 
      [turtles-inside] of target            ;; increase turtles-inside 
    ask target [ die ]                      ;; kill the target
    set size sqrt turtles-inside            ;; increase size
  ]  
end

停止

您可以通过

停止模拟
if not any? h2o-molecules with [turtles-inside < max-inside] [ stop ]

注释

用于选择目标乌龟的条件是使用turtles-hereother和最大约束,将其与目标内部的乌龟和乌龟内部的海龟之和进行比较(使用{{1功能)。