pytspsolver

Easy to use python package for rapid experimentation on the classic travelling salesman problem.


Keywords
tsp, optimization-experiments, python, experiments, flexible, genetic-algorithm, metaheuristics, optimization-algorithms, plug-and-play, python3, travelling-salesman-problem, visualizations
License
MIT
Install
pip install pytspsolver==0.0.1

Documentation

🚚 pytspsolver

Easy to use package for rapid experimentation on the classic travelling salesman problem. Contains implementations of various optimization algorithms, cool visualizers and a plug-in architecture.

Build Status PyPI Say Thanks! MIT license

Installation

> pip install pytspsolver

Usage

This package is designed to provide an intutive pythonic interface; allowing you to conduct experiments with minimal code. 😅

Here's how you can kick-start a travelling salesman problem experiment:

from pytspsolver.entities import TSProblem
from pytspsolver.experiments import Experiment
from pytspsolver.solvers import *
from pytspsolver.utilities import create_random_problem, get_tsp_lib_problem, Visualizer
import matplotlib.pyplot as plt

# Create a few tsp problems (represented as an adjacency matrix)
problems = [create_random_problem("UniqueProblemName"+str(i), i) for i in range(3,12)]

# Pass in the location of TSPLIB95 dataset file
tsp_prob = get_tsp_lib_problem("gr17.tsp")

# Create a new Experiment
experiment = Experiment()

# Add the problems to the experiment (single or list of problems)
experiment.add_problem(tsp_prob)
experiment.add_problems(problems)

# Add solvers to use in the experiment
experiment.add_solver(ExhaustiveSearch(time_limit=50))
experiment.add_solver(GreedySearch(time_limit=100))

# Run the experiment desired number of times
results = experiment.run(epoch=10) 

# Set up Visualizer with experiment results
visualizer = Visualizer(results)

# Show visualizations - automatically averages the results from different epochs
visualizer.plot_n_vs_time_all(plt)

# Note: the visualizer has various plots available, they can be called in a similar fashion.

It comes with a plug in architecture, therefore it is very customizable.

Local Setup (Development Purposes)

Contributions and pull requests are encouraged! 👏

Let's first create a new python environment with the name your_env_name using Anaconda Prompt/Terminal; this allows us to manage all package dependencies for this project in isolation.

> conda create -n your_env_name

We can now activate the created environment using the command below:

> conda activate your_env_name

We need to install a few dependencies. We can do this by running the following:

> conda install jupyter
> pip install -r ./src/requirements.txt

Then, we need to install the pytspsolver package. Everytime a code change is made to the package, this needs to be called. Otherwise newly added changes wouldn't reflect in places where this package is being used.

> pip install ./src

That's it, we're good to start developing now. 😎

Additional Examples

A few examples have been implemented using jupyter notebooks; found in the examples folder. These notebooks can be accessed by launching jupyter notebook from your current conda environment.

> jupyter notebook

👉 Make sure you are in the right environment when launching jupyter notebook, otherwise, jupyter notebook kernel will be pointing to a different python version which won't have pytspsolver package installed.

Contributors