Скорая медицинская помощь в качестве транспортного средства (с указанием времени)

Вот проблема, которую я пытаюсь решить:

  • В городе (x,y) есть город с пациентами и время, когда они умрут.
  • Пациент должен добраться до больницы, прежде чем он / она умрет, чтобы быть спасенным.
  • Группа больниц в (x,y) с несколькими машинами скорой помощи, которые могут забрать максимум четырех пациентов за одну поездку и доставить их в любую больницу.
  • Скорая помощь начинается в больнице, принимает несколько поездок и может оказаться в любой больнице.
  • Мы должны спасти максимально возможное количество пациентов.
  • Полное описание проблемы здесь: http://cs.nyu.edu/courses/fall15/CSCI-GA.2965-001/ambulance.html

Я пытаюсь использовать jsprit для решения этой проблемы и не могу понять, как сделать следующее: (Я хочу знать, какую часть API я должен изучить)

1) Указание, что есть конечные машины скорой помощи, но они могут отправиться в несколько поездок.

  • Делает ли это параметр VehicleRoutingProblem.Builder.setFleetSize(FleetSize.INFINITE)? Код не документирует точную функциональность.

2) Заставить пациентов быть доставленными в больницу до их смерти или покинуть их.

  • Достигает ли это Shipment.Builder.newInstance("..."). SetDeliveryTimeWindow(time_of_patient_dying)?

3) Добавление 1 минуты времени разгрузки для любой машины скорой помощи, доставляющей больницу для родов.

  • Не знаю, какую часть API посмотреть на это.

4) Пусть машины скорой помощи выбирают лучшие маршруты, позволяя доставлять пациентов в любую больницу.

  • Не знаю, какую часть API посмотреть на это.

Вот мой код до сих пор:

// make vehicle routing problem builder
VehicleRoutingProblem.Builder vrpBuilder =
    VehicleRoutingProblem.Builder.newInstance();

// make vehicle type
VehicleTypeImpl.Builder vehicleTypeBuilder =
    VehicleTypeImpl.Builder.newInstance("ambulanceWithFourBeds")
        .addCapacityDimension(0, 4);
VehicleType vehicleType = vehicleTypeBuilder.build();

// putting multiple vehicles at every hospital
List<Location> locations = state.getVehicleLocations();
int counter = 0;
for (Location location : locations) {
  VehicleImpl.Builder vehicleBuilder =
      VehicleImpl.Builder.newInstance("ambulance_" + counter++);
  vehicleBuilder.setStartLocation(location);
  vehicleBuilder.setType(vehicleType);

  vrpBuilder.addVehicle(vehicleBuilder.build());
}

List<Patient> patients = state.getPatients();
counter = 0;
for (Patient patient : patients) {
  Shipment shipment = Shipment.Builder.newInstance("patient_" + counter++)
      .addSizeDimension(0, 1).setDeliveryTimeWindow(patient.getTimeWindow())
      .setPickupLocation(Location.newInstance(patient.x, patient.y))
      .setDeliveryLocation(patient.getAssignedClusterCentroid()).build();

  vrpBuilder.addJob(shipment);
}

vrpBuilder.setRoutingCost(new ManhattanCosts(vrpBuilder.getLocations()));

VehicleRoutingProblem problem = vrpBuilder.build();

1 ответ

Хм, я все еще изучаю веревки с точки зрения того, как задать вопрос. Я почти решил проблему, описанную выше. Вот мои результаты (и ссылка на весь код):

  1. Указание, что есть конечные машины скорой помощи, но они могут ездить несколько раз. - Установите FleetSize на FINITE
  2. Заставить пациентов быть доставленными в больницу до того, как они умрут или покинут их. Shipment.Builder.newInstance("..."). SetDeliveryTimeWindow(time_of_patient_dying) достигает этого.
  3. Добавление 1 минуты времени разгрузки для любой машины скорой помощи, доставляющей больницу для родов. - Inherit VehicleRoutingTransportCosts и добавьте 1 ко всему расстоянию и времени.

  4. Пусть машины скорой помощи выбирают лучшие маршруты, позволяя доставлять пациентов в любую больницу. - Все еще не решен.

Другие вопросы по тегам