annotate scripts/optimization/glpk.m @ 5232:9b776f5a33eb

[project @ 2005-03-22 16:16:30 by jwe]
author jwe
date Tue, 22 Mar 2005 16:18:26 +0000
parents
children bdf892d3b024
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5232
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
1 function varargout=glpk(varargin)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
2 ## GLPK - An Octave Interface for the GNU GLPK library
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
3 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
4 ## This routine calls the glpk library to solve an LP/MIP problem. A typical
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
5 ## LP problem has following structure:
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
6 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
7 ## [min|max] C'x
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
8 ## s.t.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
9 ## Ax ["="|"<="|">="] b
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
10 ## {x <= UB}
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
11 ## {x >= LB}
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
12 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
13 ## The calling syntax is:
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
14 ## [XOPT,FOPT,STATUS,EXTRA]=glpkmex(SENSE,C,...
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
15 ## A,B,CTYPE,LB,UB,...
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
16 ## VARTYPE,PARAM,LPSOLVER,SAVE)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
17 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
18 ## For a quick reference to the syntax just type glpk at command prompt.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
19 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
20 ## The minimum number of input arguments is 4 (SENSE,C,A,B). In this case we
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
21 ## assume all the constraints are '<=' and all the variables are continuous.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
22 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
23 ## --- INPUTS ---
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
24 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
25 ## SENSE: indicates whether the problem is a minimization
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
26 ## or maximization problem.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
27 ## SENSE = 1 minimize
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
28 ## SENSE = -1 maximize.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
29 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
30 ## C: A column array containing the objective function
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
31 ## coefficients.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
32 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
33 ## A: A matrix containing the constraints coefficients.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
34 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
35 ## B: A column array containing the right-hand side value for
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
36 ## each constraint in the constraint matrix.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
37 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
38 ## CTYPE: A column array containing the sense of each constraint
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
39 ## in the constraint matrix.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
40 ## CTYPE(i) = 'F' Free (unbounded) variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
41 ## CTYPE(i) = 'U' "<=" Variable with upper bound
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
42 ## CTYPE(i) = 'S' "=" Fixed Variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
43 ## CTYPE(i) = 'L' ">=" Variable with lower bound
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
44 ## CTYPE(i) = 'D' Double-bounded variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
45 ## (This is case sensitive).
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
46 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
47 ## LB: An array of at least length numcols containing the lower
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
48 ## bound on each of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
49 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
50 ## UB: An array of at least length numcols containing the upper
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
51 ## bound on each of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
52 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
53 ## VARTYPE: A column array containing the types of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
54 ## VARTYPE(i) = 'C' continuous variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
55 ## VARTYPE(i) = 'I' Integer variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
56 ## (This is case sensitive).
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
57 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
58 ## PARAM: A structure containing some parameters used to define
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
59 ## the behavior of solver. For more details type
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
60 ## HELP GLPKPARAMS.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
61 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
62 ## LPSOLVER: Selects which solver using to solve LP problems.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
63 ## LPSOLVER=1 Revised Simplex Method
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
64 ## LPSOLVER=2 Interior Point Method
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
65 ## If the problem is a MIP problem this flag will be ignored.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
66 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
67 ## SAVE: Saves a copy of the problem if SAVE<>0.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
68 ## The file name can not be specified and defaults to "outpb.lp".
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
69 ## The output file is CPLEX LP format.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
70 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
71 ## --- OUTPUTS ---
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
72 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
73 ## XOPT: The optimizer.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
74 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
75 ## FOPT: The optimum.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
76 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
77 ## STATUS: Status of the optimization.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
78 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
79 ## - Simplex Method -
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
80 ## Value Code
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
81 ## 180 LPX_OPT solution is optimal
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
82 ## 181 LPX_FEAS solution is feasible
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
83 ## 182 LPX_INFEAS solution is infeasible
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
84 ## 183 LPX_NOFEAS problem has no feasible solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
85 ## 184 LPX_UNBND problem has no unbounded solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
86 ## 185 LPX_UNDEF solution status is undefined
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
87 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
88 ## - Interior Point Method -
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
89 ## Value Code
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
90 ## 150 LPX_T_UNDEF the interior point method is undefined
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
91 ## 151 LPX_T_OPT the interior point method is optimal
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
92 ## * Note that additional status codes may appear in
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
93 ## the future versions of this routine *
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
94 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
95 ## - Mixed Integer Method -
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
96 ## Value Code
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
97 ## 170 LPX_I_UNDEF the status is undefined
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
98 ## 171 LPX_I_OPT the solution is integer optimal
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
99 ## 172 LPX_I_FEAS solution integer feasible but
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
100 ## its optimality has not been proven
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
101 ## 173 LPX_I_NOFEAS no integer feasible solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
102 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
103 ## EXTRA: A data structure containing the following fields:
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
104 ## LAMBDA Dual variables
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
105 ## REDCOSTS Reduced Costs
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
106 ## TIME Time (in seconds) used for solving LP/MIP problem in seconds.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
107 ## MEM Memory (in bytes) used for solving LP/MIP problem.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
108 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
109 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
110 ## In case of error the glpkmex returns one of the
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
111 ## following codes (these codes are in STATUS). For more informations on
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
112 ## the causes of these codes refer to the GLPK reference manual.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
113 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
114 ## Value Code
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
115 ## 204 LPX_E_FAULT unable to start the search
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
116 ## 205 LPX_E_OBJLL objective function lower limit reached
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
117 ## 206 LPX_E_OBJUL objective function upper limit reached
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
118 ## 207 LPX_E_ITLIM iterations limit exhausted
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
119 ## 208 LPX_E_TMLIM time limit exhausted
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
120 ## 209 LPX_E_NOFEAS no feasible solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
121 ## 210 LPX_E_INSTAB numerical instability
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
122 ## 211 LPX_E_SING problems with basis matrix
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
123 ## 212 LPX_E_NOCONV no convergence (interior)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
124 ## 213 LPX_E_NOPFS no primal feas. sol. (LP presolver)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
125 ## 214 LPX_E_NODFS no dual feas. sol. (LP presolver)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
126 ##
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
127
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
128 % --- CODE ---
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
129 % If there is no input output the version and syntax
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
130 if nargin==0
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
131 printf("glpk: An Octave interface to the GLPK library\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
132 printf("Version: 1.0\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
133 printf("\nSyntax: [xopt,fopt,status,extra]=glpk(sense,c,a,b,ctype,lb,ub,vartype,param,lpsolver,save)\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
134 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
135 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
136
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
137 % If there are less than 4 arguments output an error message
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
138 if nargin<4
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
139 error("At least 4 inputs required (sense,c,a,b)\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
140 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
141 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
142
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
143 % At least 2 outputs required
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
144 if nargout<2
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
145 error("2 outputs required\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
146 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
147 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
148
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
149 % 1) Sense of optimization
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
150 sense=varargin{1};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
151
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
152 % 2) Cost vector
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
153 c=varargin{2};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
154
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
155 if (all(size(c)>1) | iscomplex(c) | ischar(c))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
156 error("C must be a real vector\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
157 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
158 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
159 nx=length(c);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
160 if size(c,1) ~= nx
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
161 c=c';
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
162 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
163
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
164 % 3) Matrix constraint
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
165 a=varargin{3};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
166 if isempty(a)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
167 error("A cannot be an empty matrix\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
168 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
169 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
170 [nc, nxa]=size(a);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
171 if (ischar(a) | iscomplex(a) | (nxa ~= nx))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
172 error("A must be a real valued %d by %d matrix\n",nc,nx);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
173 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
174 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
175
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
176 % 4) RHS
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
177 b=varargin{4};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
178 if isempty(b)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
179 error("B cannot be an empty vector\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
180 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
181 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
182 if (ischar(b) | iscomplex(b) | (length(b) ~= nc))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
183 error("B must be a real valued %d by 1 vector\n",nc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
184 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
185 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
186
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
187 % 5) Sense of each constraint
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
188 ctype=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
189 if nargin>4
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
190 ctype=varargin{5};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
191 if isempty(ctype)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
192 ctype=char('U'*ones(nc,1));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
193 elseif (isnumeric(ctype) | all(size(ctype)>1) | (length(ctype) ~= nc))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
194 error("CTYPE must be a char valued %d by 1 column vector\n",nc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
195 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
196 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
197 for i=1:nc
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
198 if (ctype(i)!='F' & ctype(i)!='U' & ctype(i)!='S' & ctype(i)!='L' & ctype(i)!='D')
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
199 error("CTYPE must contain only F,U,S,L and D\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
200 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
201 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
202 endfor
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
203 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
204 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
205 ctype=char('U'*ones(nc,1));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
206 end
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
207
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
208 % 6) Vector with the lower bound of each variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
209 lb=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
210 if nargin>5
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
211 lb=varargin{6};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
212 if isempty(lb)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
213 lb=-Inf*ones(nx,1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
214 elseif (ischar(lb) | iscomplex(lb) | all(size(lb)>1) | (length(lb)~=nx))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
215 error("LB must be a real valued %d by 1 column vector\n",nx);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
216 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
217 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
218 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
219 lb=-Inf*ones(nx,1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
220 end
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
221
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
222 % 7) Vector with the upper bound of each variable
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
223 ub=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
224 if nargin>6
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
225 ub=varargin{7};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
226 if isempty(ub)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
227 ub=Inf*ones(nx,1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
228 elseif (ischar(ub) | iscomplex(ub) | all(size(ub)>1) | (length(ub)~=nx))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
229 error("UB must be a real valued %d by 1 column vector\n",nx);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
230 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
231 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
232 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
233 ub=Inf*ones(nx,1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
234 end
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
235
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
236 % 8) Vector with the type of variables
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
237 vartype=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
238 if nargin>7
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
239 vartype=varargin{8};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
240 if isempty(vartype)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
241 vartype=char('C'*ones(nx,1));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
242 elseif (isnumeric(vartype) | all(size(vartype)>1) | (length(vartype)~=nx))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
243 error("VARTYPE must be a char valued %d by 1 column vector\n",nx);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
244 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
245 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
246 for i=1:nx
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
247 if (vartype(i)!='C' & vartype(i)!='I')
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
248 error("VARTYPE must contain only C or I\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
249 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
250 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
251 endfor
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
252 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
253 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
254 vartype=char('C'*ones(nx,1)); % As default we consider continuous vars
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
255 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
256
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
257 % 9) Parameters vector
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
258 param=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
259 if nargin>8
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
260 param=varargin{9};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
261 if !isstruct(param)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
262 error("PARAM must be a structure\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
263 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
264 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
265 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
266 param=struct;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
267 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
268
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
269 % 10) Select solver method: simplex or interior point
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
270 lpsolver=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
271 if nargin>9
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
272 lpsolver=varargin{10};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
273 if (!isnumeric(lpsolver) | all(size(lpsolver)>1))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
274 error("LPSOLVER must be a real scalar value\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
275 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
276 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
277 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
278 lpsolver=1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
279 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
280
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
281 % 11) Save the problem
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
282 savepb=[];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
283 if nargin>10
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
284 savepb=varargin{11};
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
285 if (!isnumeric(savepb) | all(size(savepb)>1))
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
286 error("LPSOLVER must be a real scalar value\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
287 return;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
288 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
289 else
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
290 savepb=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
291 end
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
292
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
293 if nargin>11
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
294 warning("Extra parameters ignored\n");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
295 endif
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
296
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
297 try
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
298 [xopt, fmin, status, extra]=glpkoct(sense,c,a,b,ctype,lb,ub,vartype,param,lpsolver,savepb);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
299 catch
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
300 error("Problems with glpkoct");
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
301 end_try_catch
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
302
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
303 varargout{1}=xopt;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
304 varargout{2}=fmin;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
305 varargout{3}=status;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
306 varargout{4}=extra;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
307
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
308
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
309 endfunction