Transcript Solving the Vehicle Routing Problem with Multiple Multi
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 List of roads Return a list of routes that most efficiently utilize vehicles Efficiency undefined, but probably will be product delivered over distance traveled
Current Goals
Create a program that given: List of roads w/ geographic coordinates and address information Returns the quickest route between those two points
Scope
Heuristics In both aspects of program A* search Used to find shortest route between two locations Will use heuristic based on geographical coordinates
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 shortest-time route between the two Delivery route creator 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 Uses A* search with a geographic heuristic Will use latitude and longitude coordinates to help find best route Will use speed limit information as well to find quickest route as well Uses Fairfax Cty and Census data
Distance Method
def find_dist coord1, coord2 dLat=coord1[0].to_f-coord2[0].to_f
dLong=coord1[1].to_f-coord2[1].to_f
dLat *= 69.1703234283616
#Convert to miles dLong *= (Math.cos(coord1[0].to_f* 0.0174532925199433) * 69.1703234283616) dist = Math.hypot(dLat, dLong) return dist end
Timeline
Breadth-first search version of route finder is working Next goal: implement heuristic Route creator will follow after that 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 As heuristic is implemented, results can be compared against commercially available mapping programs such as Google Maps
Other Information
Language Ruby Problems Road data Not complete in certain fields—addresses, coordinates, speed limits, etc.
Delivery data is not standardized Road names not standard throughout list
Source of Road Data
US Census Bureau Sample data line:11106 75990609 A Great Neck Ct A41 3701 3899 3700 389800002230922309 51510590599478394783 541445414441600041600030103010 77096339+38714921 -77098977+38714251
Things Learned
Use of hash tables and array storage Inprocessing of data
Testing Analysis
Route finder is currently successful so far Is capable of finding route between two addresses very close to each other However, is very inefficient Breadth-first search 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 Crucial to the route creator’s ability to function Ways of implementing a heuristic in the route creator Some ideas from literature research