1

它应该是一个简单的代码,但我不知道为什么它不能正常工作。如果满足条件,我想将非白色乌龟的颜色改回白色。我把不平等作为条件。

例如,如果红龟的数量> = 5,则[做某事]。代码没有错误消息,但我发现在满足条件之前执行了 [do something] 代码。比如turtle数量为1或4的时候执行。而且我也发现有达到>=5的时候,[do something]代码没有执行。

下面是代码

to seize-value
  ask consumers [set type-of-value ( list blue red green) ] 
  foreach type-of-value [
    if count consumers with [color = ?] > = 5 [ 
        let z consumers with [color = ?]
          ask z [ set color white ]
          ask consumers with [color = white] [set value? false]
          ask one-of cocreation-patches [ sprout 1 [gen-prevalue]]
    ]]
end

我试过使用单一颜色,而不是颜色列表(没有 - foreach)它也不起作用。

有人能帮忙吗?

谢谢

4

1 回答 1

3

您在代码顶部有类似以下的内容来将值类型设置为代理变量:

breed [ consumers consumer ]
consumers-own [ type-of-value ]

但是,您将其视为代码中的全局变量。首先,您说ask consumers [set type-of-value ( list blue red green) ]将名为 type-of-value 的 AGENT 变量设置为颜色列表。但是您ask []在开始foreach.

除非消费者有不同的颜色列表,否则您真正想要的是更像这样的东西(未经测试)。请注意,我还删除了您对同一代理集的多次创建(为了提高效率):

globals [ type-of-value ]

to setup
  clear-all
  ...
  set type-of-value ( list blue red green)
  ...
  reset-ticks
end

to seize-value
*type "seize-value on tick " print ticks
  foreach type-of-value
  [ let changers consumers with [color = ?]
*print ?
*print count changers
    if count changers >= 5
    [ ask changers
      [ set color white
        set value? false
      ]
      ask one-of cocreation-patches [ sprout 1 [gen-prevalue] ]
    ]
  ]
end

用于调试的更新我添加了三行,它们将输出用于调试的关键信息。它们标有星号 (*)。添加这些行(不带 *)并查看输出。

于 2015-12-15T09:56:00.420 回答