miqps_glpk

miqps_glpk(H, c, A, l, u, xmin, xmax, x0, vtype, opt)

miqps_glpk() - Mixed Integer Linear Program Solver based on GLPK - GNU Linear Programming Kit.

[X, F, EXITFLAG, OUTPUT, LAMBDA] = ...
    MIQPS_GLPK(H, C, A, L, U, XMIN, XMAX, X0, VTYPE, OPT)
[X, F, EXITFLAG, OUTPUT, LAMBDA] = MIQPS_GLPK(PROBLEM)
A wrapper function providing a standardized interface for using
GLKP to solve the following MILP (mixed integer linear programming)
problem:

    min C'*X
     X

subject to

    L <= A*X <= U       (linear constraints)
    XMIN <= X <= XMAX   (variable bounds)

Inputs (all optional except H, C, A and L):
    H : dummy matrix (possibly sparse) of quadratic cost coefficients
        for QP problems, which GLPK does not handle
    C : vector of linear cost coefficients
    A, L, U : define the optional linear constraints. Default
        values for the elements of L and U are -Inf and Inf,
        respectively.
    XMIN, XMAX : optional lower and upper bounds on the
        X variables, defaults are -Inf and Inf, respectively.
    X0 : optional starting value of optimization vector X (NOT USED)
    VTYPE : character string of length NX (number of elements in X),
            or 1 (value applies to all variables in x),
            allowed values are 'C' (continuous), 'B' (binary) or
            'I' (integer).
    OPT : optional options structure with the following fields,
        all of which are also optional (default values shown in
        parentheses)
        verbose (0) - controls level of progress output displayed
            0 = no progress output
            1 = some progress output
            2 = verbose progress output
        skip_prices (0) - flag that specifies whether or not to
            skip the price computation stage, in which the problem
            is re-solved for only the continuous variables, with all
            others being constrained to their solved values
        price_stage_warn_tol (1e-7) - tolerance on the objective fcn
            value and primal variable relative match required to avoid
            mis-match warning message
        glpk_opt - options struct for GLPK, value in verbose
                overrides these options
    PROBLEM : The inputs can alternatively be supplied in a single
        PROBLEM struct with fields corresponding to the input arguments
        described above: H, c, A, l, u, xmin, xmax, x0, vtype, opt

Outputs:
    X : solution vector
    F : final objective function value
    EXITFLAG : exit flag, 1 - optimal, <= 0 - infeasible, unbounded or other
    OUTPUT : struct with errnum and status fields from GLPK output args
    LAMBDA : struct containing the Langrange and Kuhn-Tucker
        multipliers on the constraints, with fields:
        mu_l - lower (left-hand) limit on linear constraints
        mu_u - upper (right-hand) limit on linear constraints
        lower - lower bound on optimization variables
        upper - upper bound on optimization variables

Note the calling syntax is almost identical to that of GLPK. The main
difference is that the linear constraints are specified with A, L, U
instead of A, B, Aeq, Beq.

Calling syntax options:
    [x, f, exitflag, output, lambda] = ...
        miqps_glpk(H, c, A, l, u, xmin, xmax, x0, vtype, opt)

    x = miqps_glpk(H, c, A, l, u)
    x = miqps_glpk(H, c, A, l, u, xmin, xmax)
    x = miqps_glpk(H, c, A, l, u, xmin, xmax, x0)
    x = miqps_glpk(H, c, A, l, u, xmin, xmax, x0, vtype)
    x = miqps_glpk(H, c, A, l, u, xmin, xmax, x0, vtype, opt)
    x = miqps_glpk(problem), where problem is a struct with fields:
                    H, c, A, l, u, xmin, xmax, x0, vtype, opt
                    all fields except 'c', 'A' and 'l' or 'u' are optional
    x = miqps_glpk(...)
    [x, f] = miqps_glpk(...)
    [x, f, exitflag] = miqps_glpk(...)
    [x, f, exitflag, output] = miqps_glpk(...)
    [x, f, exitflag, output, lambda] = miqps_glpk(...)


Example: (problem from from https://v8doc.sas.com/sashtml/iml/chap8/sect12.htm)
    H = [   1003.1  4.3     6.3     5.9;
            4.3     2.2     2.1     3.9;
            6.3     2.1     3.5     4.8;
            5.9     3.9     4.8     10  ];
    c = zeros(4,1);
    A = [   1       1       1       1;
            0.17    0.11    0.10    0.18    ];
    l = [1; 0.10];
    u = [1; Inf];
    xmin = zeros(4,1);
    x0 = [1; 0; 0; 1];
    opt = struct('verbose', 2);
    [x, f, s, out, lambda] = miqps_glpk(H, c, A, l, u, xmin, [], x0, vtype, opt);

See also miqps_master(), glpk.