它假设是一个简单的代码,但我不知道为什么它不能正常工作。 如果满足条件,我想将非白龟的颜色改回白色。我把不平等作为条件。
例如,如果红乌龟的数量> = 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)它也不起作用。
任何人都可以帮忙吗?
谢谢
答案 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 我添加了三行,它们将输出用于调试的密钥信息。它们标有星号(*)。添加这些行(不带*)并查看输出。