/JOpt

A simple wrapper for linear and mixed integer program solvers

Primary LanguageJavaBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

A simple wrapper for linear and quadratic mixed integer program solvers.

What is JOpt?

JOpt is an open source Java wrapper that provides objects like Variable, Constraint, and Term and lets you express your linear or mixed integer programs in a natural manner, while remaining agnostic to the details of the solver backend. JOpt is not a solver. Rather, it requires a solver such as Cplex or the free LPSolve to operate.

This means that any program written with JOpt will work for any of serveral solvers used by the end user.

Why JOpt?

  • You do linear/quadratic or mixed integer programming, but want to think in terms of simple variables and constraints, not a complex solver-specific api.
  • You want to automatically distribute and load balance your problems to one or more solver machines (when compiled for this support).

Features

  • Simple interface
  • Agnostic of underlying solver
  • Exposes various solver parameters directly
  • Sophisticated Threading support
  • Support for providing solving hints
  • Support for the IIS functionality of Cplex useful in debugging
  • Support for multiple solutions (solution pools) under CPlex.
  • Support for MIQCQP under CPlex
  • Client/server support with load balancing (when compiled for it)

Usage

JOpt is released on Maven Central: https://mvnrepository.com/artifact/edu.harvard.eecs/jopt

To use it, just include it in your Maven / Gradle dependencies.

Alternatively, if you don't use Maven nor Gradle, you can also simply download the newest version's JAR and include it in your project. The JAR is published along with the release.

Limitations

  • The Gurobi solver has not currently been integrated, though this would be straightforward to do (contributions welcome).