NetLogo:距离引用代理

时间:2017-03-24 10:04:12

标签: distance netlogo

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

2 个答案:

答案 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

谢谢尼古拉斯!