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

Posted

技术标签:

【中文标题】救护车救援作为车辆路线(有能力,有时限)【英文标题】:Ambulance rescue as vehicle routing (capacitated, time bound) 【发布时间】:2015-10-18 16:06:53 【问题描述】:

这是我要解决的问题:

有一个城镇,在 (x,y) 位置有病人,他们会死去。 患者需要在死前到达医院才能获救。 位于 (x,y) 的多家医院配备了一些救护车,一次最多可以接走 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();

【问题讨论】:

欢迎来到 Stack Overflow!您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题。 嗨@DanLowe,我已经编写了一些代码,将其添加到我的帖子中。感谢您的反馈:) 【参考方案1】:

嗯,我仍在学习如何提问的技巧。我几乎已经解决了上面描述的问题。这是我的结果(以及指向the whole code 的链接):

    指定救护车数量有限,但可以继续行驶 多次旅行。 - 将 FleetSize 设置为 FINITE 限制患者提前送院 他们死了,或者离开他们。 Shipment.Builder.newInstance("...").setDeliveryTimeWindow(time_of_patient_dying) 实现了这一点。

    为任何救护车增加 1 分钟的卸载时间 到达医院分娩。 - 继承 VehicleRoutingTransportCosts 并将所有距离和时间加 1。

    让救护车选择更好的路线,让他们将病人送到 任何医院。 - 仍未解决。

【讨论】:

您能否进一步指定第 4 点。这里哪一部分没有解决? 我希望能够为货物指定交货期限。但它们应该能够被运送到任何仓库。这个描述有帮助吗?还是我应该从问题中举一个例子? 这很有趣。但是,这还不容易实现,即不幸的是,您只能先验地设置一个交货地点。请向 jsprit 的问题跟踪器添加新功能。

以上是关于救护车救援作为车辆路线(有能力,有时限)的主要内容,如果未能解决你的问题,请参考以下文章

L2-001. 紧急救援

L2-001. 紧急救援

L2-001. 紧急救援

天梯赛 L2-001 紧急救援

L2-001. 紧急救援

L2-001 紧急救援