这是我想解决的问题:
- 有一个小镇,病人在位置(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)限制病人在死亡之前被送到医院,或者离开他们。
- shipping . 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();
嗯,我还在学习如何提问。我几乎已经解决了上面描述的问题。以下是我的结果(以及到整个代码的链接):
- 指定救护车数量有限,但可以继续使用多个旅行。-将舰队大小设置为FINITE
- 约束患者送院前他们要么死去,要么离开他们。ship . builder . newinstance("…"). setdeliverytimewindow (time_of_patient_dying)实现此功能。
-
增加救护车1分钟卸货时间去医院分娩
继承VehicleRoutingTransportCosts并将所有距离和时间加1。 让救护车选择更好的路线,让他们把病人送到任何医院。