2014-09-04 63 views
0

难以通过硬Contraint在同一路线上有两件或多件货件。jsprit VRP相关职位hard Contraint

如果不是,你知道其他的java库可以处理这种限制吗?

谢谢!

+0

你能更精确一点吗?你想要建模什么?你想确保货物A和B在同一条路线上吗? – 2014-09-05 07:24:51

+0

是的,我的问题是要确保多个装运A,B,...在相同的路线。谢谢! – 2014-09-05 08:20:37

回答

0

一定要确保出货量都在同一条路线的最简单方法是标记这些货物与技术

shipmentBuilder.addRequiredSkill("tag") 

但你需要标记特定的车辆,以及:

vehicleBuilder.addSkill("tag") 

并确保您使算法考虑技能/这些标签(请参阅https://github.com/jsprit/jsprit/blob/master/WHATS_NEW.md - 您需要使用1.3.2-SNAPSHOT)。

如果你不想用标签分配一个特定的车辆,你需要实现一个core.problem.constraint.HardRouteStateLevelConstraint这基本上是这种方法

public boolean fulfilled(JobInsertionContext insertionContext) 

确保insertionContext.getJob() [这是要插入的作业]可以插入到insertionContext.getRoute()中。在这一点上,你需要知道两件事情:

  • insertionContext.getJob()的相关货物,需要在相同的路线为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和你做。

+0

路线驯化的优化: 问题是模拟几个信使,每个信使由几个任务任务1,任务2 ..组成,它们必须在相同的路线中,并且相对于顺序,1 2 ..,我们正在谈论骏马工作。 每个信使的第一个任务有一个时间窗口。 只有两个任务的信使,我可以通过发货,皮卡作为第一任务和交付第二,但超过两个? 任何想法? 谢谢。 – 2014-09-06 10:36:21

+0

我确信您可以在此处获得帮助:https://groups.google.com/group/jsprit-mailing-list。只需将其重新发布到那里,您就可以捕获已解决类似问题的用户。 – 2014-09-08 17:47:35