straindesign.glpk_interface
GLPK solver interface for LP and MILP
Module Contents
- class straindesign.glpk_interface.GLPK_MILP_LP(c=None, A_ineq=None, b_ineq=None, A_eq=None, b_eq=None, lb=None, ub=None, vtype=None, indic_constr=None, M=None)[source]
GLPK interface for MILP and LP
This class is a wrapper for the GLPK-Python API to offer bindings and namings for functions for the construction and manipulation of MILPs and LPs in an vector-matrix-based manner that are consistent with those of the other solver interfaces in the StrainDesign package. The purpose is to unify the instructions for operating with MILPs and LPs throughout StrainDesign.
The GLPK interface does not natively support indicator constraints. They are hence translated to bigM-constraints when passed to the GLPK constructor (see docstring of IndicatorConstraints). The GLPK interface does not natively support the populate function. A high level implementation emulates the behavior of populate.
- Accepts a (mixed integer) linear problem in the form:
minimize(c), subject to: A_ineq * x <= b_ineq, A_eq * x = b_eq, lb <= x <= ub, forall(i) type(x_i) = vtype(i) (continous, binary, integer), indicator constraints: x(j) = [0|1] -> a_indic * x [<=|=|>=] b_indic
Please ensure that the number of variables and (in)equalities is consistent
Example
glpk = GLPK_MILP_LP(c, A_ineq, b_ineq, A_eq, b_eq, lb, ub, vtype, indic_constr, M)
- Parameters:
c (list of float) – (Default: None) The objective vector (Objective sense: minimization).
A_ineq (sparse.csr_matrix) – (Default: None) A coefficient matrix of the static inequalities.
b_ineq (list of float) – (Default: None) The right hand side of the static inequalities.
A_eq (sparse.csr_matrix) – (Default: None) A coefficient matrix of the static equalities.
b_eq (list of float) – (Default: None) The right hand side of the static equalities.
lb (list of float) – (Default: None) The lower variable bounds.
ub (list of float) – (Default: None) The upper variable bounds.
vtype (str) – (Default: None) A character string that specifies the type of each variable: ‘c’ontinous, ‘b’inary or ‘i’nteger
indic_constr (IndicatorConstraints) – (Default: None) A set of indicator constraints stored in an object of IndicatorConstraints. To make GLPK compatible with indicator constraints, they are translated into bigM-constraints (see reference manual or docstring of IndicatorConstraints).
M (int) – (Default: None) A large value that is used in the translation of indicator constraints to bigM-constraints. If no value is provided, 1000 is used.
Returns –
(GLPK_MILP_LP):
A GLPK MILP/LP interface class.
- addExclusionConstraintsIneq(x)[source]
Function to add exclusion constraint (GLPK compatibility function)
- add_eq_constraints(A_eq, b_eq)[source]
Add equality constraints to the model
Additional equality constraints have the form A_eq * x = b_eq. The number of columns in A_eq must match with the number of variables x in the problem.
- add_ineq_constraints(A_ineq, b_ineq)[source]
Add inequality constraints to the model
Additional inequality constraints have the form A_ineq * x <= b_ineq. The number of columns in A_ineq must match with the number of variables x in the problem.
- populate(pool_limit) Tuple[List, float, float] [source]
Generate a solution pool for MILPs
This is only a high-level implementation of the populate function. There is no native support in GLPK.
Example
sols_x, optim, status = glpk.populate()
- Returns:
(Tuple[List of lists, float, float])
solution_vectors, optimal_value, optimization_status
- set_ineq_constraint(idx, a_ineq, b_ineq)[source]
Replace a specific inequality constraint
Replace the constraint with the index idx with the constraint a_ineq*x ~ b_ineq
- set_objective_idx(C)[source]
Set the objective function with index-value pairs
e.g.: C=[[1, 1.0], [4,-0.2]]
- slim_solve() float [source]
Solve the MILP or LP, but return only the optimal value
Example
optim = glpk.slim_solve()
- Returns:
(float)
Optimum value of the objective function.