如何使用约束确保服务在同一路径中发生?

时间:2016-09-11 04:22:04

标签: traveling-salesman jsprit

我尝试使用Jsprit约束来确保解决方案路由具有一组特定的服务。给定服务[S1, S2, S3, ..., S10],我想确保服务[S2, S4, S6]出现在同样的路线..

为此,我正在使用HardRouteConstraint ..

@Override
public boolean fulfilled(JobInsertionContext context) {

    // jobIds = [S2, S4, S6]

    Job thisJob = context.getJob();
    if (jobIds.contains(thisJob.getId())) {
        for (String jobId : jobIds) {
            VehicleRoute route = stateManager.getProblemState(stateManager.createStateId(jobId), VehicleRoute.class);
            // if the jobs are assigned to a different route, reject this route
            if (route != null && route != context.getRoute()) return false;
        }
    }
    return true;
}

这部分工作正常..如果S2S4S6是解决方案的一部分,它们会出现在一条路线中,并且不会在不同的路线之间分开。< / p>

问题在于,如果我的车辆容量有限(例如3),Jsprit可能会返回如下解决方案:

Routes: [
    [S1, S2, S3]
    [S5, S7, S8]
    [S9, S10]
]
Unassigned Jobs: [S4, S6]

这是可以理解的,但不是我想要的..我希望如果路线包含S2,它还应该包括S4S6,任何顺序..

如何确保有效的解决方案不包含此类路由:[X, S2, Y][S2, X, S4] ..

谢谢, 阿西

0 个答案:

没有答案