1

我正在尝试使用 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;
}

这部分工作正常.. 如果S2和是解决方案的一部分S4S6它们出现在单个路线中,并且不会在不同路线之间分割..

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

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

这是可以理解的,但不是我想要的。我希望如果一条路线包括S2,它也应该包括S4and S6,以任何顺序..

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

谢谢,阿西姆

4

0 回答 0