Rinsim: добавьте еще один объект PDPObject, кроме Parcel, Depot или Vehicle - PullRequest
0 голосов
/ 15 мая 2018

Мы хотим добавить ConnectionAgent, который отслеживает определенное соединение с PDPRoadModel для поддержки резервирования. Тем не менее, эти агенты Connection имеют CommDevice s, которые требуют позиции, чтобы быть полезными, что означает, что устройства должны быть PDPObject s.

Если мы реализуем их как Vehicle, они могут вызвать столкновения с существующими транспортными средствами, и мы по-прежнему хотим имитировать столкновения, поэтому это невозможно. Если мы реализуем их как Parcel s, они отображаются в сетке, которая покрывает фактические Parcel s, чего мы пытаемся избежать.

Поскольку объект PDPType защищен, мы не можем реализовать новый PDPType, что означает, что в настоящее время у нас нет способа правильно реализовать наш ConnectionAgent.

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете обойти ограничения 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 в симулятор.

...