I'm an open source enthusiast. Below there is a list of software which I developed or contributed to the development.

Python-MIP: Python Mixed-Integer Linear Programming Modeling and Solution Tools

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:


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

CBC: The COIN-OR Branch-and-Cut Mixed-Integer Linear Programming solver

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.

cbc command line   COIN-OR Branch-and-Cut
  A short guide to the command line interface

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:

  • cliques;
  • odd-holes;
  • wheels.

Some features of NPSep are:

  • separates virtually all violated clique inequalities: a smart implementation of the Bron-Kerbosch (BK) algorithm with specially tuned pivoting rules allows the generation of all violated clique inequalities even for large instances (e.g. the larger ones in MIPLIB 2010 benchmark set), for even larger instance a greedy randomized heuristic is automatically selected;
  • lifting: larger cliques are generated by the inclusion of additional variables which do not appear as active (>0) in the current fractional solution, so that less cuts are necessary to improve the lower bound;
  • solver independent: most of the code, including all cut separation code, is completely solver independent, with the exception of the code which builds the conflict graph;
  • portable: the code was entirely wrote in ANSI C, with some small parts in ANSI C++.
The following papers describe successful applications of NPSep:

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.

School Timetabling Solver In 2011 the Third International Timetabling Competition (ITC 2011) happened. Our solver (GOAL Solver) was the winner of the competition. You can download the source code of this solver here. A descriptions of our solver can be found in the following paper:
Fonseca2014 Fonseca, George H.G.; Santos, Haroldo G.; Toffolo, Túlio A.M.; Brito, Samuel S. and Souza, Marcone J.F.. GOAL solver: a hybrid local search based solver for high school timetabling. Annals of Operations Research, DOI 10.1007/s10479-014-1685-4. 2014.  bibtex