Solving the Vehicle Routing Problem with Multiple Multi-Capacity Vehicles Michael Sanders
Overall Goals Create a program that given: Create a program that given: List of delivery points List of delivery points Number and capacity of vehicles Number and capacity of vehicles List of roads List of roads Return a list of routes that most efficiently utilize vehicles Return a list of routes that most efficiently utilize vehicles Efficiency undefined, but probably will be product delivered over distance traveled Efficiency undefined, but probably will be product delivered over distance traveled
Current Goals Create a program that given: Create a program that given: List of roads w/ geographic coordinates and address information List of roads w/ geographic coordinates and address information Returns the quickest route between those two points Returns the quickest route between those two points
Scope Heuristics Heuristics In both aspects of program In both aspects of program A* search A* search Used to find shortest route between two locations Used to find shortest route between two locations Will use heuristic based on geographical coordinates Will use heuristic based on geographical coordinates
Previous Research Vehicle Routing Problem (VRP) Vehicle Routing Problem (VRP) Extensively researched Extensively researched Solutions Solutions Agent architecture Agent architecture Used agents to represent vehicles and “auctioneer” that assigned customers to routes Used agents to represent vehicles and “auctioneer” that assigned customers to routes Ant colony optimization Ant colony optimization Could solve variants of VRP Could solve variants of VRP
Variants of VRP Variants Variants VRP with Time Windows (VRPTW) VRP with Time Windows (VRPTW) Requires deliveries to be in specific time ranges for each delivery Requires deliveries to be in specific time ranges for each delivery Multi-Depot VRP (MDVRP) Multi-Depot VRP (MDVRP) Multiple origins for vehicles Multiple origins for vehicles
Components Route finder Route finder Given two intersections, find shortest-time route between the two Given two intersections, find shortest-time route between the two Delivery route creator Delivery route creator Using list of delivery points and quantity to be delivered, utilizes other component to most efficiently deliver the product Using list of delivery points and quantity to be delivered, utilizes other component to most efficiently deliver the product
Route Finder Program responsible finding quickest route Program responsible finding quickest route Uses A* search with a geographic heuristic Uses A* search with a geographic heuristic Will use latitude and longitude coordinates to help find best route Will use latitude and longitude coordinates to help find best route Will use speed limit information as well to find quickest route as well Will use speed limit information as well to find quickest route as well Uses Fairfax Cty and Census data Uses Fairfax Cty and Census data
Distance Method def find_dist coord1, coord2 dLat=coord1[0].to_f-coord2[0].to_fdLong=coord1[1].to_f-coord2[1].to_f dLat *= #Convert to miles dLong *= (Math.cos(coord1[0].to_f* ) * ) dist = Math.hypot(dLat, dLong) return dist end
Timeline Breadth-first search version of route finder is working Breadth-first search version of route finder is working Next goal: implement heuristic Next goal: implement heuristic Route creator will follow after that Route creator will follow after that Aiming to be done early spring in time for volunteer group’s delivery day to test program Aiming to be done early spring in time for volunteer group’s delivery day to test program
Testing Currently running route finder and evaluating answer against what I know to be best route Currently running route finder and evaluating answer against what I know to be best route As heuristic is implemented, results can be compared against commercially available mapping programs such as Google Maps As heuristic is implemented, results can be compared against commercially available mapping programs such as Google Maps
Other Information Language Language Ruby Ruby Problems Problems Road data Road data Not complete in certain fields—addresses, coordinates, speed limits, etc. Not complete in certain fields—addresses, coordinates, speed limits, etc. Delivery data is not standardized Delivery data is not standardized Road names not standard throughout list Road names not standard throughout list
Source of Road Data US Census Bureau US Census Bureau Sample data line: A Great Neck Ct A Sample data line: A Great Neck Ct A
Things Learned Use of hash tables and array storage Use of hash tables and array storage Inprocessing of data Inprocessing of data
Testing Analysis Route finder is currently successful so far Route finder is currently successful so far Is capable of finding route between two addresses very close to each other Is capable of finding route between two addresses very close to each other However, is very inefficient However, is very inefficient Breadth-first search Breadth-first search Given complexity of local road network, finding a route between intersections that are far away can take days Given complexity of local road network, finding a route between intersections that are far away can take days
Main Points Importance of the route finder Importance of the route finder Crucial to the route creator’s ability to function Crucial to the route creator’s ability to function Ways of implementing a heuristic in the route creator Ways of implementing a heuristic in the route creator Some ideas from literature research Some ideas from literature research