/clingoLP

Theory propagator for linear programming using clingo theory language and interface.

Primary LanguagePythonMIT LicenseMIT

clingo[LP]

clingo[LP] extends the ASP solver clingo with linear constraints as dealt with in Linear Programming (LP).

Install

Install via conda:

conda install -c potassco -c conda-forge clingo-lp

CPLEX

The clingoLP propagator requires an LP solver. The default is lpsolve but cplex can be used optionally.

IBM also provides a promotional version of cplex that is sufficient to solve small problems limited to 1000 variables and 1000 constraints.

conda install -c ibmdecisionoptimization cplex`

To solve larger problems, you need to use the full version of CPLEX Studio.

Syntax

LP constraints can be expressed as follows:

LP constraints ClingoLP Syntax
w1x1+...+wnxn >= k &sum{w1*x1;...;wn*xn} >= k
domain(x)={l,...,u} &dom{l..u} = x
maximize: w1x1+...+wnxn &maximize{w1*x1;...;wn*x1} (minimize analogous)

To avoid syntax clashes, you must quote " real numbers. Instead of 1.5 write "1.5".

Usage

clingoLP [number] [options] [files]

Options:

  --lp-solver=<arg>       : Set LP solver
      <arg>: {lps,cplx} (default lp-solver=lps)
  --[no-]show-lp-solution : Show LP solution and value of objective function
  --accuracy=n            : Set decimal position of LP solver accuracy (default accuracy=3)
  --epsilon=n,m           : Set epsilon to convert lhs > k into lhs >= k+n*10^-m (default epsilon=1,3)
  --[no-]trace            : Enables detailed output of theory propagation
  --core-confl=n          : Searches for core conflicts if at least n% of the theory atoms are decided
                            (default core-confl=20)
  --prop-heur=n           : Starts a solve call of the LP solver if at least n% of the theory atoms are decided
                            (default prop-heur=0)
  --[no-]ilp              : Sets the LP solver to solve an Integer Linear Programming (ILP) problem

Example:

clingoLP 0 --show-lp-solution example_encoding.lp example_instance.lp

For more options you can ask for help as follows:

clingoLP --help

Publication

Clingo goes linear constraints over reals and integers, Janhunen, T., Kaminski, R., Ostrowski, M., Schellhorn, S., Wanko, P., Schaub, T. (2017), TPLP, 17(5-6), 872–888.