Скорая медицинская помощь в качестве транспортного средства (с указанием времени)
Вот проблема, которую я пытаюсь решить:
- В городе (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 ответ
Хм, я все еще изучаю веревки с точки зрения того, как задать вопрос. Я почти решил проблему, описанную выше. Вот мои результаты (и ссылка на весь код):
- Указание, что есть конечные машины скорой помощи, но они могут ездить несколько раз. - Установите FleetSize на FINITE
- Заставить пациентов быть доставленными в больницу до того, как они умрут или покинут их. Shipment.Builder.newInstance("..."). SetDeliveryTimeWindow(time_of_patient_dying) достигает этого.
Добавление 1 минуты времени разгрузки для любой машины скорой помощи, доставляющей больницу для родов. - Inherit VehicleRoutingTransportCosts и добавьте 1 ко всему расстоянию и времени.
Пусть машины скорой помощи выбирают лучшие маршруты, позволяя доставлять пациентов в любую больницу. - Все еще не решен.