成对的乌龟一起移动 netlogo

paired turtles moving together netlogo

我正在创建一个模型,我有 100 只海龟,我让它们合作。然后我希望他们保持伙伴关系并转移到我随机制作的 50 个黄色补丁中的任何一个,每个补丁只有一对。我该怎么做?

补丁的设置代码是:

  to setup
  clear-all
  ask patches [ set pcolor 3 ]
  ask n-of 50 patches [ set pcolor yellow ]
 .
 .
 .
 reset-ticks
 end

伙伴关系代码是:

 to find-partners
 let singles turtles with [partner = nobody]
 if not any? singles [ stop ]

 ask singles  
 [  lt random 50 
 rt random 50
 fd 1 ]

 ask turtles  
 [
 if (partner = nobody) and (any? other turtles-here with [partner = nobody])
 [ set partner one-of other turtles-here with [partner = nobody]

  ask partner [
    set partner myself
]]]
  end

一种方法是给补丁一个 patches-own 变量,例如 "occupied?",在 setup 过程中设置为 "FALSE"。为简单起见,使用像 "nested?" 这样的 turtles-own 这样它们就可以知道它们是否在它们的 "nest-site." 然后当海龟配对时,它们都可以声明一个未被占用的补丁作为它们的 "nest-site,"将其设置为已占用,然后前往该补丁。

鉴于以下变量已在您的 setup 中正确设置:

turtles-own [partner nested? nest-site ]
patches-own [occupied?]

您可以按原样保留您的 find-partners 程序和找巢程序。例如:

to find-nest
  ask turtles with [ partner != nobody and nested? = false ] [
    if nest-site = nobody [
      set nest-site min-one-of (patches with [pcolor = yellow and occupied? = false]) [distance myself ]
      ask partner [ 
        set nest-site [nest-site] of myself
      ]
      ask nest-site [
        set occupied? true
      ]
    ]
    face nest-site 
    fd 1
    if patch-here = nest-site [
      move-to nest-site
      set nested? true
    ]
  ]
end

此代码中的海龟已经配对了 select 最近的未被占用的黄色斑块,选择它作为它们的巢穴,然后在接下来的刻度中走向它。 Here 是整个简单版。