我是Jsprit的新手。我尝试在发货清单中使用多个尺寸尺寸。例如,有些货件我在WHEELCHAIRSPACE_INDEX中添加了尺寸大小,有些货件我在createJob()中使用了PASSENGERSEATS_INDEX。但是,输出似乎是错误的。
PCB
}
货件1和货件5未分配到作业清单。但是,如果我更改将所有尺寸的尺寸添加到PASSENGERSEATS_INDEX,则所有作业均被正确分配。这是否意味着该算法不支持多维尺寸?
我发现有一种解决方案,当我在调试模式下进入代码时会分配4个作业。但是,它被认为是Jsprit中不被接受的解决方案。从逻辑上考虑,此解决方案应该是正确的解决方案,因为它可以最大程度地减少未分配的工作(与原始解决方案仅分配3个工作相比)。
答案 0 :(得分:0)
建立成本矩阵时,您仅指定旅行时间,而不是距离。
默认情况下,未分配作业的成本取决于取货和交货地点之间的(最大)距离。由于没有设置距离,因此未分配的作业不会受到任何惩罚。
一个简单的解决方案是在构建成本矩阵时添加一些合理的距离度量:
private void setTransportCost() {
VehicleRoutingTransportCostsMatrix.Builder costMatrixBuilder = VehicleRoutingTransportCostsMatrix.Builder.newInstance(true);
String[] locationIds = new String[] {"0", "1a", "1b", "2a", "2b", "3a", "3b", "4a", "4b", "5a", "5b"};
for (String l1: locationIds) {
for (String l2: locationIds) {
if (!l1.equals(l2)) {
costMatrixBuilder.addTransportDistance(l1, l2, 5);
}
}
}
// ... on with original implementation ...