Introduction

The Kotlin-MIP package is inspired by Python-MIP, developed by the same authors. It provides tools for modeling and solving Mixed-Integer Linear Programming Problems (MIPs) [Wols98] in Java/Kotlin. The default installation includes the COIN-OR Linear Programming Solver - CLP, which is currently the fastest open source linear programming solver and the COIN-OR Branch-and-Cut solver - CBC, a highly configurable MIP solver. It also works with the state-of-the-art Gurobi MIP solver. Kotlin-MIP was written in Kotlin in a way to ensure it can be easily used by Java programmers. In fact, Java-MIP is an alias for Kotlin-MIP in which all documentation and examples are written in Java.

In the modeling layer, models can be written very concisely, as in high-level mathematical programming languages such as MathProg. Many examples and applications can be viewed in Modelling Examples.

Kotlin-MIP eases the development of high-performance MIP based solvers for custom applications by providing a tight integration with the branch-and-cut algorithms of the supported solvers. Strong formulations with an exponential number of constraints can be handled by the inclusion of Cut Generators and Lazy Constraints. Heuristics can be integrated for providing initial feasible solutions to the MIP solver. These features can be used in all supported solver engines, CBC, Cplex and Gurobi, without changing a single line of code.

This document is organized as follows: in the next Chapter installation and configuration instructions for different platforms are presented. In Chapter 3 an overview of some common model creation and optimization code are included. Commented examples are included in Chapter 4. Chapter 5 includes some common solver customizations that can be done to improve the performance of application specific solvers. Finally, the detailed reference information for the main classes is included in Chapter 6.

Acknowledgments

We would like to thank the GOAL research group and the Department of Computing of the Federal University of Ouro Preto (UFOP) for the support.