IntegerLP

scalation.optimization.linear_opt.IntegerLP
class IntegerLP(a: MatrixD, b: VectorD, c: VectorD, excl: Set[Int])

The IntegerLP class solves Integer Linear Programming (ILP) and Mixed Integer Linear Programming (MILP) problems recursively using the Simplex algorithm. First, an LP problem is solved. If the optimal solution vector x is entirely integer valued, the ILP is solved. If not, pick the first x_j that is not integer valued. Define two new LP problems which bound x_j to the integer below and above, respectively. Branch by solving each of these LP problems in turn. Prune by not exploring branches less optimal than the currently best integer solution. This technique is referred to as Branch and Bound. An exclusion set may be optionally provided for MILP problems. FIX: Use the Dual Simplex Algorithm for better performance.

Given a constraint matrix a, limit/RHS vector b and cost vector c, find values for the solution/decision vector x that minimize the objective function f(x), while satisfying all of the constraints, i.e.,

minimize f(x) = c x subject to a x <= b, x >= 0, some x_i must be integer valued

Make b_i negative to indicate a >= constraint.

Value parameters

a

the M-by-N constraint matrix

b

the M-length limit/RHS vector

c

the N-length cost vector

excl

the set of variables to be excluded from the integer requirement

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any

Members list

Type members

Types

Value members

Concrete methods

def addConstraint(j: Int, le: Boolean, bound: Double): Boolean

Add a new constraint to the current set of bounding constraints: x_j <= bound or x_j >= bound (e.g., x_1 <= 2. or x_0 >= 4.).

Add a new constraint to the current set of bounding constraints: x_j <= bound or x_j >= bound (e.g., x_1 <= 2. or x_0 >= 4.).

Value parameters

bound

the bounding value

j

the index of variable x_j

le

whether it is a "less than or equal to" le constraint

Attributes

Starting with the original constraints (a, b) add the current set of bounding constraints.

Starting with the original constraints (a, b) add the current set of bounding constraints.

Attributes

def fractionalVar(x: VectorD): Int

Return j such that x_j has a fractional (non-integer) value, -1 otherwise. Make sure that j is not in the exclusion list.

Return j such that x_j has a fractional (non-integer) value, -1 otherwise. Make sure that j is not in the exclusion list.

Value parameters

x

the vector to check

Attributes

def solution: (VectorD, Double)

Return the optimal (minimal) integer solution.

Return the optimal (minimal) integer solution.

Attributes

def solve(dp: Int, cons: Constraints): Unit

Solve the Integer Linear Programming (ILP) problem by using Branch and Bound and the Two-Phase Simplex Algorithm, recursively.

Solve the Integer Linear Programming (ILP) problem by using Branch and Bound and the Two-Phase Simplex Algorithm, recursively.

Value parameters

cons

the current set of original and new constraints (a x <= b)

dp

the current depth of recursion

Attributes

Concrete fields

val x_ge: VectorD
val x_le: VectorD