Application that solves Travelling Salesman Problem for Flight fares

The travelling salesman problem (TSP) asks the following question: "Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city and returns to the origin city?" It is an NP-hard problem in combinatorial optimization, important in operations research and theoretical computer science. @Wikipedia

Icon

Research document

Initial research document introduces you with interesting research facts about this project.

Icon

functional specification document

Use cases, proposed user interface and Supplementary specification can be found here.

Icon

design document

Every application requires a design, you will find here class diagrams and algorithm pseudocode.

Icon

Final report

System architecture, deployment strategy, continues delivery pipeline, and project review.

Icon

technical manual

How to up and run this application, detailed instruction.

Icon

User manual

Short video of how to use application.

We are fully on AWS

This application is fully deployed on AWS, it is using a variety of AWS services like EC2, API Gateway, Lambda, AutoScaling groups, CodePipeline, CodeBuild.

Why I created this application

Since I started a computer science studies the Graph data structures and algorithms that relate to a Graphs was always inspired me. We see Graphs every day in social media or web browsing. So I decided to create not only theoretical algorithm that solves some Graph problem but rather get the more practical application. This application produces an optimal tour how to travel between several countries. It assembles all my knowledge about system architecture, algorithms, data structure and object orientated design.

It uses a Graph database Neo4J to store, access and search for a route between airports. Neo4J can handle up to hundreds of thousands of nodes and edges between them.

Fully running on top of AWS, scales automatically if the high CPU spikes are detected.

The main algorithm is distributed to Lambda function and it is totally serverless, this allows to reduce a computation load from the main application.