% Matlab MEX interface for the GLPK library
%
% [xopt, fmin, status, extra] = glpk (c, a, b, lb, ub, ctype, vartype,
% sense, param)
%
% Solve an LP/MILP problem using the GNU GLPK library. Given three
% arguments, glpk solves the following standard LP:
%
% min C'*x subject to A*x <= b
%
% but may also solve problems of the form
%
% [ min | max ] C'*x
% subject to
% A*x [ "=" | "<=" | ">=" ] b
% x >= LB
% x <= UB
%
% Input arguments:
% c = A column array containing the objective function coefficients.
%
% A = A matrix containing the constraints coefficients.
%
% b = A column array containing the right-hand side value for each constraint
% in the constraint matrix.
%
% lb = An array containing the lower bound on each of the variables. If
% lb is not supplied (or an empty array) the default lower bound for the variables is
% minus infinite.
%
% ub = An array containing the upper bound on each of the variables. If
% ub is not supplied (or an empty array) the default upper bound is assumed to be
% infinite.
%
% ctype = An array of characters containing the sense of each constraint in the
% constraint matrix. Each element of the array may be one of the
% following values
% 'F' Free (unbounded) variable (the constraint is ignored).
% 'U' Variable with upper bound ( A(i,:)*x <= b(i)).
% 'S' Fixed Variable (A(i,:)*x = b(i)).
% 'L' Variable with lower bound (A(i,:)*x >= b(i)).
% 'D' Double-bounded variable (A(i,:)*x >= -b(i) and A(i,:)*x <= b(i)).
%
% vartype = A column array containing the types of the variables.
% 'C' Continuous variable.
% 'I' Integer variable
% 'B' Binary variable
%
% sense = If sense is 1, the problem is a minimization. If sense is
% -1, the problem is a maximization. The default value is 1.
%
% param = A structure containing the following parameters used to define the
% behavior of solver. Missing elements in the structure take on default
% values, so you only need to set the elements that you wish to change
% from the default.
%
% Integer parameters:
% msglev (default: 1)
% Level of messages output by solver routines:
% 0 - No output.
% 1 - Error messages only.
% 2 - Normal output.
% 3 - Full output (includes informational messages).
%
% scale (default: 1). Scaling option:
% 0 - No scaling.
% 1 - Equilibration scaling.
% 2 - Geometric mean scaling, then equilibration scaling.
% 3 - Geometric then Equilibrium scaling
% 4 - Round to nearest power of 2 scaling
%
% dual (default: 0). Dual simplex option:
% 0 - Do not use the dual simplex.
% 1 - If initial basic solution is dual feasible, use
% the dual simplex.
% 2- Use two phase dual simplex, or if primal simplex
% if dual fails
%
% price (default: 1). Pricing option (for both primal and dual simplex):
% 0 - Textbook pricing.
% 1 - Steepest edge pricing.
%
% r_test (default: 1). Ratio test Technique:
% 0 - stardard (textbook)
% 1 - Harris's two-pass ratio test
%
% round (default: 0). Solution rounding option:
%
% 0 - Report all primal and dual values "as is".
% 1 - Replace tiny primal and dual values by exact zero.
%
% itlim (default: -1). Simplex iterations limit.
% If this value is positive, it is decreased by one each
% time when one simplex iteration has been performed, and
% reaching zero value signals the solver to stop the search.
% Negative value means no iterations limit.
%
% itcnt (default: 200). Output frequency, in iterations.
% This parameter specifies how frequently the solver sends
% information about the solution to the standard output.
%
% presol (default: 1). If this flag is set, the routine
% lpx_simplex solves the problem using the built-in LP presolver.
% Otherwise the LP presolver is not used.
%
% lpsolver (default: 1) Select which solver to use.
% If the problem is a MIP problem this flag will be ignored.
% 1 - Revised simplex method.
% 2 - Interior point method.
% 3 - Simplex method with exact arithmatic.
%
% branch (default: 2). Branching heuristic option (for MIP only):
% 0 - Branch on the first variable.
% 1 - Branch on the last variable.
% 2 - Branch on the most fractional variable.
% 3 - Branch using a heuristic by Driebeck and Tomlin.
%
% btrack (default: 2). Backtracking heuristic option (for MIP only):
% 0 - Depth first search.
% 1 - Breadth first search.
% 2 - best local bound
% 3 - Backtrack using the best projection heuristic.
%
% pprocess (default: 2) Pre-processing technique option ( for MIP only ):
% 0 - disable preprocessing
% 1 - perform preprocessing for root only
% 2 - perform preprocessing for all levels
%
% usecuts (default: 1). ( for MIP only ):
% glp_intopt generates and adds cutting planes to
% the MIP problem in order to improve its LP relaxation
% before applying the branch&bound method
% 0 -> all cuts off
% 1 -> Gomoy's mixed integer cuts
% 2 -> Mixed integer rounding cuts
% 3 -> Mixed cover cuts
% 4 -> Clique cuts
% 5 -> all cuts
%
% binarize (default: 0 ) Binarizeation option ( for mip only ):
% ( used only if presolver is enabled )
% 0 -> do not use binarization
% 1 -> replace general integer variables by binary ones
%
% save (default: 0). If this parameter is nonzero save a copy of
% the original problem to file. You can specify the
% file name and format by using the 'savefilename' and
% 'savefiletype' parameters (see in String Parameters Section
% here below).
% If previous parameters are not defined, the original problem
% is saved with CPLEX LP format in the default file "outpb.lp".
%
% mpsinfo (default: 1) If this is set,
% the interface writes to file several comment cards,
% which contains some information about the problem.
% Otherwise the routine writes no comment cards.
%
% mpsobj ( default: 2) This parameter tells the
% routine how to output the objective function row:
% 0 - never output objective function row
% 1 - always output objective function row
% 2 - output objective function row if the problem has
% no free rows
%
% mpsorig (default: 0) If this is set, the
% routine uses the original symbolic names of rows and
% columns. Otherwise the routine generates plain names
% using ordinal numbers of rows and columns.
%
% mpswide (default: 1) If this is set, the
% routine uses all data fields. Otherwise the routine
% keeps fields 5 and 6 empty.
%
% mpsfree (default: 0) If this is set, the routine
% omits column and vector names every time when possible
% (free style). Otherwise the routine never omits these
% names (pedantic style).
%
%
% Real parameters:
% relax (default: 0.07). Relaxation parameter used
% in the ratio test. If it is zero, the textbook ratio test
% is used. If it is non-zero (should be positive), Harris'
% two-pass ratio test is used. In the latter case on the
% first pass of the ratio test basic variables (in the case
% of primal simplex) or reduced costs of non-basic variables
% (in the case of dual simplex) are allowed to slightly violate
% their bounds, but not more than relax*tolbnd or relax*toldj
% (thus, relax is a percentage of tolbnd or toldj).
%
% tolbnd (default: 10e-7). Relative tolerance used
% to check ifthe current basic solution is primal feasible.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% toldj (default: 10e-7). Absolute tolerance used to
% check if the current basic solution is dual feasible. It
% is not recommended that you change this parameter unless
% you have a detailed understanding of its purpose.
%
% tolpiv (default: 10e-9). Relative tolerance used
% to choose eligible pivotal elements of the simplex table.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% objll ( default: -DBL_MAX). Lower limit of the
% objective function. If on the phase II the objective
% function reaches this limit and continues decreasing, the
% solver stops the search. This parameter is used in the
% dual simplex method only.
%
% objul (default: +DBL_MAX). Upper limit of the
% objective function. If on the phase II the objective
% function reaches this limit and continues increasing,
% the solver stops the search. This parameter is used in
% the dual simplex only.
%
% tmlim (default: -1.0). Searching time limit, in
% seconds. If this value is positive, it is decreased each
% time when one simplex iteration has been performed by the
% amount of time spent for the iteration, and reaching zero
% value signals the solver to stop the search. Negative
% value means no time limit.
%
% outdly (default: 0.0). Output delay, in seconds.
% This parameter specifies how long the solver should
% delay sending information about the solution to the standard
% output. Non-positive value means no delay.
%
% tolint (default: 10e-5). Relative tolerance used
% to check if the current basic solution is integer
% feasible. It is not recommended that you change this
% parameter unless you have a detailed understanding of
% its purpose.
%
% tolobj (default: 10e-7). Relative tolerance used
% to check if the value of the objective function is not
% better than in the best known integer feasible solution.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% mipgap (default: 0.0) The relative mip gap tolerance. If the
% relative mip gap for currently known best integer feasible
% solution falls below this tolerance, the solver terminates
% the search. This allows obtaining suboptimal interger
% feasible solutions if solving the problem to optimality
% takes too long.
%
% String Parameters:
% savefilename (default: "outpb"). Specify the name to use to
% save the original problem. MEX interface looks for
% this parameter if 'save' parameter is set to 1. If
% no name is provided "outpb" will be used.
% savefiletype (default: CPLEX format). Specify the format type
% used to save the file. Only the following options
% are allowed:
% 'fixedmps' - fixed MPS format (.mps).
% 'freemps' - free MPS format (.mps).
% 'cplex' - CPLEX LP format (.lp).
% 'plain' - plain text (.txt).
%
% Output values:
% xopt = The optimizer (the value of the decision variables at the optimum).
%
% fopt = The optimum value of the objective function.
%
% status = Status of the optimization.
% 1 solution is undefined
% 2 solution is feasible
% 3 solution is infeasible
% 4 no feasible solution exists
% 5 solution is optimal
% 6 solution is unbounded
%
% If an error occurs, status will contain one of the following
% codes.
% Simplex method:
% 101 invalid basis
% 102 singular matrix
% 103 ill-conditioned matrix
% 104 invalid bounds
% 105 solver failed
% 106 objective lower limit reached
% 107 objective upper limit reached
% 108 iteration limit exceeded
% 109 time limit exceeded
% 110 no primal feasible solution
% 111 no dual feasible solution
%
% Mixed integer problem, interior point method:
% 204 incorrect bounds
% 205 solver failure
% 209 time limit exceeded
% 210 no primal feasible solution
% 212 missing basis
% 214 MIP gap tolerance reached
% 305 problem with no rows/columsn
% 308 iteration limit exceeded
% 316 very slow convergence/divergence
% 317 numerical instability in solving Newtonian system
%
% extra = A data structure containing the following fields:
% lambda - Dual variables.
% redcosts - Reduced Costs.
% time - Time (in seconds) used for solving LP/MIP problem.
% mem - Memory (in Kbytes) used for solving LP/MIP problem.
%
% Example:
%
% c = [10, 6, 4]';
% a = [ 1, 1, 1;
% 10, 4, 5;
% 2, 2, 6];
% b = [100, 600, 300]';
% lb = [0, 0, 0]';
% ub = [];
% ctype = "UUU";
% vartype = "CCC";
% s = -1;
%
% param.msglev = 1;
% param.itlim = 100;
%
% [xmin, fmin, status, extra] = ...
% glpk (c, a, b, lb, ub, ctype, vartype, s, param);
%
% See also: qpng.
%
% Copyright 2005-2007 Nicolo' Giorgetti
% Email: Nicolo' Giorgetti
% updated by Niels Klitgord March 2009
% Email: Niels Klitgord
% This file is part of GLPKMEX.
%
% GLPKMEX is free software; you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2, or (at your option)
% any later version.
%
% This part of code is distributed with the FURTHER condition that it
% can be linked to the Matlab libraries and/or use it inside the Matlab
% environment.
%
% GLPKMEX is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with GLPKMEX; see the file COPYING. If not, write to the Free
% Software Foundation, 59 Temple Place - Suite 330, Boston, MA
% 02111-1307, USA.
%
% [xopt, fmin, status, extra] = glpk (c, a, b, lb, ub, ctype, vartype,
% sense, param)
%
% Solve an LP/MILP problem using the GNU GLPK library. Given three
% arguments, glpk solves the following standard LP:
%
% min C'*x subject to A*x <= b
%
% but may also solve problems of the form
%
% [ min | max ] C'*x
% subject to
% A*x [ "=" | "<=" | ">=" ] b
% x >= LB
% x <= UB
%
% Input arguments:
% c = A column array containing the objective function coefficients.
%
% A = A matrix containing the constraints coefficients.
%
% b = A column array containing the right-hand side value for each constraint
% in the constraint matrix.
%
% lb = An array containing the lower bound on each of the variables. If
% lb is not supplied (or an empty array) the default lower bound for the variables is
% minus infinite.
%
% ub = An array containing the upper bound on each of the variables. If
% ub is not supplied (or an empty array) the default upper bound is assumed to be
% infinite.
%
% ctype = An array of characters containing the sense of each constraint in the
% constraint matrix. Each element of the array may be one of the
% following values
% 'F' Free (unbounded) variable (the constraint is ignored).
% 'U' Variable with upper bound ( A(i,:)*x <= b(i)).
% 'S' Fixed Variable (A(i,:)*x = b(i)).
% 'L' Variable with lower bound (A(i,:)*x >= b(i)).
% 'D' Double-bounded variable (A(i,:)*x >= -b(i) and A(i,:)*x <= b(i)).
%
% vartype = A column array containing the types of the variables.
% 'C' Continuous variable.
% 'I' Integer variable
% 'B' Binary variable
%
% sense = If sense is 1, the problem is a minimization. If sense is
% -1, the problem is a maximization. The default value is 1.
%
% param = A structure containing the following parameters used to define the
% behavior of solver. Missing elements in the structure take on default
% values, so you only need to set the elements that you wish to change
% from the default.
%
% Integer parameters:
% msglev (default: 1)
% Level of messages output by solver routines:
% 0 - No output.
% 1 - Error messages only.
% 2 - Normal output.
% 3 - Full output (includes informational messages).
%
% scale (default: 1). Scaling option:
% 0 - No scaling.
% 1 - Equilibration scaling.
% 2 - Geometric mean scaling, then equilibration scaling.
% 3 - Geometric then Equilibrium scaling
% 4 - Round to nearest power of 2 scaling
%
% dual (default: 0). Dual simplex option:
% 0 - Do not use the dual simplex.
% 1 - If initial basic solution is dual feasible, use
% the dual simplex.
% 2- Use two phase dual simplex, or if primal simplex
% if dual fails
%
% price (default: 1). Pricing option (for both primal and dual simplex):
% 0 - Textbook pricing.
% 1 - Steepest edge pricing.
%
% r_test (default: 1). Ratio test Technique:
% 0 - stardard (textbook)
% 1 - Harris's two-pass ratio test
%
% round (default: 0). Solution rounding option:
%
% 0 - Report all primal and dual values "as is".
% 1 - Replace tiny primal and dual values by exact zero.
%
% itlim (default: -1). Simplex iterations limit.
% If this value is positive, it is decreased by one each
% time when one simplex iteration has been performed, and
% reaching zero value signals the solver to stop the search.
% Negative value means no iterations limit.
%
% itcnt (default: 200). Output frequency, in iterations.
% This parameter specifies how frequently the solver sends
% information about the solution to the standard output.
%
% presol (default: 1). If this flag is set, the routine
% lpx_simplex solves the problem using the built-in LP presolver.
% Otherwise the LP presolver is not used.
%
% lpsolver (default: 1) Select which solver to use.
% If the problem is a MIP problem this flag will be ignored.
% 1 - Revised simplex method.
% 2 - Interior point method.
% 3 - Simplex method with exact arithmatic.
%
% branch (default: 2). Branching heuristic option (for MIP only):
% 0 - Branch on the first variable.
% 1 - Branch on the last variable.
% 2 - Branch on the most fractional variable.
% 3 - Branch using a heuristic by Driebeck and Tomlin.
%
% btrack (default: 2). Backtracking heuristic option (for MIP only):
% 0 - Depth first search.
% 1 - Breadth first search.
% 2 - best local bound
% 3 - Backtrack using the best projection heuristic.
%
% pprocess (default: 2) Pre-processing technique option ( for MIP only ):
% 0 - disable preprocessing
% 1 - perform preprocessing for root only
% 2 - perform preprocessing for all levels
%
% usecuts (default: 1). ( for MIP only ):
% glp_intopt generates and adds cutting planes to
% the MIP problem in order to improve its LP relaxation
% before applying the branch&bound method
% 0 -> all cuts off
% 1 -> Gomoy's mixed integer cuts
% 2 -> Mixed integer rounding cuts
% 3 -> Mixed cover cuts
% 4 -> Clique cuts
% 5 -> all cuts
%
% binarize (default: 0 ) Binarizeation option ( for mip only ):
% ( used only if presolver is enabled )
% 0 -> do not use binarization
% 1 -> replace general integer variables by binary ones
%
% save (default: 0). If this parameter is nonzero save a copy of
% the original problem to file. You can specify the
% file name and format by using the 'savefilename' and
% 'savefiletype' parameters (see in String Parameters Section
% here below).
% If previous parameters are not defined, the original problem
% is saved with CPLEX LP format in the default file "outpb.lp".
%
% mpsinfo (default: 1) If this is set,
% the interface writes to file several comment cards,
% which contains some information about the problem.
% Otherwise the routine writes no comment cards.
%
% mpsobj ( default: 2) This parameter tells the
% routine how to output the objective function row:
% 0 - never output objective function row
% 1 - always output objective function row
% 2 - output objective function row if the problem has
% no free rows
%
% mpsorig (default: 0) If this is set, the
% routine uses the original symbolic names of rows and
% columns. Otherwise the routine generates plain names
% using ordinal numbers of rows and columns.
%
% mpswide (default: 1) If this is set, the
% routine uses all data fields. Otherwise the routine
% keeps fields 5 and 6 empty.
%
% mpsfree (default: 0) If this is set, the routine
% omits column and vector names every time when possible
% (free style). Otherwise the routine never omits these
% names (pedantic style).
%
%
% Real parameters:
% relax (default: 0.07). Relaxation parameter used
% in the ratio test. If it is zero, the textbook ratio test
% is used. If it is non-zero (should be positive), Harris'
% two-pass ratio test is used. In the latter case on the
% first pass of the ratio test basic variables (in the case
% of primal simplex) or reduced costs of non-basic variables
% (in the case of dual simplex) are allowed to slightly violate
% their bounds, but not more than relax*tolbnd or relax*toldj
% (thus, relax is a percentage of tolbnd or toldj).
%
% tolbnd (default: 10e-7). Relative tolerance used
% to check ifthe current basic solution is primal feasible.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% toldj (default: 10e-7). Absolute tolerance used to
% check if the current basic solution is dual feasible. It
% is not recommended that you change this parameter unless
% you have a detailed understanding of its purpose.
%
% tolpiv (default: 10e-9). Relative tolerance used
% to choose eligible pivotal elements of the simplex table.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% objll ( default: -DBL_MAX). Lower limit of the
% objective function. If on the phase II the objective
% function reaches this limit and continues decreasing, the
% solver stops the search. This parameter is used in the
% dual simplex method only.
%
% objul (default: +DBL_MAX). Upper limit of the
% objective function. If on the phase II the objective
% function reaches this limit and continues increasing,
% the solver stops the search. This parameter is used in
% the dual simplex only.
%
% tmlim (default: -1.0). Searching time limit, in
% seconds. If this value is positive, it is decreased each
% time when one simplex iteration has been performed by the
% amount of time spent for the iteration, and reaching zero
% value signals the solver to stop the search. Negative
% value means no time limit.
%
% outdly (default: 0.0). Output delay, in seconds.
% This parameter specifies how long the solver should
% delay sending information about the solution to the standard
% output. Non-positive value means no delay.
%
% tolint (default: 10e-5). Relative tolerance used
% to check if the current basic solution is integer
% feasible. It is not recommended that you change this
% parameter unless you have a detailed understanding of
% its purpose.
%
% tolobj (default: 10e-7). Relative tolerance used
% to check if the value of the objective function is not
% better than in the best known integer feasible solution.
% It is not recommended that you change this parameter
% unless you have a detailed understanding of its purpose.
%
% mipgap (default: 0.0) The relative mip gap tolerance. If the
% relative mip gap for currently known best integer feasible
% solution falls below this tolerance, the solver terminates
% the search. This allows obtaining suboptimal interger
% feasible solutions if solving the problem to optimality
% takes too long.
%
% String Parameters:
% savefilename (default: "outpb"). Specify the name to use to
% save the original problem. MEX interface looks for
% this parameter if 'save' parameter is set to 1. If
% no name is provided "outpb" will be used.
% savefiletype (default: CPLEX format). Specify the format type
% used to save the file. Only the following options
% are allowed:
% 'fixedmps' - fixed MPS format (.mps).
% 'freemps' - free MPS format (.mps).
% 'cplex' - CPLEX LP format (.lp).
% 'plain' - plain text (.txt).
%
% Output values:
% xopt = The optimizer (the value of the decision variables at the optimum).
%
% fopt = The optimum value of the objective function.
%
% status = Status of the optimization.
% 1 solution is undefined
% 2 solution is feasible
% 3 solution is infeasible
% 4 no feasible solution exists
% 5 solution is optimal
% 6 solution is unbounded
%
% If an error occurs, status will contain one of the following
% codes.
% Simplex method:
% 101 invalid basis
% 102 singular matrix
% 103 ill-conditioned matrix
% 104 invalid bounds
% 105 solver failed
% 106 objective lower limit reached
% 107 objective upper limit reached
% 108 iteration limit exceeded
% 109 time limit exceeded
% 110 no primal feasible solution
% 111 no dual feasible solution
%
% Mixed integer problem, interior point method:
% 204 incorrect bounds
% 205 solver failure
% 209 time limit exceeded
% 210 no primal feasible solution
% 212 missing basis
% 214 MIP gap tolerance reached
% 305 problem with no rows/columsn
% 308 iteration limit exceeded
% 316 very slow convergence/divergence
% 317 numerical instability in solving Newtonian system
%
% extra = A data structure containing the following fields:
% lambda - Dual variables.
% redcosts - Reduced Costs.
% time - Time (in seconds) used for solving LP/MIP problem.
% mem - Memory (in Kbytes) used for solving LP/MIP problem.
%
% Example:
%
% c = [10, 6, 4]';
% a = [ 1, 1, 1;
% 10, 4, 5;
% 2, 2, 6];
% b = [100, 600, 300]';
% lb = [0, 0, 0]';
% ub = [];
% ctype = "UUU";
% vartype = "CCC";
% s = -1;
%
% param.msglev = 1;
% param.itlim = 100;
%
% [xmin, fmin, status, extra] = ...
% glpk (c, a, b, lb, ub, ctype, vartype, s, param);
%
% See also: qpng.
%
% Copyright 2005-2007 Nicolo' Giorgetti
% Email: Nicolo' Giorgetti
% updated by Niels Klitgord March 2009
% Email: Niels Klitgord
% This file is part of GLPKMEX.
%
% GLPKMEX is free software; you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2, or (at your option)
% any later version.
%
% This part of code is distributed with the FURTHER condition that it
% can be linked to the Matlab libraries and/or use it inside the Matlab
% environment.
%
% GLPKMEX is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with GLPKMEX; see the file COPYING. If not, write to the Free
% Software Foundation, 59 Temple Place - Suite 330, Boston, MA
% 02111-1307, USA.
No comments:
Post a Comment
Thank you