救护车救援作为车辆路线(有能力,有时限)
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 的问题跟踪器添加新功能。以上是关于救护车救援作为车辆路线(有能力,有时限)的主要内容,如果未能解决你的问题,请参考以下文章