我正在做一个小型大学项目。其中我必须维持2种状态的海龟。 1.分散 2.探索 分散: 在分散时,当开始时所有的海龟(20只龟)都在0,0时它们应该相互分散。每只乌龟周围都有2个补丁,其他乌龟不应该在那个半径范围内。所有的海龟都应该走远,直到它们都达到这个半径。然后将调用其他行为,即探索。
探索: 在探索中,他们必须探索世界并避免不同类型的障碍。当两只乌龟在上述半径上彼此接近时,则状态应改变为分散。
我有避免障碍,移动速度以及分散和探索下的所有其他个人行为的程序。但我不知道如何在一次模拟中加入所有这些。
答案 0 :(得分:2)
目前尚不清楚您是否真的需要维持龟状态,因为在任何情况下您都必须反复检查其他龟。但既然你说你想要那个,你就可以使用turtles-own
。例如:
turtles-own [state]
to setup
ca
crt 20
end
to go
ask turtles [set-state]
ask turtles [move]
end
to set-state ;;turtle proc
ifelse (any? other turtles in-radius 2) [
set state "disperse"
] [
set state "explore"
]
end
to move ;;turtle proc
if (not member? state ["disperse" "explore"]) [
error "unknown state"
]
if (state = "disperse") [
disperse
]
if (state = "explore") [
explore
]
end
to disperse ;;turtle proc
move-to one-of patch-set [neighbors] of neighbors
end
to explore
move-to one-of neighbors
end
答案 1 :(得分:1)
您可能想看看Moore machine和Automata,NetLogo可以很好地应对这些问题。
Moore机器可以看作是一组相互交互的5个元素,在这个特定的例子中,开始状态(S0
)将是Dispersing。在NetLogo中,您可以使用接收字符串的单词run。您必须通过检查乌龟的实际状态来创建一个返回字符串(例如"explore"
)的过程。
你当然可以使用@Alan的例子,我只是略过了,我相信它很好。
以下是基于摩尔机器的my example。它是西班牙语,但想法是一样的。