【问题标题】:NetLogo: distance refering agentNetLogo:距离参考代理
【发布时间】:2017-03-24 10:04:11
【问题描述】:

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

【问题讨论】:

    标签: distance netlogo


    【解决方案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)
    ]
    

    【讨论】:

      【解决方案2】:

      哈哈,没想到海龟的细节,确实……^^ 无论如何,这是一个例子,不是我的品种的实际名称,所以没问题,但感谢您注意到它!

      关于问题本身,我也认为myself 可以,所以我会保持这样,但现在更有信心:D

      谢谢尼古拉斯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多