2017-04-25 24 views
0

乌龟上的关键字开始与例如怎么用龟套在的NetLogo

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 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 ] ] ] 

你能否提出更好的方法来使用海龟与特定的代理组?

回答

3

您的方法与with [ shape = "car" ]有一些语法问题,否则它应该是一个可行的方法。您不能使用turtles-on turtles,因为turtles-on在修补程序上下文中才有意义。以同样的方式,您需要指出您需要使用原始号of的特定补丁(补丁提前1)。你的方法的变化是:

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 
     ] 
    ] 
    ] 

此外,有没有你在任何情况下使用ifelse,而不是仅仅使用任何特定的原因=在if语句(像我一样在这里)!?

作为一个侧面说明,我个人建议不要使用不同品种的汽车在不同的方向行驶。我更喜欢有一个可以遵循相同规则的单一品种。它更干净,而且您仍可以在品种内区分(例如,起始方向为turtles-own)。它也可以通过只有一个品种来解决你在这里遇到的问题。也就是说,我敢肯定,在某些情况下,多种品种会更好,如果它对您的模型有意义,那么很好!

+0

前面补丁1'0'''''[count turtles-here with [shape =“car”]]运行良好...感谢您的帮助 – scagbackbone