1

我们想添加一个 ConnectionAgent 来监控某个连接PDPRoadModel以支持预订。但是,这些 ConnectionAgent 有CommDevices,需要一个位置才能有用,这意味着设备必须是PDPObjects。

如果我们将它们实现为Vehicle,它们可能会导致与现有车辆的碰撞,我们仍然想模拟碰撞,所以这是不可能的。如果我们将它们实现为Parcels,它们会显示在网格上,这会掩盖实际Parcel的 s,这是我们试图避免的。

由于PDPType对象受到保护,我们无法实现 new PDPType,这意味着我们目前无法正确实现 ConnectionAgent。

4

1 回答 1

0

您可以PDPRoadModel通过不将其添加ConnectionAgent到模型中作为物理实体而只是作为具有特定位置的虚拟通信实体来解决限制。例如,代理可以像这样实现:

public class ConnectionAgent implements CommUser {
  final Point position;

  public ConnectionAgent(Connection<LengthData> c) {
    position = Point.centroid(asList(c.from(), c.to()));
  }

  @Override
  public Optional<Point> getPosition() {
    return Optional.of(position);
  }

  @Override
  public void setCommDevice(CommDeviceBuilder builder) {}
}

如果您想为每个连接设置一个代理,您可以遍历图中的连接,然后创建并将其添加ConnectionAgent到模拟器中。

于 2018-05-15T08:48:40.037 回答