救护车救援作为车辆路线(有能力,有时间限制)



这是我想解决的问题:

  • 有一个小镇,病人在位置(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();

嗯,我还在学习如何提问。我几乎已经解决了上面描述的问题。以下是我的结果(以及到整个代码的链接):

  1. 指定救护车数量有限,但可以继续使用多个旅行。-将舰队大小设置为FINITE
  2. 约束患者送院前他们要么死去,要么离开他们。ship . builder . newinstance("…"). setdeliverytimewindow (time_of_patient_dying)实现此功能。
  3. 增加救护车1分钟卸货时间去医院分娩

  4. 继承VehicleRoutingTransportCosts并将所有距离和时间加1。
  5. 让救护车选择更好的路线,让他们把病人送到任何医院。

相关内容

  • 没有找到相关文章

最新更新