VRPTW with
Multiple Service Workers
A Designated Operator for Reducing Trucks
Gerald Senarclens de Grancy
(gerald@senarclens.eu),
Marc Reimann (marc.reimann@uni-graz.at)
YAMS, December 2012, Graz
Delivery of soft drinks to small and medium sized retailers in Sao Paulo:
Solution* improve_solution(Solution *sol) { sol = reduce_trucks(sol); reduce_workers(sol); return sol; }
Solution* reduce_trucks(Solution *sol) { int improved = 0; do { improved = 0; improved |= move_all(sol, REDUCE_TRUCKS); improved |= swap_all(sol); improved |= new_operator(&sol); } while (improved); return sol; }
def new_operator(sol): reduced, improved = True, False while (reduced): for route in sol.routes: reduced = empty_route(sol, route) if (reduced): remove_route(sol, route) improved = 1 break return improved; }
old (ts; aco) | new | |
---|---|---|
#trucks | 148; 150 | 145 |
#workers | 389; 377 | 368 |
#distance | 15096; 15137 | 14976.83 |
iterations / s | 152.53 | 158.53 |
Best known VRPTWMS solution values |