Спасательная машина скорой помощи в качестве маршрута транспортного средства (с дееспособностью, ограниченным по времени)

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

  • Есть город с пациентами в месте (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();

person Kshitiz Sethia    schedule 18.10.2015    source источник
comment
Добро пожаловать в Stack Overflow! Кажется, вы просите кого-нибудь написать код для вас. Stack Overflow — это сайт вопросов и ответов, а не сервис написания кода. Пожалуйста, см. здесь, чтобы узнать, как писать эффективные вопросы.   -  person Dan Lowe    schedule 18.10.2015
comment
Привет @DanLowe, я уже написал код, добавив его в свой пост. Спасибо за отзыв :)   -  person Kshitiz Sethia    schedule 18.10.2015


Ответы (1)


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

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

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

person Kshitiz Sethia    schedule 30.10.2015
comment
Можете ли вы уточнить пункт 4 дальше. Какая часть здесь не решена? - person Stefan Schröder; 02.11.2015
comment
Я хочу иметь возможность назначать крайний срок доставки для отгрузок. Но они должны быть в состоянии быть доставлены в любое депо. Помогает ли это описание? Или мне привести пример из задачи? - person Kshitiz Sethia; 04.11.2015
comment
Это интересно. Однако это пока невозможно, т.е., к сожалению, заранее можно указать только одно место доставки. Пожалуйста, добавьте новую функцию в систему отслеживания проблем jsprit. - person Stefan Schröder; 08.11.2015