从示例开始:
to move-cars
ask turtles with [ shape = "car"] [
ifelse not can-move? 1
[ die! ]
[ ifelse [ pcolor ] of patch-ahead 1 = red [] [ifelse any? turtles-on patch-ahead 1 [] [ fd 1 ] ]]
]
这是我搬家的程序。汽车只能在前方没有红色补丁或前方没有汽车的情况下移动。
问题我在ifelse的第二部分是由 turtles-on 引起的,因为它会检查所有的海龟。我确实有几个车品种以及其他我不想检查的龟剂。我只想检查乌龟是否特定龟集。在这种情况下
turtles with [ shape = "car" ]
总结一下,我想问一下:(在语言中)前面一个地方是否有任何有车形的海龟?
我尝试了这个但无济于事:
[ ifelse [ pcolor ] of patch-ahead 1 = red [] [ifelse any? turtles-on turtles with [shape = "car"] patch-ahead 1 [] [ fd 1 ] ]]
在一天结束时,我解决了问题,但解决方案是丑陋和多余的。我检查了是否有任何特定品种是前面的一个补丁,因为我知道我可以使用品种 - 。这是:
[ ifelse [pcolor] of patch-ahead 1 = red [] [ ifelse any? carsSN-on patch-ahead 1 or any? carsSE-on patch-ahead 1 or any? carsEN-on patch-ahead 1 or any? carsWS-on patch-ahead 1 or any? carsNS-on patch-ahead 1 or any? carsNE-on patch-ahead 1 or any? carsES-on patch-ahead 1[ ] [ fd 1 ] ] ]
你能否提出更好的方法来使用特定的代理人设置龟?
答案 0 :(得分:3)
您使用with [ shape = "car" ]
的方法存在一些语法问题,否则它应该是一种可行的方法。您无法使用turtles-on turtles
,因为turtles-on
仅在补丁上下文中才有意义。同样,您需要使用原语turtles-on
表明您希望{/ 1}} 特定补丁(补丁提前1)。您的方法的变体是:
of
此外,您是否有任何特定原因在每种情况下使用 ask cars [
if patch-ahead 1 != nobody [
if [pcolor] of patch-ahead 1 != red and [ count turtles-here with [ shape = "car"] ] of patch-ahead 1 = 0 [
fd 1
]
]
]
而不是在if语句中使用!=(就像我在这里所做的那样)?
作为附注,我个人建议不要为不同方向的汽车使用不同的品种。我更喜欢拥有一个可以遵循相同规则的品种。它更清洁,您仍然可以在品种中区分(例如,ifelse
作为起始方向)。它还可以通过只有一个品种来解决你在这里遇到的问题。也就是说,我确信在某些情况下,多个品种会更好,如果它对你的模型有意义那么棒!