Skip to main content

A solver for real-time vehicle routing problems

Project description

Online-RTV

Installation

pip install rtv-solver

Code example

Initialize

from rtv_solver import OnlineRTVSolver

# Initialize the RTV solver with the URL of the OSRM server
online_rtv_solver = OnlineRTVSolver("http://127.0.0.1:50000/")

Check feasibility of time slots

payload = {
    "requests": [
    {
        'am': int,
        'wc': int,
        'time_windows' : [
            {'pickup_time_window_start': int, 'pickup_time_window_end': int, 'dropoff_time_window_start': int, 'dropoff_time_window_end': int,},
        ],
        'pickup_pt': {'lat': float, 'lon': float, 'node_id': int},
        'booking_id': int,
        'dropoff_time_window_start': int,
        'dropoff_time_window_end': int,
        'dropoff_pt': {'lat': float, 'lon': float, 'node_id': int}
    }],
    "driver_runs": driver_runs
}

feasibility = online_rtv_solver.check_feasibility(payload)


feasibility <-- [(feasible_window,vmt/pmt ratio)]

Generating a manifest

current_time = 5*3600+30*60 # 05:30:00 pm
driver_runs, unserved_requests = online_rtv_solver.solve_pdptw_rtv(new_payload)

unserved_requests <-- [list of ids of the requests that are not feasible to serve]

Fast option with Insertion Heuristic

driver_runs, unserved_requests = online_rtv_solver.solve_pdptw_heuristic(new_payload)

unserved_requests <-- [list of ids of the requests that are not feasible to serve]

Serve a request as soon as possible

new_payload = {
    "depot": {},
    "requests": [],
    "driver_runs": []
}

driver_runs = online_rtv_solver.serve_asap(new_payload)

Simulate the vehicles

current_time = 5*3600+40*60+00 # Simulate to 05:40:00 pm
new_driver_runs = online_rtv_solver.simulate_manifest(current_time, driver_runs)

Regenerating a manifest

payload = {
    "driver_runs": driver_runs,
    "depot": depot
}

driver_runs = online_rtv_solver.resolve_pdptw_rtv(payload)

Get stats from the manifest

depot = {
    "pt": {"lat": val, "lon": val}
}

driver_runs <- generated driver runs

feasibility, stats = online_rtv_solver.get_stats(depot, driver_runs)

feasibility {true or false} <- Is this schedule feasibile

stats = {
    "vmt": ,
    "pmt": ,
    "serviced": ,
    "wait_time": [wait time for each request],
    "detour": [detour for each request]
}

Payload format

Common format

{
    
    'depot': {
        'loc': {'lat': float, 'lon': float, 'node_id': int}
    }, 
    'date': 'yyyy-mm-dd', 
    'driver_runs': [],
    'requests': []
    
}

Requests

{
    
    'requests': [ {
        'am': int,
        'wc': int,
        'pickup_time_window_start': int,
        'pickup_time_window_end': int,
        'pickup_pt': {'lat': float, 'lon': float, 'node_id': int},
        'booking_id': int,
        'dropoff_time_window_start': int,
        'dropoff_time_window_end': int,
        'dropoff_pt': {'lat': float, 'lon': float, 'node_id': int}
    }] 
    
}

DriverRun

{
    
    'DriverRun': [ {
        'state': {
            'run_id': int,
            'start_time': int,
            'end_time': int,
            'am_capacity': int,
            'wc_capacity': int,
            'locations_already_serviced': int,
            'locations_dt_seconds': int,
            'loc': {'lat': float, 'lon': float, 'node_id': int},
            'total_locations': int,
        },
        'manifest': Stop[list]
    }] 
    
}

Stop

{
    
    'Stop': [ {
        'run': int,
        'booking_id': int,
        'order': int,
        'action': string,
        'loc': {'lat': float, 'lon': float, 'node_id': int}
        'scheduled_time': int,
        'am': int,
        'wc': int,
        'time_window_start': int,
        'time_window_end': int,
    }] 
    
}

Set up the OSRM Server

wget https://download.geofabrik.de/north-america/us/north-carolina-latest.osm.pbf
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-extract -p /opt/car.lua /data/north-carolina-latest.osm.pbf || echo "osrm-extract failed"
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-partition /data/north-carolina-latest.osrm || echo "osrm-partition failed"
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-customize /data/north-carolina-latest.osrm || echo "osrm-customize failed"
docker run -t -i -p 5000:5000 -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-routed --algorithm mld /data/north-carolina-latest.osrm

Building

python -m build
twine upload dist/rtv_solver-[version]*

Input files

inputs/wilson folder contains the

inputs/wilson

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rtv_solver-0.1.28.tar.gz (26.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rtv_solver-0.1.28-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file rtv_solver-0.1.28.tar.gz.

File metadata

  • Download URL: rtv_solver-0.1.28.tar.gz
  • Upload date:
  • Size: 26.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for rtv_solver-0.1.28.tar.gz
Algorithm Hash digest
SHA256 7a624f4c101e504685b38b4db177373dbc4211c12289f6c497fb29ac40b33bb8
MD5 a18b1827fe1c0c8a63ba2298cfe0a644
BLAKE2b-256 9061039aa51a6c80758bdd2ade52a3641e690328499ae87e478212b9b907b207

See more details on using hashes here.

File details

Details for the file rtv_solver-0.1.28-py3-none-any.whl.

File metadata

  • Download URL: rtv_solver-0.1.28-py3-none-any.whl
  • Upload date:
  • Size: 30.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for rtv_solver-0.1.28-py3-none-any.whl
Algorithm Hash digest
SHA256 657a9cac559ec8f14bab1a55bc08796e40bd96a60e02baafafd4805f873e9b6f
MD5 b2e8bec663ce6c0594289dd9428f7bbf
BLAKE2b-256 b3b38d69f3f71731e3f58bba1c7ee3bd7540f6b87b516a80b536e34f33913a95

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page