【问题标题】:agents moving through navigational nodes通过导航节点移动的代理
【发布时间】:2016-10-23 05:58:18
【问题描述】:

我正在尝试让代理在导航节点中移动。这是我的设置:

  1. 代理(比如说人/人)随机分布在空间中。
  2. 节点(只是另一种代理)也随机分布在空间中。
  3. 每个人定义一个目标节点。一个人应该通过导航节点移动到那个目标节点。

这就是我想做的:

  1. 每个代理都向目标节点旋转。
  2. 每个代理都有一个视野范围,如果代理没有找到任何要移动的导航节点,则该范围会增加。

  1. 每个代理移动到最近的导航节点,并再次开始搜索过程。

  2. 当最近的导航节点是目标节点时代理停止。那么,代理到了!

我的问题:

  1. 我使用以下方法设置代理的轮换:

     double r = Math.atan2( targetNode.getY() - this.getY(),
            targetNode.getX() - this.getX());
    
     this.setRotation(r);
    
  2. 我不确定如何在 Anylogic 中对视野范围进行编程。有任何想法吗?

【问题讨论】:

    标签: java anylogic


    【解决方案1】:

    我在攻读博士学位期间也做过类似的事情。

    将多边形节点对象myViewArea 添加到您的代理中,并具有视图区域的初始大小和形状。

    然后,您可以让代理检查他是否“看到”了一个导航节点,方法是使用myViewArea.contains() 方法并检查模型中的所有导航节点。

    如果他没有找到,您可以通过编程方式更改您的 myViewArea(请参阅 Java API)

    希望这会有所帮助。

    【讨论】:

    • 由于某种原因,方法 contains() 不起作用。我的代理一直在旋转,所以我在定义相对坐标时可能做错了。
    • 我尝试实施您的视野范围解决方案,但在获取导航节点方面仍然存在问题。我正在使用此代码来获取折线(agentVision)中的节点:这里是一个示例:dl.getdropbox.com/u/18116710/ExampleVisionPolyLine.alp
    • 最后,我决定直接计算距离和范围,而不是使用 contains 方法。
    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2014-11-24
    相关资源
    最近更新 更多