170 likes | 447 Views
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
E N D
Solving the Vehicle Routing Problem withMultiple 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