I am working on a variant of a VRP and looking to solve it using Optaplanner.
I have a shipping company that has list of all jobs that needs to be fulfilled for the next day (so the demand is generated at least a day earlier). This company has multiple drivers that might be suitable for servicing one or more jobs.
Each job has following elements:
Job_ID
Pickup Time (Job must be pickup at or after this time)
Pickup Location
Delivery Time (Job must be drop-off at or before this time)
Delivery Location, and
List of possible drivers that are eligible to do this job (out of which only one driver will ultimately take up the job.)
One driver may service one or many jobs, but each job must be serviced by only one driver.
Objective is: Using as few drivers as possible, come up with job-assignments to each driver and the sequence he/she should be picking up and delivering the job that will minimize total time to delivery.
Please note that a driver can pick up Job 1, then Job 2, then Job 3, then drop-off Job 2, then pickup Job 4, then drop-off jobs 1, 4 and 3. So there is no ordering in which the jobs needs to be picked up or dropped off. Whichever sequence minimizes the time will be preferred. The only obvious constraint is job must be first picked up before it can be dropped off.
Also each driver can start from their home location (so there is no one fixed depot) and after he/she delivers the last job, company doesn't care where he/she goes (so no need to calculate the time between last drop-off and driver home).
I have solved this using Genetic Algorithm using Watchmaker framework. But I wish to use other meta-heuristics like Tabu Search or Simulated Annealing.
I have read many forum topics here that talk about VRP, but still I am searching for answers. My problem is how to construct CHAINING and use SHADOW VARIABLES so that you have a valid chain of sequence of pickup locations and drop-off locations.
Any pointers will be greatly appreciated...
Thanks,
Vikas