如果货件有多个尺寸,则Jsprit的解决方案不正确

时间:2019-01-03 03:33:34

标签: algorithm routing jsprit vehicle-routing

我是Jsprit的新手。我尝试在发货清单中使用多个尺寸尺寸。例如,有些货件我在WHEELCHAIRSPACE_INDEX中添加了尺寸大小,有些货件我在createJob()中使用了PASSENGERSEATS_INDEX。但是,输出似乎是错误的。

PCB

}

这是输出 enter image description here

货件1和货件5未分配到作业清单。但是,如果我更改将所有尺寸的尺寸添加到PASSENGERSEATS_INDEX,则所有作业均被正确分配。这是否意味着该算法不支持多维尺寸?

我发现有一种解决方案,当我在调试模式下进入代码时会分配4个作业。但是,它被认为是Jsprit中不被接受的解决方案。从逻辑上考虑,此解决方案应该是正确的解决方案,因为它可以最大程度地减少未分配的工作(与原始解决方案仅分配3个工作相比)。

enter image description here

1 个答案:

答案 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 ...