【问题标题】:AnyLogic - is there a way to convert a Node from network.nodes() to Rectangular Node?AnyLogic - 有没有办法将节点从 network.nodes() 转换为矩形节点?
【发布时间】:2020-08-19 23:40:57
【问题描述】:

我希望在模拟启动时将网络中的每个矩形节点动态添加到特定集合中。我这样做是因为我将拥有 1000 多个节点并且手动添加它们是不可取的。

每个节点都使用约定命名,并以“lane”或“grid”开头。

如果它是“车道”,那么它会添加到一个集合中,而“网格”会添加到另一个集合中。

目前我正在使用代码:

for (Node n : network.nodes()) {
    String layoutIdentifier = n.getName().split("_")[0];
    if (layoutIdentifier.equals("lane")) {
        laneNodes.add(n);
        traceln(n);
         //Lane newLane = add_lanes(n);
    } else if (layoutIdentifier.equals("grid")) {
        gridNodes.add(n);
    }
}

这工作正常,并将它们作为节点添加到集合中,但我真的很想将它们添加到矩形节点的集合(它们就是这样),因为我需要在我的代理中使用这种类型。

我尝试了这段代码(将 Node 更改为 RectangularNode):

for (RectangularNode n : network.nodes()) {
    String layoutIdentifier = n.getName().split("_")[0];
    if (layoutIdentifier.equals("lane")) {
        laneNodes.add(n);
        traceln(n);
         //Lane newLane = add_lanes(n);
    } else if (layoutIdentifier.equals("grid")) {
        gridNodes.add(n);
    }
}

但得到错误 类型不匹配:无法从元素类型 Node 转换为 RectangularNode。位置:pbl_congestion_simulation/Main - 代理类型

有没有办法将 Node 转换为 RectangularNode?还是一种更好的方法来遍历网络中的所有节点并将它们作为矩形节点添加到相同的集合中?

我可以看到节点被引用为 com.anylogic.engine.markup.RectangularNode@293cc7d0 所以希望可以访问 RectangularNode 部分。

非常感谢。

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    您的第一个代码很好,您可以拥有一个包含 RectangularNode 类型元素的集合,您唯一需要更改的代码是:

    laneNodes.add((RectangularNode)n);
    gridNodes.add((RectangularNode)n);
    

    您可以将节点转换为矩形节点,但反过来不行,这就是您的第二个代码不起作用的原因。

    如果网络上有其他节点,不是矩形节点,则可以添加如下内容:

    if(n.getClass().equals(RectangularNode.class))
         laneNodes.add((RectangularNode)n);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2021-11-18
      相关资源
      最近更新 更多