This repository contains code for benchmarking LP/MILP solvers, and an interactive website for analyzing the results.
Before you begin, make sure your development environment includes Python.
Preferred use:
We use Python virtual environments to manage the dependencies for each component of this project. This is how to create a virtual environment:
python -m venv venv
This is how to activate one:
.\venv\Scripts\activate
source venv/bin/activate
And this is how to install the required dependencies once a venv
is activated:
sudo apt install glpk-utils libglpk-dev # GLPK solver cannot be installed purely with pip
pip install -r runner/requirements.txt
pip install git+https://github.com/PyPSA/linopy.git@40a27f9e7f5d33acd1d256334a1b193899b166ad
NOTE: The last line is required to install the master branch of linopy, which includes updates from the merged PR that support reading LP files. Once a new version of linopy is released, we can remove this line and rely on the latest version of linopy from PyPI instead.
pip install -r website/requirements.txt
We use the ruff code linter and formatter, and GitHub Actions runs various pre-commit checks to ensure code and files are clean.
You can install a git pre-commit that will ensure that your changes are formatted and no lint issues are detected before creating new commits:
pip install pre-commit
pre-commit install
If you want to skip these pre-commit steps for a particular commit, you can run:
git commit --no-verify
Remember to activate the appropriate virtual environment before running the runner or the website.
Run Benchmark Runner
python runner/run_benchmarks.py
The app will save the runtime and memory consumption into a CSV file.
Run Website
streamlit run website/app.py
The website will be running on: http://localhost:8501