我们想要添加一个ConnectionAgent来监控与PDPRoadModel
的某个连接,以支持预订。但是,这些ConnectionAgent具有CommDevice
个,这需要一个位置才能有用,这意味着设备必须是PDPObject
。
如果我们将它们实现为Vehicle
,它们可能会导致与现有车辆的碰撞,我们仍然希望模拟碰撞,所以这是不可能的。如果我们将它们实现为Parcel
s,它们会显示在网格上,它会覆盖实际的Parcel
,这是我们应该避免的。
由于PDPType
对象受到保护,我们无法实现新的PDPType
,这意味着我们目前无法正确实施ConnectionAgent。
答案 0 :(得分: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
并将其添加到模拟器。