Netlogo:不平等在foreach

时间:2015-12-15 05:19:09

标签: list foreach netlogo inequality

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

例如,如果红乌龟的数量> = 5,然后[做某事]。 没有代码的错误消息,但我发现在满足条件之前执行了[执行某些操作]代码。例如,当乌龟的数量为1或4时执行。我还发现有时候它达到> = 5,[执行某些操作]代码未执行。

以下是代码

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)它也不起作用。

任何人都可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:2)

您可以在代码顶部使用以下内容将值类型设置为代理变量:

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

UPDATE for debugging 我添加了三行,它们将输出用于调试的密钥信息。它们标有星号(*)。添加这些行(不带*)并查看输出。