您好我会尽快做到 我有一个房间有一个扩大的火,我有两个出口,我想要做的是告诉代理人,如果一个门被火阻挡,然后去另一个。我想出了类似的东西但没有结果。
to doorblock
show count neighbors with [pcolor = 77] ;; the patch color of the two doors
end
;;to go
ask smarts [ ;;smarts are the agents inside the room that need to get oout
if [ doorblock > 5 ]
[ set target one-of sexits]] ;;sexits is the other door
有人有更好的主意吗?感谢
答案 0 :(得分:2)
好的,所以如果我理解正确,你希望你的代理人看看他们当前目标的门,检查那扇门周围是否有超过5个消防员,并选择另一个目标门,如果这是情况下。
如果您的消防员只是红海龟(没有特定品种),您可能需要这样的东西:
ask smarts [
if count ([ turtles-on neighbors ] of target) with [ color = red ] > 5 [
if-else ([ breed ] of target = sexits )
[ set target one-of nexits ]
[ set target one-of sexits ]
]
]
这里的关键原语是:
neighbors
,它会为您提供围绕乌龟的补丁(在这种情况下,target
附近的补丁)turtles-on
,它将为您提供补丁集成员上的 turtles (此处,这将是{{1}补丁上的海龟} neighbors
)with
允许您只从代理集中获取满足某些条件的海龟(在这里,我们使用它来获得代表火灾的红海龟)。您还应该尝试理解of
原语。
我猜你想要分配一个与前一个不同的新目标(如果北是朝南,如果是南,则为南),但这取决于你。