これが私が解決しようとしている問題です:
- 場所 (x,y) に患者がいる町があり、患者が死ぬ時間があります。
- 患者は、救助されるために死ぬ前に病院に到着する必要があります。
- (x,y) にある一連の病院と、1 回の旅行で最大 4 人の患者を搬送し、任意の病院に搬送できる救急車がいくつかあります。
- 救急車は病院から出発し、複数回の移動を経て、最終的にどの病院にも行き着く可能性があります。
- できる限り多くの患者を救うことになっています。
- 問題の完全な説明はこちら: 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();