Solving the Vehicle Routing Problem with Multiple Multi-Capacity Vehicles Michael Sanders Overall Goals Create a program that given: List of delivery points Number and capacity of vehicles Working route finder Return a list of routes that efficiently utilizes vehicles Efficiency defined as distance traveled over product delivered Scope Select/develop a working heuristic for solution finder Several possibilities from previous research Decided on a genetic algorithm Previous Research Vehicle Routing Problem (VRP) Extensively researched Solutions Agent architecture Used agents to represent vehicles and “auctioneer” that assigned customers to routes Ant colony optimization Could solve variants of VRP Variants of VRP Variants VRP with Time Windows (VRPTW) Requires deliveries to be in specific time ranges for each delivery Multi-Depot VRP (MDVRP) Multiple origins for vehicles Components Route finder Given two intersections, find shortestdistance route between the two Not necessarily fastest route Would need speed limit data Solution finder Using list of delivery points and quantity to be delivered, utilizes other component to most efficiently deliver the product Route Finder Had attempted to write own route finder program Failed due to data reliability Researched free commercial options Solution Creator Uses three types of genetic operations to find better solutions Creates a set of Route objects Each has unique vehicle assigned The whole set has deliveries to entire customer list Route objects are “genes” that are operated on Genetic Operations Swap Two deliveries on two different routes are switched Randomize The points on a route are randomly reordered Genetic Operations Insert A delivery point from one route is deleted from that route and added to another Testing Following slide will show percentages Percentages represent the final solution’s total distance traveled, as a percentage of the original, randomly-created solution’s total distance traveled 10,000 Generations Swap Insert Rand. Swap +Insert Swap +Rand. Insert +Rand. All 0.921 0.833 0.93 0.89 0.933 0.884 0.901 0.92 0.875 0.92 0.915 0.901 0.894 0.904 0.905 0.863 0.938 0.892 0.937 0.924 0.913 0.935 0.862 0.945 0.85 0.89 0.944 0.929 0.92025 0.85825 0.93325 0.88675 0.91525 0.9115 0.91175 Test Code gen_algs gen_algs gen_algs gen_algs gen_algs gen_algs gen_algs gen_algs gen_algs gen_algs $swap1, true, false, false $rand1, false, false, true $swapRand1,true, false, true $insertRand1,false, true, true $insert1,false, true, false $insert2,false, true, false $swapInsert1,true, true, false $swapInsert2,true, true, false $all1, true, true, true $all2, true, true, true Results Most efficient method: Use two arrays using insert method Average of 85.75% distance traveled versus original solution Other Information Language Ruby Problems Route finder Data not completely standardized Main Points Optimum answer not necessarily goal Finding optimum is too time-intensive Drivers have personal knowledge of routes and can adapt as necessary More genetic operations are not necessarily better Using all genetic operations usually resulted in moderate results Extensions Addition of working route finder Will result in fully functional program Further optimization of genetic algorithms Increase or decrease chance of mutation Implement different operations