是否可以通过严格的违禁品,在同一条航线上装运两批或多批货物?
如果没有,您知道其他可以处理此类限制的java库吗?
谢谢!
发布于 2014-09-05 09:54:31
确保货件在同一条路线上的最简单的方法是用一种技能标记这些货物。
shipmentBuilder.addRequiredSkill("tag")但是,您还需要为特定的车辆贴上标签:
vehicleBuilder.addSkill("tag")并确保算法考虑技能/这些标记(参见NEW.md -您需要使用1.3.2-快照)。
如果不希望为特定车辆分配标记,则需要实现一个core.problem.constraint.HardRouteStateLevelConstraint,这基本上是一种方法。
public boolean fulfilled(JobInsertionContext insertionContext)确保要插入的作业insertionContext.getJob()可以插入到insertionContext.getRoute()中。此时,您需要知道两件事:
对于后一种信息,您需要定义为您提供作业路线分配的状态。我将定义一个problemState及其相应的更新器如下:
static class UpdateJobRouteAssignment implements StateUpdater,JobInsertedListener,InsertionStartsListener {
StateManager stateManager;
UpdateJobRouteAssignment(StateManager stateManager) {
this.stateManager = stateManager;
}
@Override
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
stateManager.putProblemState(stateManager.createStateId(job2insert.getId()), VehicleRoute.class, inRoute);
}
@Override
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, Collection<Job> unassignedJobs) {
for(VehicleRoute r : vehicleRoutes){
for(Job j : r.getTourActivities().getJobs()){
informJobInserted(j,r,0.,0.);
}
}
}
}将状态更新器和约束添加到州/ConstraintManager,您就完成了。
https://stackoverflow.com/questions/25674850
复制相似问题