我是NetLogo的新手,这可能是一个非常明显的问题,但我不知道如何测试我的工作是否正确。
我根据它与品种2(鳄鱼)的距离选择了品种1(龟)的代理商。我希望鳄鱼从它周围的鳄鱼中随机选择一只乌龟,但选择乌龟越近的概率就越大。因此,我使用rnd扩展和距离命令。
我的问题是,如果距离命令是指正确的代理人(即鳄鱼和海龟之间的距离):
ask crocodiles [
let potential_preys turtles in-radius max_distance
let selected_prey rnd:weighted-one-of potential_preys [ (1 - ( distance ? / max_distance ) ) ]
ask selected_prey [
scape
]
]
答案 0 :(得分:1)
在我提出您的问题之前,我注意到您的代码存在另一个问题。
我之前从未意识到这一点,但NetLogo的语义可以让真实的海龟模型变得棘手! (至少涉及其他品种时。)
我的意思是turtles
指的是模型中的所有海龟,无论其品种如何。这意味着,在您的情况下,crocodiles
中包含turtles
,所以当您说:
let potential_preys turtles in-radius max_distance
...鳄鱼可以包含在潜在的猎物中!
解决这个问题很简单,只需选择代表模型中实际海龟的品种的另一个名称,例如:
breed [ tortoises tortoise ]
然后你可以写:
let potential_preys tortoises in-radius max_distance
现在,关于distance
的问题,我想你想要的是到myself
的距离,其中myself
将是选择猎物的鳄鱼。 myself
原语引用您使用它的块的“外部”上下文中的代理,即“调用”代理。
这给你类似的东西:
let selected_prey rnd:weighted-one-of potential_preys [
1 - (distance myself / max_distance)
]
答案 1 :(得分:0)
关于问题本身,我也认为myself
会做,所以我会保持这样,但现在有更高的信心:D
谢谢尼古拉斯!