The Pickup planner aims to provide a travel service for users located around Stockholm. Users specify pickup location, destination, arrival time constraints and preferences in travel requests, from which the system devises a pickup path to be used by vehicle(s) in delivering users to their intended destinations.
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 21 commits ahead, 2 commits behind Tiglas:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


The goal of the Pickup planner system is to provide a pickup service that can be used by fleet managment companies as a travel service for city residents, satisfying their varying travel needs. The front end consists of the Client app and Vehicle app. The Client app allows users to register for the service and issue travel requests. The system backend processes these requests and sends a travel trajectory to the Vehicle app, which visualizes and updates the trips the vehicle should take in order to satisfy the travel requests.

The implementation of the Pickup planner service partially builds on components from the Citypulse framework, i.e. Decision Support and Geospatial Data Infrastructure (GDI). It includes a scheduling and dynamic route optimization algorithm. The system currently uses OpenStreetMap data for Stockholm, but can easily incorporate data for other cities through the GDI.


  • Database e.g. PostgreSQL/psycopg2
  • Clustering library e.g. Scipy or Scikit-Learn
  • Networkx
  • ASP solver (Clingo4)
  • virtualenv
  • Flask


Client and vehicle app: to install, upload the APK on an Android device running at least Android 5.0.


Request Handler: Flask server that accepts connections from the Client and Vehicle apps

Trip Generator and Traffic Handler: run periodically (e.g. through a cron job)


The instructions for the various components.

Clustering travel requests


Trip generation

clingo ham.lp graph.lp --opt-mode=optN --quiet=1

Client and Vehicle apps

  • To run these Android apps, install the APK.
  • Optionally change the configurations for the server and port number in the class (located in com.nicholasgot.citypulse/androidapp/common). Typically, this is the only change that is necessary when the components are installed on a different machine, assuming the other dependencies are already installed on the machine.
  • Change the Google API keys in the app's build.gradle.