我正在研究一种解决方案,我们需要将车辆路由到客户要求的任务位置。这是我的域的样子:
interface TaskOrVehicle{
@InverseShadowVarible Task nextTask;
getLocation();
}
任务:
@PlanningEntity
Class Task implements TaskOrVehicle{
@ChainedPlanningVariable TaskOrVehicle taskOrVehicle;
@PlanningVariable Staff staff;
@AnchorShadowVariable Vehicle vehicle;
}
因此,我将 Staff 和 Vehicle 作为事实,而 Task 是一个计划实体。因此,使用 optaplanner 时,它会在链中安排任务,但会将不同的员工分配给同一链中的不同任务。
因此,如果 A、B、C、D 和 E 是任务,并且 Staff st1,st2,st3 和 Vechcle V1,V2 在那里。
理想的解决方案如下: V1->A(st1)->B(st1)->C(st1) V2->D(st2)->E(st2)
但我的解决方案看起来像: V1->A(st1)->B(st3)->C(st2) V2->D(st3)->E(st2)
这是因为我没有链接员工并将员工用作计划变量。现在,我可以使用 nextTask 应该具有与当前任务相同的员工的规则来修复它,但这是一个矫枉过正的问题。
我可以在这里做哪些最佳实践,以便每个任务链都有相同的员工?
注意:我不想让员工留在车辆中,就好像车辆免费一样,它可以分配给不同的员工以进行新的任务链。