Software
I'm an open source enthusiast. Below there is a list of software which I developed or contributed to the development.
Python-MIP is a collection of Python tools for the modeling and solution of Mixed-Integer Linear programs (MIPs). MIP syntax was inspired by Pulp. Just like CyLP it also provides access to advanced solver features like cut generation, MIPstarts and solution Pools. Porting Pulp and Gurobi models should be quite easy.
Some of the main features of MIP are:
high level modeling: write your MIP models in Python as easily as in high level languages such as MathProg): operator overloading makes it easy to write linear expressions in Python;
full featured:
fast: the Python MIP package calls directly the native dynamic loadable library of the installed solver using the modern python CFFI module; models are efficiently stored and optimized by the solver and MIP transparently handles all communication with your Python code; it is also compatible with the Pypy just in time compiler, meaning that you can have a much better performance, up to 25 times faster for the creation of large MIPs, than the official Gurobi python interface which only runs on CPython;
multi solver: Python MIP was written to be deeply integrated with the C libraries of the open-source COIN-OR Branch-&-Cut CBC solver and the commercial solver Gurobi; all details of communicating with different solvers are handled by Python-MIP and you write only one solver independent code;
written in modern statically typed Python 3 (requires Python 3.5 or newer).
The Documentation for Python-MIP is available at: https://python-mip.readthedocs.io/en/latest/
A PDF version is also available: https://media.readthedocs.org/pdf/python-mip/latest/python-mip.pdf
I'm working on the development of the COIN-OR CBC Branch-and-Cut MIP solver. This is an extensible, open source solver with many features including cutting planes and heuristics. CBC was primarily developed by John Forrest, a pioneer in Integer Linear Programming who still actively develops this solver. CBC has a permissible license (Eclipse Public License) which allows its use in commercial, closed source products too. CBC has many options which can be tuned to increase its performance for specific problems. I wrote a simple guide for using the command line version of this solver and tune its parameters.
To perform automated tests in CBC I build set with 883 instances, including instances from MIPLIB 3, 2010, 2017 and instances from Timetabling, Scheduling and Rostering.
NPSep is a set of routines to create dense conflict graphs and to generate cuts derived from these graphs. It currently separetes the following valid inequalities:
Some features of NPSep are:
NPSep is developed primarily by me and Samuel. Contributors include Artur, Eduardo and Poggi.
The project has a git based version control system hosted here.