1

これが私が解決しようとしている問題です:

  • 場所 (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();
4

1 に答える 1