Solving the Vehicle Routing Problem with Multiple Multi

Download Report

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