2

我有两个品种,我想在设置过程中将它们堆叠成每个补丁 10 个为一组,每个品种单独放置。我尝试过如下简单的表达式,但它们似乎不起作用。关于如何安排这个的任何想法?

ask breed1
  [
    if count breed1 patch-here < 10 and count breed2 patch-here = 0
   [move-to patch-here]
   ]

ask breed2
  [
    if count breed2 patch-here < 10 and count breed1 patch-here = 0
   [move-to patch-here]
   ]

更新:

这段代码应该可以工作,但仍然不能满足我的要求。感谢 Seth 指出模型库示例代码。它部分起作用,它确实集中了一些海龟,但仍然有混合品种种群的斑块。我怀疑在 go 过程或某种循环中它可能会起作用,但在 setup 过程中它没有达到它应该达到的效果。

to concentrate

  ask breed1
  [
    let like-patches patches with [ any? breed1-here and not any? breed2-here]
    if any? like-patches
      [if count breed1-here < 10  
        [let target one-of like-patches
        face target
        move-to target ]  ]
  ] 

  ask breed2
  [
    let like-patches patches with [ any? breed2-here and not any? breed1-here]
    if any? like-patches 
    [if count breed2-here < 10     
      [let target one-of like-patches
        face target
        move-to target ]]

  ] 

如果我为每个品种创建了一个补丁网格,那么这行简单的代码行似乎可以部分工作,因此它们从一开始就在空间上是分开的:

ask breed1
  [
    if count breed1-here > 10
    [move-to one-of patches with [count breed1-here >= 1]]
   ]

  ask breed2
  [
    if count breed2-here > 10
    [move-to one-of patches with [count breed2-here >= 1]]
   ]
4

2 回答 2

1

您似乎想到了patch-here会以某种方式引用您可能希望乌龟站立的所有不同可能的补丁?但事实并非如此;它仅指海龟当前站立的单个补丁。所以move-to patch-here什么也做不了(除了将海龟移动到它已经在上面的补丁的中心点)。

您需要添加一些实际尝试不同候选补丁的代码。

我建议在模型库的代码示例部分查看每个补丁示例一只龟。它显示了为每个补丁安排一只海龟的不同可能方法。然后,采用其中一种方法并将其推广以解决您稍微复杂的问题。

更新:

您的新代码肯定更接近解决方案。但它有一个逻辑缺陷。

你写:

let like-patches patches with [ any? breed1-here and not any? breed2-here]

但是如果没有这样的补丁呢?很可能没有。在这种情况下,乌龟会留在原地。

你需要想出一些逻辑来保证海龟会找到新家。(如果你自己安排海龟,你会怎么做?)

于 2013-10-24T00:15:54.560 回答
1

这比我想象的要简单得多!

patches-own [patchc]
to setup
  clear-all
  ask patches [set patchc false]
  ask n-of 30 patches [ sprout 10 [set breed breed1] set patchc true]
  ask n-of 30 patches with [patchc = false][ sprout 10 [set breed breed2] ]
end
于 2013-10-28T03:04:30.873 回答