|
1 %* glpk04.tex *% |
|
2 |
|
3 \chapter{Advanced API Routines} |
|
4 |
|
5 \section{Background} |
|
6 \label{basbgd} |
|
7 |
|
8 Using vector and matrix notations LP problem (1.1)---(1.3) (see Section |
|
9 \ref{seclp}, page \pageref{seclp}) can be stated as follows: |
|
10 |
|
11 \medskip |
|
12 |
|
13 \noindent |
|
14 \hspace{.5in} minimize (or maximize) |
|
15 $$z=c^Tx_S+c_0\eqno(3.1)$$ |
|
16 \hspace{.5in} subject to linear constraints |
|
17 $$x_R=Ax_S\eqno(3.2)$$ |
|
18 \hspace{.5in} and bounds of variables |
|
19 $$ |
|
20 \begin{array}{l@{\ }c@{\ }l@{\ }c@{\ }l} |
|
21 l_R&\leq&x_R&\leq&u_R\\ |
|
22 l_S&\leq&x_S&\leq&u_S\\ |
|
23 \end{array}\eqno(3.3) |
|
24 $$ |
|
25 where: |
|
26 |
|
27 \noindent |
|
28 $x_R=(x_1,\dots,x_m)$ is the vector of auxiliary variables; |
|
29 |
|
30 \noindent |
|
31 $x_S=(x_{m+1},\dots,x_{m+n})$ is the vector of structural |
|
32 variables; |
|
33 |
|
34 \noindent |
|
35 $z$ is the objective function; |
|
36 |
|
37 \noindent |
|
38 $c=(c_1,\dots,c_n)$ is the vector of objective coefficients; |
|
39 |
|
40 \noindent |
|
41 $c_0$ is the constant term (``shift'') of the objective function; |
|
42 |
|
43 \noindent |
|
44 $A=(a_{11},\dots,a_{mn})$ is the constraint matrix; |
|
45 |
|
46 \noindent |
|
47 $l_R=(l_1,\dots,l_m)$ is the vector of lower bounds of auxiliary |
|
48 variables; |
|
49 |
|
50 \noindent |
|
51 $u_R=(u_1,\dots,u_m)$ is the vector of upper bounds of auxiliary |
|
52 variables; |
|
53 |
|
54 \noindent |
|
55 $l_S=(l_{m+1},\dots,l_{m+n})$ is the vector of lower bounds of |
|
56 structural variables; |
|
57 |
|
58 \noindent |
|
59 $u_S=(u_{m+1},\dots,u_{m+n})$ is the vector of upper bounds of |
|
60 structural variables. |
|
61 |
|
62 \medskip |
|
63 |
|
64 From the simplex method's standpoint there is no difference between |
|
65 auxiliary and structural variables. This allows combining all these |
|
66 variables into one vector that leads to the following problem statement: |
|
67 |
|
68 \medskip |
|
69 |
|
70 \noindent |
|
71 \hspace{.5in} minimize (or maximize) |
|
72 $$z=(0\ |\ c)^Tx+c_0\eqno(3.4)$$ |
|
73 \hspace{.5in} subject to linear constraints |
|
74 $$(I\ |-\!A)x=0\eqno(3.5)$$ |
|
75 \hspace{.5in} and bounds of variables |
|
76 $$l\leq x\leq u\eqno(3.6)$$ |
|
77 where: |
|
78 |
|
79 \noindent |
|
80 $x=(x_R\ |\ x_S)$ is the $(m+n)$-vector of (all) variables; |
|
81 |
|
82 \noindent |
|
83 $(0\ |\ c)$ is the $(m+n)$-vector of objective |
|
84 coefficients;\footnote{Subvector 0 corresponds to objective coefficients |
|
85 at auxiliary variables.} |
|
86 |
|
87 \noindent |
|
88 $(I\ |-\!A)$ is the {\it augmented} constraint |
|
89 $m\times(m+n)$-matrix;\footnote{Note that due to auxiliary variables |
|
90 matrix $(I\ |-\!A)$ contains the unity submatrix and therefore has full |
|
91 rank. This means, in particular, that the system (3.5) has no linearly |
|
92 dependent constraints.} |
|
93 |
|
94 \noindent |
|
95 $l=(l_R\ |\ l_S)$ is the $(m+n)$-vector of lower bounds of (all) |
|
96 variables; |
|
97 |
|
98 \noindent |
|
99 $u=(u_R\ |\ u_S)$ is the $(m+n)$-vector of upper bounds of (all) |
|
100 variables. |
|
101 |
|
102 \medskip |
|
103 |
|
104 By definition an {\it LP basic solution} geometrically is a point in |
|
105 the space of all variables, which is the intersection of planes |
|
106 corresponding to active constraints\footnote{A constraint is called |
|
107 {\it active} if in a given point it is satisfied as equality, otherwise |
|
108 it is called {\it inactive}.}. The space of all variables has the |
|
109 dimension $m+n$, therefore, to define some basic solution we have to |
|
110 define $m+n$ active constraints. Note that $m$ constraints (3.5) being |
|
111 linearly independent equalities are always active, so remaining $n$ |
|
112 active constraints can be chosen only from bound constraints (3.6). |
|
113 |
|
114 A variable is called {\it non-basic}, if its (lower or upper) bound is |
|
115 active, otherwise it is called {\it basic}. Since, as was said above, |
|
116 exactly $n$ bound constraints must be active, in any basic solution |
|
117 there are always $n$ non-basic variables and $m$ basic variables. |
|
118 (Note that a free variable also can be non-basic. Although such |
|
119 variable has no bounds, we can think it as the difference between two |
|
120 non-negative variables, which both are non-basic in this case.) |
|
121 |
|
122 Now consider how to determine numeric values of all variables for a |
|
123 given basic solution. |
|
124 |
|
125 Let $\Pi$ be an appropriate permutation matrix of the order $(m+n)$. |
|
126 Then we can write: |
|
127 $$\left(\begin{array}{@{}c@{}}x_B\\x_N\\\end{array}\right)= |
|
128 \Pi\left(\begin{array}{@{}c@{}}x_R\\x_S\\\end{array}\right)=\Pi x, |
|
129 \eqno(3.7)$$ |
|
130 where $x_B$ is the vector of basic variables, $x_N$ is the vector of |
|
131 non-basic variables, $x=(x_R\ |\ x_S)$ is the vector of all variables |
|
132 in the original order. In this case the system of linear constraints |
|
133 (3.5) can be rewritten as follows: |
|
134 $$(I\ |-\!A)\Pi^T\Pi x=0\ \ \ \Rightarrow\ \ \ (B\ |\ N) |
|
135 \left(\begin{array}{@{}c@{}}x_B\\x_N\\\end{array}\right)=0,\eqno(3.8)$$ |
|
136 where |
|
137 $$(B\ |\ N)=(I\ |-\!A)\Pi^T.\eqno(3.9)$$ |
|
138 Matrix $B$ is a square non-singular $m\times m$-matrix, which is |
|
139 composed from columns of the augmented constraint matrix corresponding |
|
140 to basic variables. It is called the {\it basis matrix} or simply the |
|
141 {\it basis}. Matrix $N$ is a rectangular $m\times n$-matrix, which is |
|
142 composed from columns of the augmented constraint matrix corresponding |
|
143 to non-basic variables. |
|
144 |
|
145 From (3.8) it follows that: |
|
146 $$Bx_B+Nx_N=0,\eqno(3.10)$$ |
|
147 therefore, |
|
148 $$x_B=-B^{-1}Nx_N.\eqno(3.11)$$ |
|
149 Thus, the formula (3.11) shows how to determine numeric values of basic |
|
150 variables $x_B$ assuming that non-basic variables $x_N$ are fixed on |
|
151 their active bounds. |
|
152 |
|
153 The $m\times n$-matrix |
|
154 $$\Xi=-B^{-1}N,\eqno(3.12)$$ |
|
155 which appears in (3.11), is called the {\it simplex |
|
156 tableau}.\footnote{This definition corresponds to the GLPK |
|
157 implementation.} It shows how basic variables depend on non-basic |
|
158 variables: |
|
159 $$x_B=\Xi x_N.\eqno(3.13)$$ |
|
160 |
|
161 The system (3.13) is equivalent to the system (3.5) in the sense that |
|
162 they both define the same set of points in the space of (primal) |
|
163 variables, which satisfy to these systems. If, moreover, values of all |
|
164 basic variables satisfy to their bound constraints (3.3), the |
|
165 corresponding basic solution is called {\it (primal) feasible}, |
|
166 otherwise {\it (primal) infeasible}. It is understood that any (primal) |
|
167 feasible basic solution satisfy to all constraints (3.2) and (3.3). |
|
168 |
|
169 The LP theory says that if LP has optimal solution, it has (at least |
|
170 one) basic feasible solution, which corresponds to the optimum. And the |
|
171 most natural way to determine whether a given basic solution is optimal |
|
172 or not is to use the Karush---Kuhn---Tucker optimality conditions. |
|
173 |
|
174 \def\arraystretch{1.5} |
|
175 |
|
176 For the problem statement (3.4)---(3.6) the optimality conditions are |
|
177 the following:\footnote{These conditions can be appiled to any solution, |
|
178 not only to a basic solution.} |
|
179 $$(I\ |-\!A)x=0\eqno(3.14)$$ |
|
180 $$(I\ |-\!A)^T\pi+\lambda_l+\lambda_u=\nabla z=(0\ |\ c)^T\eqno(3.15)$$ |
|
181 $$l\leq x\leq u\eqno(3.16)$$ |
|
182 $$\lambda_l\geq 0,\ \ \lambda_u\leq 0\ \ \mbox{(minimization)} |
|
183 \eqno(3.17)$$ |
|
184 $$\lambda_l\leq 0,\ \ \lambda_u\geq 0\ \ \mbox{(maximization)} |
|
185 \eqno(3.18)$$ |
|
186 $$(\lambda_l)_k(x_k-l_k)=0,\ \ (\lambda_u)_k(x_k-u_k)=0,\ \ k=1,2,\dots, |
|
187 m+n\eqno(3.19)$$ |
|
188 where: |
|
189 $\pi=(\pi_1,\pi_2,\dots,\pi_m)$ is a $m$-vector of Lagrange |
|
190 multipliers for equality constraints (3.5); |
|
191 $\lambda_l=[(\lambda_l)_1,(\lambda_l)_2,\dots,(\lambda_l)_n]$ is a |
|
192 $n$-vector of Lagrange multipliers for lower bound constraints (3.6); |
|
193 $\lambda_u=[(\lambda_u)_1,(\lambda_u)_2,\dots,(\lambda_u)_n]$ is a |
|
194 $n$-vector of Lagrange multipliers for upper bound constraints (3.6). |
|
195 |
|
196 Condition (3.14) is the {\it primal} (original) system of equality |
|
197 constraints (3.5). |
|
198 |
|
199 Condition (3.15) is the {\it dual} system of equality constraints. |
|
200 It requires the gradient of the objective function to be a linear |
|
201 combination of normals to the planes defined by constraints of the |
|
202 original problem. |
|
203 |
|
204 Condition (3.16) is the primal (original) system of bound constraints |
|
205 (3.6). |
|
206 |
|
207 Condition (3.17) (or (3.18) in case of maximization) is the dual system |
|
208 of bound constraints. |
|
209 |
|
210 Condition (3.19) is the {\it complementary slackness condition}. It |
|
211 requires, for each original (auxiliary or structural) variable $x_k$, |
|
212 that either its (lower or upper) bound must be active, or zero bound of |
|
213 the corresponding Lagrange multiplier ($(\lambda_l)_k$ or |
|
214 $(\lambda_u)_k$) must be active. |
|
215 |
|
216 In GLPK two multipliers $(\lambda_l)_k$ and $(\lambda_u)_k$ for each |
|
217 primal (original) variable $x_k$, $k=1,2,\dots,m+n$, are combined into |
|
218 one multiplier: |
|
219 $$\lambda_k=(\lambda_l)_k+(\lambda_u)_k,\eqno(3.20)$$ |
|
220 which is called a {\it dual variable} for $x_k$. This {\it cannot} lead |
|
221 to the ambiguity, because both lower and upper bounds of $x_k$ cannot be |
|
222 active at the same time,\footnote{If $x_k$ is a fixed variable, we can |
|
223 think it as double-bounded variable $l_k\leq x_k\leq u_k$, where |
|
224 $l_k=u_k.$} so at least one of $(\lambda_l)_k$ and $(\lambda_u)_k$ must |
|
225 be equal to zero, and because these multipliers have different signs, |
|
226 the combined multiplier, which is their sum, uniquely defines each of |
|
227 them. |
|
228 |
|
229 \def\arraystretch{1} |
|
230 |
|
231 Using dual variables $\lambda_k$ the dual system of bound constraints |
|
232 (3.17) and (3.18) can be written in the form of so called {\it ``rule of |
|
233 signs''} as follows: |
|
234 |
|
235 \begin{center} |
|
236 \begin{tabular}{|@{\,}c@{$\,$}|@{$\,$}c@{$\,$}|@{$\,$}c@{$\,$}| |
|
237 @{$\,$}c|c@{$\,$}|@{$\,$}c@{$\,$}|@{$\,$}c@{$\,$}|} |
|
238 \hline |
|
239 Original bound&\multicolumn{3}{c|}{Minimization}&\multicolumn{3}{c|} |
|
240 {Maximization}\\ |
|
241 \cline{2-7} |
|
242 constraint&$(\lambda_l)_k$&$(\lambda_u)_k$&$(\lambda_l)_k+ |
|
243 (\lambda_u)_k$&$(\lambda_l)_k$&$(\lambda_u)_k$&$(\lambda_l)_k+ |
|
244 (\lambda_u)_k$\\ |
|
245 \hline |
|
246 $-\infty<x_k<+\infty$&$=0$&$=0$&$\lambda_k=0$&$=0$&$=0$&$\lambda_k=0$\\ |
|
247 $x_k\geq l_k$&$\geq 0$&$=0$&$\lambda_k\geq 0$&$\leq 0$&$=0$&$\lambda_k |
|
248 \leq0$\\ |
|
249 $x_k\leq u_k$&$=0$&$\leq 0$&$\lambda_k\leq 0$&$=0$&$\geq 0$&$\lambda_k |
|
250 \geq0$\\ |
|
251 $l_k\leq x_k\leq u_k$&$\geq 0$& $\leq 0$& $-\infty\!<\!\lambda_k\!< |
|
252 \!+\infty$ |
|
253 &$\leq 0$& $\geq 0$& $-\infty\!<\!\lambda_k\!<\!+\infty$\\ |
|
254 $x_k=l_k=u_k$&$\geq 0$& $\leq 0$& $-\infty\!<\!\lambda_k\!<\!+\infty$& |
|
255 $\leq 0$& |
|
256 $\geq 0$& $-\infty\!<\!\lambda_k\!<\!+\infty$\\ |
|
257 \hline |
|
258 \end{tabular} |
|
259 \end{center} |
|
260 |
|
261 May note that each primal variable $x_k$ has its dual counterpart |
|
262 $\lambda_k$ and vice versa. This allows applying the same partition for |
|
263 the vector of dual variables as (3.7): |
|
264 $$\left(\begin{array}{@{}c@{}}\lambda_B\\\lambda_N\\\end{array}\right)= |
|
265 \Pi\lambda,\eqno(3.21)$$ |
|
266 where $\lambda_B$ is a vector of dual variables for basic variables |
|
267 $x_B$, $\lambda_N$ is a vector of dual variables for non-basic variables |
|
268 $x_N$. |
|
269 |
|
270 By definition, bounds of basic variables are inactive constraints, so in |
|
271 any basic solution $\lambda_B=0$. Corresponding values of dual variables |
|
272 $\lambda_N$ for non-basic variables $x_N$ can be determined in the |
|
273 following way. From the dual system (3.15) we have: |
|
274 $$(I\ |-\!A)^T\pi+\lambda=(0\ |\ c)^T,\eqno(3.22)$$ |
|
275 so multiplying both sides of (3.22) by matrix $\Pi$ gives: |
|
276 $$\Pi(I\ |-\!A)^T\pi+\Pi\lambda=\Pi(0\ |\ c)^T.\eqno(3.23)$$ |
|
277 From (3.9) it follows that |
|
278 $$\Pi(I\ |-\!A)^T=[(I\ |-\!A)\Pi^T]^T=(B\ |\ N)^T.\eqno(3.24)$$ |
|
279 Further, we can apply the partition (3.7) also to the vector of |
|
280 objective coefficients (see (3.4)): |
|
281 $$\left(\begin{array}{@{}c@{}}c_B\\c_N\\\end{array}\right)= |
|
282 \Pi\left(\begin{array}{@{}c@{}}0\\c\\\end{array}\right),\eqno(3.25)$$ |
|
283 where $c_B$ is a vector of objective coefficients at basic variables, |
|
284 $c_N$ is a vector of objective coefficients at non-basic variables. |
|
285 Now, substituting (3.24), (3.21), and (3.25) into (3.23), leads to: |
|
286 $$(B\ |\ N)^T\pi+(\lambda_B\ |\ \lambda_N)^T=(c_B\ |\ c_N)^T, |
|
287 \eqno(3.26)$$ |
|
288 and transposing both sides of (3.26) gives the system: |
|
289 $$\left(\begin{array}{@{}c@{}}B^T\\N^T\\\end{array}\right)\pi+ |
|
290 \left(\begin{array}{@{}c@{}}\lambda_B\\\lambda_N\\\end{array}\right)= |
|
291 \left(\begin{array}{@{}c@{}}c_B\\c_T\\\end{array}\right),\eqno(3.27)$$ |
|
292 which can be written as follows: |
|
293 $$\left\{ |
|
294 \begin{array}{@{\ }r@{\ }c@{\ }r@{\ }c@{\ }l@{\ }} |
|
295 B^T\pi&+&\lambda_B&=&c_B\\ |
|
296 N^T\pi&+&\lambda_N&=&c_N\\ |
|
297 \end{array} |
|
298 \right.\eqno(3.28) |
|
299 $$ |
|
300 Lagrange multipliers $\pi=(\pi_i)$ correspond to equality constraints |
|
301 (3.5) and therefore can have any sign. This allows resolving the first |
|
302 subsystem of (3.28) as follows:\footnote{$B^{-T}$ means $(B^T)^{-1}= |
|
303 (B^{-1})^T$.} |
|
304 $$\pi=B^{-T}(c_B-\lambda_B)=-B^{-T}\lambda_B+B^{-T}c_B,\eqno(3.29)$$ |
|
305 and substitution of $\pi$ from (3.29) into the second subsystem of |
|
306 (3.28) gives: |
|
307 $$\lambda_N=-N^T\pi+c_N=N^TB^{-T}\lambda_B+(c_N-N^TB^{-T}c_B). |
|
308 \eqno(3.30)$$ |
|
309 The latter system can be written in the following final form: |
|
310 $$\lambda_N=-\Xi^T\lambda_B+d,\eqno(3.31)$$ |
|
311 where $\Xi$ is the simplex tableau (see (3.12)), and |
|
312 $$d=c_N-N^TB^{-T}c_B=c_N+\Xi^Tc_B\eqno(3.32)$$ |
|
313 is the vector of so called {\it reduced costs} of non-basic variables. |
|
314 |
|
315 \pagebreak |
|
316 |
|
317 Above it was said that in any basic solution $\lambda_B=0$, so |
|
318 $\lambda_N=d$ as it follows from (3.31). |
|
319 |
|
320 The system (3.31) is equivalent to the system (3.15) in the sense that |
|
321 they both define the same set of points in the space of dual variables |
|
322 $\lambda$, which satisfy to these systems. If, moreover, values of all |
|
323 dual variables $\lambda_N$ (i.e. reduced costs $d$) satisfy to their |
|
324 bound constraints (i.e. to the ``rule of signs''; see the table above), |
|
325 the corresponding basic solution is called {\it dual feasible}, |
|
326 otherwise {\it dual infeasible}. It is understood that any dual feasible |
|
327 solution satisfy to all constraints (3.15) and (3.17) (or (3.18) in case |
|
328 of maximization). |
|
329 |
|
330 It can be easily shown that the complementary slackness condition |
|
331 (3.19) is always satisfied for {\it any} basic solution. Therefore, |
|
332 a basic solution\footnote{It is assumed that a complete basic solution |
|
333 has the form $(x,\lambda)$, i.e. it includes primal as well as dual |
|
334 variables.} is {\it optimal} if and only if it is primal and dual |
|
335 feasible, because in this case it satifies to all the optimality |
|
336 conditions (3.14)---(3.19). |
|
337 |
|
338 \def\arraystretch{1.5} |
|
339 |
|
340 The meaning of reduced costs $d=(d_j)$ of non-basic variables can be |
|
341 explained in the following way. From (3.4), (3.7), and (3.25) it follows |
|
342 that: |
|
343 $$z=c_B^Tx_B+c_N^Tx_N+c_0.\eqno(3.33)$$ |
|
344 Substituting $x_B$ from (3.11) into (3.33) we can eliminate basic |
|
345 variables and express the objective only through non-basic variables: |
|
346 $$ |
|
347 \begin{array}{r@{\ }c@{\ }l} |
|
348 z&=&c_B^T(-B^{-1}Nx_N)+c_N^Tx_N+c_0=\\ |
|
349 &=&(c_N^T-c_B^TB^{-1}N)x_N+c_0=\\ |
|
350 &=&(c_N-N^TB^{-T}c_B)^Tx_N+c_0=\\ |
|
351 &=&d^Tx_N+c_0. |
|
352 \end{array}\eqno(3.34) |
|
353 $$ |
|
354 From (3.34) it is seen that reduced cost $d_j$ shows how the objective |
|
355 function $z$ depends on non-basic variable $(x_N)_j$ in the neighborhood |
|
356 of the current basic solution, i.e. while the current basis remains |
|
357 unchanged. |
|
358 |
|
359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
360 |
|
361 \newpage |
|
362 |
|
363 \section{LP basis routines} |
|
364 \label{lpbasis} |
|
365 |
|
366 \subsection{glp\_bf\_exists---check if the basis factorization exists} |
|
367 |
|
368 \subsubsection*{Synopsis} |
|
369 |
|
370 \begin{verbatim} |
|
371 int glp_bf_exists(glp_prob *lp); |
|
372 \end{verbatim} |
|
373 |
|
374 \subsubsection*{Returns} |
|
375 |
|
376 If the basis factorization for the current basis associated with the |
|
377 specified problem object exists and therefore is available for |
|
378 computations, the routine \verb|glp_bf_exists| returns non-zero. |
|
379 Otherwise the routine returns zero. |
|
380 |
|
381 \subsubsection*{Comments} |
|
382 |
|
383 Let the problem object have $m$ rows and $n$ columns. In GLPK the |
|
384 {\it basis matrix} $B$ is a square non-singular matrix of the order $m$, |
|
385 whose columns correspond to basic (auxiliary and/or structural) |
|
386 variables. It is defined by the following main |
|
387 equality:\footnote{For more details see Subsection \ref{basbgd}, |
|
388 page \pageref{basbgd}.} |
|
389 $$(B\ |\ N)=(I\ |-\!A)\Pi^T,$$ |
|
390 where $I$ is the unity matrix of the order $m$, whose columns correspond |
|
391 to auxiliary variables; $A$ is the original constraint |
|
392 $m\times n$-matrix, whose columns correspond to structural variables; |
|
393 $(I\ |-\!A)$ is the augmented constraint\linebreak |
|
394 $m\times(m+n)$-matrix, whose columns correspond to all (auxiliary and |
|
395 structural) variables following in the original order; $\Pi$ is a |
|
396 permutation matrix of the order $m+n$; and $N$ is a rectangular |
|
397 $m\times n$-matrix, whose columns correspond to non-basic (auxiliary |
|
398 and/or structural) variables. |
|
399 |
|
400 For various reasons it may be necessary to solve linear systems with |
|
401 matrix $B$. To provide this possibility the GLPK implementation |
|
402 maintains an invertable form of $B$ (that is, some representation of |
|
403 $B^{-1}$) called the {\it basis factorization}, which is an internal |
|
404 component of the problem object. Typically, the basis factorization is |
|
405 computed by the simplex solver, which keeps it in the problem object |
|
406 to be available for other computations. |
|
407 |
|
408 Should note that any changes in the problem object, which affects the |
|
409 basis matrix (e.g. changing the status of a row or column, changing |
|
410 a basic column of the constraint matrix, removing an active constraint, |
|
411 etc.), invalidates the basis factorization. So before calling any API |
|
412 routine, which uses the basis factorization, the application program |
|
413 must make sure (using the routine \verb|glp_bf_exists|) that the |
|
414 factorization exists and therefore available for computations. |
|
415 |
|
416 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
417 |
|
418 \subsection{glp\_factorize---compute the basis factorization} |
|
419 |
|
420 \subsubsection*{Synopsis} |
|
421 |
|
422 \begin{verbatim} |
|
423 int glp_factorize(glp_prob *lp); |
|
424 \end{verbatim} |
|
425 |
|
426 \subsubsection*{Description} |
|
427 |
|
428 The routine \verb|glp_factorize| computes the basis factorization for |
|
429 the current basis associated with the specified problem |
|
430 object.\footnote{The current basis is defined by the current statuses |
|
431 of rows (auxiliary variables) and columns (structural variables).} |
|
432 |
|
433 The basis factorization is computed from ``scratch'' even if it exists, |
|
434 so the application program may use the routine \verb|glp_bf_exists|, |
|
435 and, if the basis factorization already exists, not to call the routine |
|
436 \verb|glp_factorize| to prevent an extra work. |
|
437 |
|
438 The routine \verb|glp_factorize| {\it does not} compute components of |
|
439 the basic solution (i.e. primal and dual values). |
|
440 |
|
441 \subsubsection*{Returns} |
|
442 |
|
443 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}} |
|
444 0 & The basis factorization has been successfully computed.\\ |
|
445 \verb|GLP_EBADB| & The basis matrix is invalid, because the number of |
|
446 basic (auxiliary and structural) variables is not the same as the number |
|
447 of rows in the problem object.\\ |
|
448 \verb|GLP_ESING| & The basis matrix is singular within the working |
|
449 precision.\\ |
|
450 \verb|GLP_ECOND| & The basis matrix is ill-conditioned, i.e. its |
|
451 condition number is too large.\\ |
|
452 \end{tabular} |
|
453 |
|
454 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
455 |
|
456 \newpage |
|
457 |
|
458 \subsection{glp\_bf\_updated---check if the basis factorization has\\ |
|
459 been updated} |
|
460 |
|
461 \subsubsection*{Synopsis} |
|
462 |
|
463 \begin{verbatim} |
|
464 int glp_bf_updated(glp_prob *lp); |
|
465 \end{verbatim} |
|
466 |
|
467 \subsubsection*{Returns} |
|
468 |
|
469 If the basis factorization has been just computed from ``scratch'', the |
|
470 routine \verb|glp_bf_updated| returns zero. Otherwise, if the |
|
471 factorization has been updated at least once, the routine returns |
|
472 non-zero. |
|
473 |
|
474 \subsubsection*{Comments} |
|
475 |
|
476 {\it Updating} the basis factorization means recomputing it to reflect |
|
477 changes in the basis matrix. For example, on every iteration of the |
|
478 simplex method some column of the current basis matrix is replaced by a |
|
479 new column that gives a new basis matrix corresponding to the adjacent |
|
480 basis. In this case computing the basis factorization for the adjacent |
|
481 basis from ``scratch'' (as the routine \verb|glp_factorize| does) would |
|
482 be too time-consuming. |
|
483 |
|
484 On the other hand, since the basis factorization update is a numeric |
|
485 computational procedure, applying it many times may lead to accumulating |
|
486 round-off errors. Therefore the basis is periodically refactorized |
|
487 (reinverted) from ``scratch'' (with the routine \verb|glp_factorize|) |
|
488 that allows improving its numerical properties. |
|
489 |
|
490 The routine \verb|glp_bf_updated| allows determining if the basis |
|
491 factorization has been updated at least once since it was computed from |
|
492 ``scratch''. |
|
493 |
|
494 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
495 |
|
496 \newpage |
|
497 |
|
498 \subsection{glp\_get\_bfcp---retrieve basis factorization control |
|
499 parameters} |
|
500 |
|
501 \subsubsection*{Synopsis} |
|
502 |
|
503 \begin{verbatim} |
|
504 void glp_get_bfcp(glp_prob *lp, glp_bfcp *parm); |
|
505 \end{verbatim} |
|
506 |
|
507 \subsubsection*{Description} |
|
508 |
|
509 The routine \verb|glp_get_bfcp| retrieves control parameters, which are |
|
510 used on computing and updating the basis factorization associated with |
|
511 the specified problem object. |
|
512 |
|
513 Current values of the control parameters are stored in a \verb|glp_bfcp| |
|
514 structure, which the parameter \verb|parm| points to. For a detailed |
|
515 description of the structure \verb|glp_bfcp| see comments to the routine |
|
516 \verb|glp_set_bfcp| in the next subsection. |
|
517 |
|
518 \subsubsection*{Comments} |
|
519 |
|
520 The purpose of the routine \verb|glp_get_bfcp| is two-fold. First, it |
|
521 allows the application program obtaining current values of control |
|
522 parameters used by internal GLPK routines, which compute and update the |
|
523 basis factorization. |
|
524 |
|
525 The second purpose of this routine is to provide proper values for all |
|
526 fields of the structure \verb|glp_bfcp| in the case when the application |
|
527 program needs to change some control parameters. |
|
528 |
|
529 \subsection{glp\_set\_bfcp---change basis factorization control |
|
530 parameters} |
|
531 |
|
532 \subsubsection*{Synopsis} |
|
533 |
|
534 \begin{verbatim} |
|
535 void glp_set_bfcp(glp_prob *lp, const glp_bfcp *parm); |
|
536 \end{verbatim} |
|
537 |
|
538 \subsubsection*{Description} |
|
539 |
|
540 The routine \verb|glp_set_bfcp| changes control parameters, which are |
|
541 used by internal GLPK routines on computing and updating the basis |
|
542 factorization associated with the specified problem object. |
|
543 |
|
544 New values of the control parameters should be passed in a structure |
|
545 \verb|glp_bfcp|, which the parameter \verb|parm| points to. For a |
|
546 detailed description of the structure \verb|glp_bfcp| see paragraph |
|
547 ``Control parameters'' below. |
|
548 |
|
549 The parameter \verb|parm| can be specified as \verb|NULL|, in which case |
|
550 all control parameters are reset to their default values. |
|
551 |
|
552 \subsubsection*{Comments} |
|
553 |
|
554 Before changing some control parameters with the routine |
|
555 \verb|glp_set_bfcp| the application program should retrieve current |
|
556 values of all control parameters with the routine \verb|glp_get_bfcp|. |
|
557 This is needed for backward compatibility, because in the future there |
|
558 may appear new members in the structure \verb|glp_bfcp|. |
|
559 |
|
560 Note that new values of control parameters come into effect on a next |
|
561 computation of the basis factorization, not immediately. |
|
562 |
|
563 \subsubsection*{Example} |
|
564 |
|
565 \begin{verbatim} |
|
566 glp_prob *lp; |
|
567 glp_bfcp parm; |
|
568 . . . |
|
569 /* retrieve current values of control parameters */ |
|
570 glp_get_bfcp(lp, &parm); |
|
571 /* change the threshold pivoting tolerance */ |
|
572 parm.piv_tol = 0.05; |
|
573 /* set new values of control parameters */ |
|
574 glp_set_bfcp(lp, &parm); |
|
575 . . . |
|
576 \end{verbatim} |
|
577 |
|
578 \subsubsection*{Control parameters} |
|
579 |
|
580 This paragraph describes all basis factorization control parameters |
|
581 currently used in the package. Symbolic names of control parameters are |
|
582 names of corresponding members in the structure \verb|glp_bfcp|. |
|
583 |
|
584 \def\arraystretch{1} |
|
585 |
|
586 \medskip |
|
587 |
|
588 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
589 \multicolumn{2}{@{}l}{{\tt int type} (default: {\tt GLP\_BF\_FT})} \\ |
|
590 &Basis factorization type:\\ |
|
591 &\verb|GLP_BF_FT|---$LU$ + Forrest--Tomlin update;\\ |
|
592 &\verb|GLP_BF_BG|---$LU$ + Schur complement + Bartels--Golub update;\\ |
|
593 &\verb|GLP_BF_GR|---$LU$ + Schur complement + Givens rotation update. |
|
594 \\ |
|
595 &In case of \verb|GLP_BF_FT| the update is applied to matrix $U$, while |
|
596 in cases of \verb|GLP_BF_BG| and \verb|GLP_BF_GR| the update is applied |
|
597 to the Schur complement. |
|
598 \end{tabular} |
|
599 |
|
600 \medskip |
|
601 |
|
602 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
603 \multicolumn{2}{@{}l}{{\tt int lu\_size} (default: {\tt 0})} \\ |
|
604 &The initial size of the Sparse Vector Area, in non-zeros, used on |
|
605 computing $LU$-factorization of the basis matrix for the first time. |
|
606 If this parameter is set to 0, the initial SVA size is determined |
|
607 automatically.\\ |
|
608 \end{tabular} |
|
609 |
|
610 \medskip |
|
611 |
|
612 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
613 \multicolumn{2}{@{}l}{{\tt double piv\_tol} (default: {\tt 0.10})} \\ |
|
614 &Threshold pivoting (Markowitz) tolerance, 0 $<$ \verb|piv_tol| $<$ 1, |
|
615 used on computing $LU$-factorization of the basis matrix. Element |
|
616 $u_{ij}$ of the active submatrix of factor $U$ fits to be pivot if it |
|
617 satisfies to the stability criterion |
|
618 $|u_{ij}| >= {\tt piv\_tol}\cdot\max|u_{i*}|$, i.e. if it is not very |
|
619 small in the magnitude among other elements in the same row. Decreasing |
|
620 this parameter may lead to better sparsity at the expense of numerical |
|
621 accuracy, and vice versa.\\ |
|
622 \end{tabular} |
|
623 |
|
624 \medskip |
|
625 |
|
626 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
627 \multicolumn{2}{@{}l}{{\tt int piv\_lim} (default: {\tt 4})} \\ |
|
628 &This parameter is used on computing $LU$-factorization of the basis |
|
629 matrix and specifies how many pivot candidates needs to be considered |
|
630 on choosing a pivot element, \verb|piv_lim| $\geq$ 1. If \verb|piv_lim| |
|
631 candidates have been considered, the pivoting routine prematurely |
|
632 terminates the search with the best candidate found.\\ |
|
633 \end{tabular} |
|
634 |
|
635 \medskip |
|
636 |
|
637 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
638 \multicolumn{2}{@{}l}{{\tt int suhl} (default: {\tt GLP\_ON})} \\ |
|
639 &This parameter is used on computing $LU$-factorization of the basis |
|
640 matrix. Being set to {\tt GLP\_ON} it enables applying the following |
|
641 heuristic proposed by Uwe Suhl: if a column of the active submatrix has |
|
642 no eligible pivot candidates, it is no more considered until it becomes |
|
643 a column singleton. In many cases this allows reducing the time needed |
|
644 for pivot searching. To disable this heuristic the parameter \verb|suhl| |
|
645 should be set to {\tt GLP\_OFF}.\\ |
|
646 \end{tabular} |
|
647 |
|
648 \medskip |
|
649 |
|
650 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
651 \multicolumn{2}{@{}l}{{\tt double eps\_tol} (default: {\tt 1e-15})} \\ |
|
652 &Epsilon tolerance, \verb|eps_tol| $\geq$ 0, used on computing |
|
653 $LU$-factorization of the basis matrix. If an element of the active |
|
654 submatrix of factor $U$ is less than \verb|eps_tol| in the magnitude, |
|
655 it is replaced by exact zero.\\ |
|
656 \end{tabular} |
|
657 |
|
658 \medskip |
|
659 |
|
660 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
661 \multicolumn{2}{@{}l}{{\tt double max\_gro} (default: {\tt 1e+10})} \\ |
|
662 &Maximal growth of elements of factor $U$, \verb|max_gro| $\geq$ 1, |
|
663 allowable on computing $LU$-factorization of the basis matrix. If on |
|
664 some elimination step the ratio $u_{big}/b_{max}$ (where $u_{big}$ is |
|
665 the largest magnitude of elements of factor $U$ appeared in its active |
|
666 submatrix during all the factorization process, $b_{max}$ is the largest |
|
667 magnitude of elements of the basis matrix to be factorized), the basis |
|
668 matrix is considered as ill-conditioned.\\ |
|
669 \end{tabular} |
|
670 |
|
671 \medskip |
|
672 |
|
673 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
674 \multicolumn{2}{@{}l}{{\tt int nfs\_max} (default: {\tt 100})} \\ |
|
675 &Maximal number of additional row-like factors (entries of the eta |
|
676 file), \verb|nfs_max| $\geq$ 1, which can be added to $LU$-factorization |
|
677 of the basis matrix on updating it with the Forrest--Tomlin technique. |
|
678 This parameter is used only once, before $LU$-factorization is computed |
|
679 for the first time, to allocate working arrays. As a rule, each update |
|
680 adds one new factor (however, some updates may need no addition), so |
|
681 this parameter limits the number of updates between refactorizations.\\ |
|
682 \end{tabular} |
|
683 |
|
684 \medskip |
|
685 |
|
686 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
687 \multicolumn{2}{@{}l}{{\tt double upd\_tol} (default: {\tt 1e-6})} \\ |
|
688 &Update tolerance, 0 $<$ \verb|upd_tol| $<$ 1, used on updating |
|
689 $LU$-factorization of the basis matrix with the Forrest--Tomlin |
|
690 technique. If after updating the magnitude of some diagonal element |
|
691 $u_{kk}$ of factor $U$ becomes less than |
|
692 ${\tt upd\_tol}\cdot\max(|u_{k*}|, |u_{*k}|)$, the factorization is |
|
693 considered as inaccurate.\\ |
|
694 \end{tabular} |
|
695 |
|
696 \medskip |
|
697 |
|
698 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
699 \multicolumn{2}{@{}l}{{\tt int nrs\_max} (default: {\tt 100})} \\ |
|
700 &Maximal number of additional rows and columns, \verb|nrs_max| $\geq$ 1, |
|
701 which can be added to $LU$-factorization of the basis matrix on updating |
|
702 it with the Schur complement technique. This parameter is used only |
|
703 once, before $LU$-factorization is computed for the first time, to |
|
704 allocate working arrays. As a rule, each update adds one new row and |
|
705 column (however, some updates may need no addition), so this parameter |
|
706 limits the number of updates between refactorizations.\\ |
|
707 \end{tabular} |
|
708 |
|
709 \medskip |
|
710 |
|
711 \noindent\begin{tabular}{@{}p{17pt}@{}p{120.5mm}@{}} |
|
712 \multicolumn{2}{@{}l}{{\tt int rs\_size} (default: {\tt 0})} \\ |
|
713 &The initial size of the Sparse Vector Area, in non-zeros, used to |
|
714 store non-zero elements of additional rows and columns introduced on |
|
715 updating $LU$-factorization of the basis matrix with the Schur |
|
716 complement technique. If this parameter is set to 0, the initial SVA |
|
717 size is determined automatically.\\ |
|
718 \end{tabular} |
|
719 |
|
720 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
721 |
|
722 \newpage |
|
723 |
|
724 \subsection{glp\_get\_bhead---retrieve the basis header information} |
|
725 |
|
726 \subsubsection*{Synopsis} |
|
727 |
|
728 \begin{verbatim} |
|
729 int glp_get_bhead(glp_prob *lp, int k); |
|
730 \end{verbatim} |
|
731 |
|
732 \subsubsection*{Description} |
|
733 |
|
734 The routine \verb|glp_get_bhead| returns the basis header information |
|
735 for the current basis associated with the specified problem object. |
|
736 |
|
737 \subsubsection*{Returns} |
|
738 |
|
739 If basic variable $(x_B)_k$, $1\leq k\leq m$, is $i$-th auxiliary |
|
740 variable ($1\leq i\leq m$), the routine returns $i$. Otherwise, if |
|
741 $(x_B)_k$ is $j$-th structural variable ($1\leq j\leq n$), the routine |
|
742 returns $m+j$. Here $m$ is the number of rows and $n$ is the number of |
|
743 columns in the problem object. |
|
744 |
|
745 \subsubsection*{Comments} |
|
746 |
|
747 Sometimes the application program may need to know which original |
|
748 (auxiliary and structural) variable correspond to a given basic |
|
749 variable, or, that is the same, which column of the augmented constraint |
|
750 matrix $(I\ |-\!A)$ correspond to a given column of the basis matrix |
|
751 $B$. |
|
752 |
|
753 \def\arraystretch{1} |
|
754 |
|
755 The correspondence is defined as follows:\footnote{For more details see |
|
756 Subsection \ref{basbgd}, page \pageref{basbgd}.} |
|
757 $$\left(\begin{array}{@{}c@{}}x_B\\x_N\\\end{array}\right)= |
|
758 \Pi\left(\begin{array}{@{}c@{}}x_R\\x_S\\\end{array}\right) |
|
759 \ \ \Leftrightarrow |
|
760 \ \ \left(\begin{array}{@{}c@{}}x_R\\x_S\\\end{array}\right)= |
|
761 \Pi^T\left(\begin{array}{@{}c@{}}x_B\\x_N\\\end{array}\right),$$ |
|
762 where $x_B$ is the vector of basic variables, $x_N$ is the vector of |
|
763 non-basic variables, $x_R$ is the vector of auxiliary variables |
|
764 following in their original order,\footnote{The original order of |
|
765 auxiliary and structural variables is defined by the ordinal numbers |
|
766 of corresponding rows and columns in the problem object.} $x_S$ is the |
|
767 vector of structural variables following in their original order, $\Pi$ |
|
768 is a permutation matrix (which is a component of the basis |
|
769 factorization). |
|
770 |
|
771 Thus, if $(x_B)_k=(x_R)_i$ is $i$-th auxiliary variable, the routine |
|
772 returns $i$, and if $(x_B)_k=(x_S)_j$ is $j$-th structural variable, |
|
773 the routine returns $m+j$, where $m$ is the number of rows in the |
|
774 problem object. |
|
775 |
|
776 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
777 |
|
778 \newpage |
|
779 |
|
780 \subsection{glp\_get\_row\_bind---retrieve row index in the basis\\ |
|
781 header} |
|
782 |
|
783 \subsubsection*{Synopsis} |
|
784 |
|
785 \begin{verbatim} |
|
786 int glp_get_row_bind(glp_prob *lp, int i); |
|
787 \end{verbatim} |
|
788 |
|
789 \subsubsection*{Returns} |
|
790 |
|
791 The routine \verb|glp_get_row_bind| returns the index $k$ of basic |
|
792 variable $(x_B)_k$, $1\leq k\leq m$, which is $i$-th auxiliary variable |
|
793 (that is, the auxiliary variable corresponding to $i$-th row), |
|
794 $1\leq i\leq m$, in the current basis associated with the specified |
|
795 problem object, where $m$ is the number of rows. However, if $i$-th |
|
796 auxiliary variable is non-basic, the routine returns zero. |
|
797 |
|
798 \subsubsection*{Comments} |
|
799 |
|
800 The routine \verb|glp_get_row_bind| is an inverse to the routine |
|
801 \verb|glp_get_bhead|: if \verb|glp_get_bhead|$(lp,k)$ returns $i$, |
|
802 \verb|glp_get_row_bind|$(lp,i)$ returns $k$, and vice versa. |
|
803 |
|
804 \subsection{glp\_get\_col\_bind---retrieve column index in the basis |
|
805 header} |
|
806 |
|
807 \subsubsection*{Synopsis} |
|
808 |
|
809 \begin{verbatim} |
|
810 int glp_get_col_bind(glp_prob *lp, int j); |
|
811 \end{verbatim} |
|
812 |
|
813 \subsubsection*{Returns} |
|
814 |
|
815 The routine \verb|glp_get_col_bind| returns the index $k$ of basic |
|
816 variable $(x_B)_k$, $1\leq k\leq m$, which is $j$-th structural |
|
817 variable (that is, the structural variable corresponding to $j$-th |
|
818 column), $1\leq j\leq n$, in the current basis associated with the |
|
819 specified problem object, where $m$ is the number of rows, $n$ is the |
|
820 number of columns. However, if $j$-th structural variable is non-basic, |
|
821 the routine returns zero. |
|
822 |
|
823 \subsubsection*{Comments} |
|
824 |
|
825 The routine \verb|glp_get_col_bind| is an inverse to the routine |
|
826 \verb|glp_get_bhead|: if \verb|glp_get_bhead|$(lp,k)$ returns $m+j$, |
|
827 \verb|glp_get_col_bind|$(lp,j)$ returns $k$, and vice versa. |
|
828 |
|
829 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
830 |
|
831 \newpage |
|
832 |
|
833 \subsection{glp\_ftran---perform forward transformation} |
|
834 |
|
835 \subsubsection*{Synopsis} |
|
836 |
|
837 \begin{verbatim} |
|
838 void glp_ftran(glp_prob *lp, double x[]); |
|
839 \end{verbatim} |
|
840 |
|
841 \subsubsection*{Description} |
|
842 |
|
843 The routine \verb|glp_ftran| performs forward transformation (FTRAN), |
|
844 i.e. it solves the system $Bx=b$, where $B$ is the basis matrix |
|
845 associated with the specified problem object, $x$ is the vector of |
|
846 unknowns to be computed, $b$ is the vector of right-hand sides. |
|
847 |
|
848 On entry to the routine elements of the vector $b$ should be stored in |
|
849 locations \verb|x[1]|, \dots, \verb|x[m]|, where $m$ is the number of |
|
850 rows. On exit the routine stores elements of the vector $x$ in the same |
|
851 locations. |
|
852 |
|
853 \subsection{glp\_btran---perform backward transformation} |
|
854 |
|
855 \subsubsection*{Synopsis} |
|
856 |
|
857 \begin{verbatim} |
|
858 void glp_btran(glp_prob *lp, double x[]); |
|
859 \end{verbatim} |
|
860 |
|
861 \subsubsection*{Description} |
|
862 |
|
863 The routine \verb|glp_btran| performs backward transformation (BTRAN), |
|
864 i.e. it solves the system $B^Tx=b$, where $B^T$ is a matrix transposed |
|
865 to the basis matrix $B$ associated with the specified problem object, |
|
866 $x$ is the vector of unknowns to be computed, $b$ is the vector of |
|
867 right-hand sides. |
|
868 |
|
869 On entry to the routine elements of the vector $b$ should be stored in |
|
870 locations \verb|x[1]|, \dots, \verb|x[m]|, where $m$ is the number of |
|
871 rows. On exit the routine stores elements of the vector $x$ in the same |
|
872 locations. |
|
873 |
|
874 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
875 |
|
876 \newpage |
|
877 |
|
878 \subsection{glp\_warm\_up---``warm up'' LP basis} |
|
879 |
|
880 \subsubsection*{Synopsis} |
|
881 |
|
882 \begin{verbatim} |
|
883 int glp_warm_up(glp_prob *P); |
|
884 \end{verbatim} |
|
885 |
|
886 \subsubsection*{Description} |
|
887 |
|
888 The routine \verb|glp_warm_up| ``warms up'' the LP basis for the |
|
889 specified problem object using current statuses assigned to rows and |
|
890 columns (that is, to auxiliary and structural variables). |
|
891 |
|
892 This operation includes computing factorization of the basis matrix |
|
893 (if it does not exist), computing primal and dual components of basic |
|
894 solution, and determining the solution status. |
|
895 |
|
896 \subsubsection*{Returns} |
|
897 |
|
898 \begin{tabular}{@{}p{25mm}p{97.3mm}@{}} |
|
899 0 & The operation has been successfully performed.\\ |
|
900 \verb|GLP_EBADB| & The basis matrix is invalid, because the number of |
|
901 basic (auxiliary and structural) variables is not the same as the number |
|
902 of rows in the problem object.\\ |
|
903 \verb|GLP_ESING| & The basis matrix is singular within the working |
|
904 precision.\\ |
|
905 \verb|GLP_ECOND| & The basis matrix is ill-conditioned, i.e. its |
|
906 condition number is too large.\\ |
|
907 \end{tabular} |
|
908 |
|
909 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
910 |
|
911 \newpage |
|
912 |
|
913 \section{Simplex tableau routines} |
|
914 |
|
915 \subsection{glp\_eval\_tab\_row---compute row of the tableau} |
|
916 |
|
917 \subsubsection*{Synopsis} |
|
918 |
|
919 \begin{verbatim} |
|
920 int glp_eval_tab_row(glp_prob *lp, int k, int ind[], |
|
921 double val[]); |
|
922 \end{verbatim} |
|
923 |
|
924 \subsubsection*{Description} |
|
925 |
|
926 The routine \verb|glp_eval_tab_row| computes a row of the current |
|
927 simplex tableau (see Subsection 3.1.1, formula (3.12)), which (row) |
|
928 corresponds to some basic variable specified by the parameter $k$ as |
|
929 follows: if $1\leq k\leq m$, the basic variable is $k$-th auxiliary |
|
930 variable, and if $m+1\leq k\leq m+n$, the basic variable is $(k-m)$-th |
|
931 structural variable, where $m$ is the number of rows and $n$ is the |
|
932 number of columns in the specified problem object. The basis |
|
933 factorization must exist. |
|
934 |
|
935 The computed row shows how the specified basic variable depends on |
|
936 non-basic variables: |
|
937 $$x_k=(x_B)_i=\xi_{i1}(x_N)_1+\xi_{i2}(x_N)_2+\dots+\xi_{in}(x_N)_n,$$ |
|
938 where $\xi_{i1}$, $\xi_{i2}$, \dots, $\xi_{in}$ are elements of the |
|
939 simplex table row, $(x_N)_1$, $(x_N)_2$, \dots, $(x_N)_n$ are non-basic |
|
940 (auxiliary and structural) variables. |
|
941 |
|
942 The routine stores column indices and corresponding numeric values of |
|
943 non-zero elements of the computed row in unordered sparse format in |
|
944 locations \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|, |
|
945 \dots, \verb|val[len]|, respectively, where $0\leq{\tt len}\leq n$ is |
|
946 the number of non-zero elements in the row returned on exit. |
|
947 |
|
948 Element indices stored in the array \verb|ind| have the same sense as |
|
949 index $k$, i.e. indices 1 to $m$ denote auxiliary variables while |
|
950 indices $m+1$ to $m+n$ denote structural variables (all these variables |
|
951 are obviously non-basic by definition). |
|
952 |
|
953 \subsubsection*{Returns} |
|
954 |
|
955 The routine \verb|glp_eval_tab_row| returns \verb|len|, which is the |
|
956 number of non-zero elements in the simplex table row stored in the |
|
957 arrays \verb|ind| and \verb|val|. |
|
958 |
|
959 \subsubsection*{Comments} |
|
960 |
|
961 A row of the simplex table is computed as follows. At first, the |
|
962 routine checks that the specified variable $x_k$ is basic and uses the |
|
963 permutation matrix $\Pi$ (3.7) to determine index $i$ of basic variable |
|
964 $(x_B)_i$, which corresponds to $x_k$. |
|
965 |
|
966 The row to be computed is $i$-th row of the matrix $\Xi$ (3.12), |
|
967 therefore: |
|
968 $$\xi_i=e_i^T\Xi=-e_i^TB^{-1}N=-(B^{-T}e_i)^TN,$$ |
|
969 where $e_i$ is $i$-th unity vector. So the routine performs BTRAN to |
|
970 obtain $i$-th row of the inverse $B^{-1}$: |
|
971 $$\varrho_i=B^{-T}e_i,$$ |
|
972 and then computes elements of the simplex table row as inner products: |
|
973 $$\xi_{ij}=-\varrho_i^TN_j,\ \ j=1,2,\dots,n,$$ |
|
974 where $N_j$ is $j$-th column of matrix $N$ (3.9), which (column) |
|
975 corresponds to non-basic variable $(x_N)_j$. The permutation matrix |
|
976 $\Pi$ is used again to convert indices $j$ of non-basic columns to |
|
977 original ordinal numbers of auxiliary and structural variables. |
|
978 |
|
979 \subsection{glp\_eval\_tab\_col---compute column of the tableau} |
|
980 |
|
981 \subsubsection*{Synopsis} |
|
982 |
|
983 \begin{verbatim} |
|
984 int glp_eval_tab_col(glp_prob *lp, int k, int ind[], |
|
985 double val[]); |
|
986 \end{verbatim} |
|
987 |
|
988 \subsubsection*{Description} |
|
989 |
|
990 The routine \verb|glp_eval_tab_col| computes a column of the current |
|
991 simplex tableau (see Subsection 3.1.1, formula (3.12)), which (column) |
|
992 corresponds to some non-basic variable specified by the parameter $k$: |
|
993 if $1\leq k\leq m$, the non-basic variable is $k$-th auxiliary variable, |
|
994 and if $m+1\leq k\leq m+n$, the non-basic variable is $(k-m)$-th |
|
995 structural variable, where $m$ is the number of rows and $n$ is the |
|
996 number of columns in the specified problem object. The basis |
|
997 factorization must exist. |
|
998 |
|
999 The computed column shows how basic variables depends on the specified |
|
1000 non-basic variable $x_k=(x_N)_j$: |
|
1001 $$ |
|
1002 \begin{array}{r@{\ }c@{\ }l@{\ }l} |
|
1003 (x_B)_1&=&\dots+\xi_{1j}(x_N)_j&+\dots\\ |
|
1004 (x_B)_2&=&\dots+\xi_{2j}(x_N)_j&+\dots\\ |
|
1005 .\ \ .&.&.\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\\ |
|
1006 (x_B)_m&=&\dots+\xi_{mj}(x_N)_j&+\dots\\ |
|
1007 \end{array} |
|
1008 $$ |
|
1009 where $\xi_{1j}$, $\xi_{2j}$, \dots, $\xi_{mj}$ are elements of the |
|
1010 simplex table column, $(x_B)_1$, $(x_B)_2$, \dots, $(x_B)_m$ are basic |
|
1011 (auxiliary and structural) variables. |
|
1012 |
|
1013 The routine stores row indices and corresponding numeric values of |
|
1014 non-zero elements of the computed column in unordered sparse format in |
|
1015 locations \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|, |
|
1016 \dots, \verb|val[len]|, respectively, where $0\leq{\tt len}\leq m$ is |
|
1017 the number of non-zero elements in the column returned on exit. |
|
1018 |
|
1019 Element indices stored in the array \verb|ind| have the same sense as |
|
1020 index $k$, i.e. indices 1 to $m$ denote auxiliary variables while |
|
1021 indices $m+1$ to $m+n$ denote structural variables (all these variables |
|
1022 are obviously basic by definition). |
|
1023 |
|
1024 \subsubsection*{Returns} |
|
1025 |
|
1026 The routine \verb|glp_eval_tab_col| returns \verb|len|, which is the |
|
1027 number of non-zero elements in the simplex table column stored in the |
|
1028 arrays \verb|ind| and \verb|val|. |
|
1029 |
|
1030 \subsubsection*{Comments} |
|
1031 |
|
1032 A column of the simplex table is computed as follows. At first, the |
|
1033 routine checks that the specified variable $x_k$ is non-basic and uses |
|
1034 the permutation matrix $\Pi$ (3.7) to determine index $j$ of non-basic |
|
1035 variable $(x_N)_j$, which corresponds to $x_k$. |
|
1036 |
|
1037 The column to be computed is $j$-th column of the matrix $\Xi$ (3.12), |
|
1038 therefore: |
|
1039 $$\Xi_j=\Xi e_j=-B^{-1}Ne_j=-B^{-1}N_j,$$ |
|
1040 where $e_j$ is $j$-th unity vector, $N_j$ is $j$-th column of matrix |
|
1041 $N$ (3.9). So the routine performs FTRAN to transform $N_j$ to the |
|
1042 simplex table column $\Xi_j=(\xi_{ij})$ and uses the permutation matrix |
|
1043 $\Pi$ to convert row indices $i$ to original ordinal numbers of |
|
1044 auxiliary and structural variables. |
|
1045 |
|
1046 \newpage |
|
1047 |
|
1048 \subsection{glp\_transform\_row---transform explicitly specified\\ |
|
1049 row} |
|
1050 |
|
1051 \subsubsection*{Synopsis} |
|
1052 |
|
1053 \begin{verbatim} |
|
1054 int glp_transform_row(glp_prob *P, int len, int ind[], |
|
1055 double val[]); |
|
1056 \end{verbatim} |
|
1057 |
|
1058 \subsubsection*{Description} |
|
1059 |
|
1060 The routine \verb|glp_transform_row| performs the same operation as the |
|
1061 routine \verb|glp_eval_tab_row| with exception that the row to be |
|
1062 transformed is specified explicitly as a sparse vector. |
|
1063 |
|
1064 The explicitly specified row may be thought as a linear form: |
|
1065 $$x=a_1x_{m+1}+a_2x_{m+2}+\dots+a_nx_{m+n},$$ |
|
1066 where $x$ is an auxiliary variable for this row, $a_j$ are coefficients |
|
1067 of the linear form, $x_{m+j}$ are structural variables. |
|
1068 |
|
1069 On entry column indices and numerical values of non-zero coefficients |
|
1070 $a_j$ of the specified row should be placed in locations \verb|ind[1]|, |
|
1071 \dots, \verb|ind[len]| and \verb|val[1]|, \dots, \verb|val[len]|, where |
|
1072 \verb|len| is number of non-zero coefficients. |
|
1073 |
|
1074 This routine uses the system of equality constraints and the current |
|
1075 basis in order to express the auxiliary variable $x$ through the current |
|
1076 non-basic variables (as if the transformed row were added to the problem |
|
1077 object and the auxiliary variable $x$ were basic), i.e. the resultant |
|
1078 row has the form: |
|
1079 $$x=\xi_1(x_N)_1+\xi_2(x_N)_2+\dots+\xi_n(x_N)_n,$$ |
|
1080 where $\xi_j$ are influence coefficients, $(x_N)_j$ are non-basic |
|
1081 (auxiliary and structural) variables, $n$ is the number of columns in |
|
1082 the problem object. |
|
1083 |
|
1084 On exit the routine stores indices and numerical values of non-zero |
|
1085 coefficients $\xi_j$ of the resultant row in locations \verb|ind[1]|, |
|
1086 \dots, \verb|ind[len']| and \verb|val[1]|, \dots, \verb|val[len']|, |
|
1087 where $0\leq{\tt len'}\leq n$ is the number of non-zero coefficients in |
|
1088 the resultant row returned by the routine. Note that indices of |
|
1089 non-basic variables stored in the array \verb|ind| correspond to |
|
1090 original ordinal numbers of variables: indices 1 to $m$ mean auxiliary |
|
1091 variables and indices $m+1$ to $m+n$ mean structural ones. |
|
1092 |
|
1093 \subsubsection*{Returns} |
|
1094 |
|
1095 The routine \verb|glp_transform_row| returns \verb|len'|, the number of |
|
1096 non-zero coefficients in the resultant row stored in the arrays |
|
1097 \verb|ind| and \verb|val|. |
|
1098 |
|
1099 \subsection{glp\_transform\_col---transform explicitly specified\\ |
|
1100 column} |
|
1101 |
|
1102 \subsubsection*{Synopsis} |
|
1103 |
|
1104 \begin{verbatim} |
|
1105 int glp_transform_col(glp_prob *P, int len, int ind[], |
|
1106 double val[]); |
|
1107 \end{verbatim} |
|
1108 |
|
1109 \subsubsection*{Description} |
|
1110 |
|
1111 The routine \verb|glp_transform_col| performs the same operation as the |
|
1112 routine \verb|glp_eval_tab_col| with exception that the column to be |
|
1113 transformed is specified explicitly as a sparse vector. |
|
1114 |
|
1115 The explicitly specified column may be thought as it were added to |
|
1116 the original system of equality constraints: |
|
1117 $$ |
|
1118 \begin{array}{l@{\ }c@{\ }r@{\ }c@{\ }r@{\ }c@{\ }r} |
|
1119 x_1&=&a_{11}x_{m+1}&+\dots+&a_{1n}x_{m+n}&+&a_1x \\ |
|
1120 x_2&=&a_{21}x_{m+1}&+\dots+&a_{2n}x_{m+n}&+&a_2x \\ |
|
1121 \multicolumn{7}{c} |
|
1122 {.\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .}\\ |
|
1123 x_m&=&a_{m1}x_{m+1}&+\dots+&a_{mn}x_{m+n}&+&a_mx \\ |
|
1124 \end{array} |
|
1125 $$ |
|
1126 where $x_i$ are auxiliary variables, $x_{m+j}$ are structural variables |
|
1127 (presented in the problem object), $x$ is a structural variable for the |
|
1128 explicitly specified column, $a_i$ are constraint coefficients at $x$. |
|
1129 |
|
1130 On entry row indices and numerical values of non-zero coefficients |
|
1131 $a_i$ of the specified column should be placed in locations |
|
1132 \verb|ind[1]|, \dots, \verb|ind[len]| and \verb|val[1]|, \dots, |
|
1133 \verb|val[len]|, where \verb|len| is number of non-zero coefficients. |
|
1134 |
|
1135 This routine uses the system of equality constraints and the current |
|
1136 basis in order to express the current basic variables through the |
|
1137 structural variable $x$ (as if the transformed column were added to the |
|
1138 problem object and the variable $x$ were non-basic): |
|
1139 $$ |
|
1140 \begin{array}{l@{\ }c@{\ }r} |
|
1141 (x_B)_1&=\dots+&\xi_{1}x\\ |
|
1142 (x_B)_2&=\dots+&\xi_{2}x\\ |
|
1143 \multicolumn{3}{c}{.\ \ .\ \ .\ \ .\ \ .\ \ .}\\ |
|
1144 (x_B)_m&=\dots+&\xi_{m}x\\ |
|
1145 \end{array} |
|
1146 $$ |
|
1147 where $\xi_i$ are influence coefficients, $x_B$ are basic (auxiliary |
|
1148 and structural) variables, $m$ is the number of rows in the problem |
|
1149 object. |
|
1150 |
|
1151 On exit the routine stores indices and numerical values of non-zero |
|
1152 coefficients $\xi_i$ of the resultant column in locations \verb|ind[1]|, |
|
1153 \dots, \verb|ind[len']| and \verb|val[1]|, \dots, \verb|val[len']|, |
|
1154 where $0\leq{\tt len'}\leq m$ is the number of non-zero coefficients in |
|
1155 the resultant column returned by the routine. Note that indices of basic |
|
1156 variables stored in the array \verb|ind| correspond to original ordinal |
|
1157 numbers of variables, i.e. indices 1 to $m$ mean auxiliary variables, |
|
1158 indices $m+1$ to $m+n$ mean structural ones. |
|
1159 |
|
1160 \subsubsection*{Returns} |
|
1161 |
|
1162 The routine \verb|glp_transform_col| returns \verb|len'|, the number of |
|
1163 non-zero coefficients in the resultant column stored in the arrays |
|
1164 \verb|ind| and \verb|val|. |
|
1165 |
|
1166 \subsection{glp\_prim\_rtest---perform primal ratio test} |
|
1167 |
|
1168 \subsubsection*{Synopsis} |
|
1169 |
|
1170 \begin{verbatim} |
|
1171 int glp_prim_rtest(glp_prob *P, int len, const int ind[], |
|
1172 const double val[], int dir, double eps); |
|
1173 \end{verbatim} |
|
1174 |
|
1175 \subsubsection*{Description} |
|
1176 |
|
1177 The routine \verb|glp_prim_rtest| performs the primal ratio test using |
|
1178 an explicitly specified column of the simplex table. |
|
1179 |
|
1180 The current basic solution associated with the LP problem object must be |
|
1181 primal feasible. |
|
1182 |
|
1183 The explicitly specified column of the simplex table shows how the basic |
|
1184 variables $x_B$ depend on some non-basic variable $x$ (which is not |
|
1185 necessarily presented in the problem object): |
|
1186 $$ |
|
1187 \begin{array}{l@{\ }c@{\ }r} |
|
1188 (x_B)_1&=\dots+&\xi_{1}x\\ |
|
1189 (x_B)_2&=\dots+&\xi_{2}x\\ |
|
1190 \multicolumn{3}{c}{.\ \ .\ \ .\ \ .\ \ .\ \ .}\\ |
|
1191 (x_B)_m&=\dots+&\xi_{m}x\\ |
|
1192 \end{array} |
|
1193 $$ |
|
1194 |
|
1195 The column is specifed on entry to the routine in sparse format. Ordinal |
|
1196 numbers of basic variables $(x_B)_i$ should be placed in locations |
|
1197 \verb|ind[1]|, \dots, \verb|ind[len]|, where ordinal number 1 to $m$ |
|
1198 denote auxiliary variables, and ordinal numbers $m+1$ to $m+n$ denote |
|
1199 structural variables. The corresponding non-zero coefficients $\xi_i$ |
|
1200 should be placed in locations \verb|val[1]|, \dots, \verb|val[len]|. The |
|
1201 arrays \verb|ind| and \verb|val| are not changed by the routine. |
|
1202 |
|
1203 The parameter \verb|dir| specifies direction in which the variable $x$ |
|
1204 changes on entering the basis: $+1$ means increasing, $-1$ means |
|
1205 decreasing. |
|
1206 |
|
1207 The parameter \verb|eps| is an absolute tolerance (small positive |
|
1208 number, say, $10^{-9}$) used by the routine to skip $\xi_i$'s whose |
|
1209 magnitude is less than \verb|eps|. |
|
1210 |
|
1211 The routine determines which basic variable (among those specified in |
|
1212 \verb|ind[1]|, \dots, \verb|ind[len]|) reaches its (lower or upper) |
|
1213 bound first before any other basic variables do, and which, therefore, |
|
1214 should leave the basis in order to keep primal feasibility. |
|
1215 |
|
1216 \subsubsection*{Returns} |
|
1217 |
|
1218 The routine \verb|glp_prim_rtest| returns the index, \verb|piv|, in the |
|
1219 arrays \verb|ind| and \verb|val| corresponding to the pivot element |
|
1220 chosen, $1\leq$ \verb|piv| $\leq$ \verb|len|. If the adjacent basic |
|
1221 solution is primal unbounded, and therefore the choice cannot be made, |
|
1222 the routine returns zero. |
|
1223 |
|
1224 \subsubsection*{Comments} |
|
1225 |
|
1226 If the non-basic variable $x$ is presented in the LP problem object, the |
|
1227 input column can be computed with the routine \verb|glp_eval_tab_col|; |
|
1228 otherwise, it can be computed with the routine \verb|glp_transform_col|. |
|
1229 |
|
1230 \subsection{glp\_dual\_rtest---perform dual ratio test} |
|
1231 |
|
1232 \subsubsection*{Synopsis} |
|
1233 |
|
1234 \begin{verbatim} |
|
1235 int glp_dual_rtest(glp_prob *P, int len, const int ind[], |
|
1236 const double val[], int dir, double eps); |
|
1237 \end{verbatim} |
|
1238 |
|
1239 \subsubsection*{Description} |
|
1240 |
|
1241 The routine \verb|glp_dual_rtest| performs the dual ratio test using |
|
1242 an explicitly specified row of the simplex table. |
|
1243 |
|
1244 The current basic solution associated with the LP problem object must be |
|
1245 dual feasible. |
|
1246 |
|
1247 The explicitly specified row of the simplex table is a linear form |
|
1248 that shows how some basic variable $x$ (which is not necessarily |
|
1249 presented in the problem object) depends on non-basic variables $x_N$: |
|
1250 $$x=\xi_1(x_N)_1+\xi_2(x_N)_2+\dots+\xi_n(x_N)_n.$$ |
|
1251 |
|
1252 The row is specified on entry to the routine in sparse format. Ordinal |
|
1253 numbers of non-basic variables $(x_N)_j$ should be placed in locations |
|
1254 \verb|ind[1]|, \dots, \verb|ind[len]|, where ordinal numbers 1 to $m$ |
|
1255 denote auxiliary variables, and ordinal numbers $m+1$ to $m+n$ denote |
|
1256 structural variables. The corresponding non-zero coefficients $\xi_j$ |
|
1257 should be placed in locations \verb|val[1]|, \dots, \verb|val[len]|. |
|
1258 The arrays \verb|ind| and \verb|val| are not changed by the routine. |
|
1259 |
|
1260 The parameter \verb|dir| specifies direction in which the variable $x$ |
|
1261 changes on leaving the basis: $+1$ means that $x$ goes on its lower |
|
1262 bound, so its reduced cost (dual variable) is increasing (minimization) |
|
1263 or decreasing (maximization); $-1$ means that $x$ goes on its upper |
|
1264 bound, so its reduced cost is decreasing (minimization) or increasing |
|
1265 (maximization). |
|
1266 |
|
1267 The parameter \verb|eps| is an absolute tolerance (small positive |
|
1268 number, say, $10^{-9}$) used by the routine to skip $\xi_j$'s whose |
|
1269 magnitude is less than \verb|eps|. |
|
1270 |
|
1271 The routine determines which non-basic variable (among those specified |
|
1272 in \verb|ind[1]|, \dots, \verb|ind[len]|) should enter the basis in |
|
1273 order to keep dual feasibility, because its reduced cost reaches the |
|
1274 (zero) bound first before this occurs for any other non-basic variables. |
|
1275 |
|
1276 \subsubsection*{Returns} |
|
1277 |
|
1278 The routine \verb|glp_dual_rtest| returns the index, \verb|piv|, in the |
|
1279 arrays \verb|ind| and \verb|val| corresponding to the pivot element |
|
1280 chosen, $1\leq$ \verb|piv| $\leq$ \verb|len|. If the adjacent basic |
|
1281 solution is dual unbounded, and therefore the choice cannot be made, |
|
1282 the routine returns zero. |
|
1283 |
|
1284 \subsubsection*{Comments} |
|
1285 |
|
1286 If the basic variable $x$ is presented in the LP problem object, the |
|
1287 input row can be computed with the routine \verb|glp_eval_tab_row|; |
|
1288 otherwise, it can be computed with the routine \verb|glp_transform_row|. |
|
1289 |
|
1290 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|
1291 |
|
1292 \newpage |
|
1293 |
|
1294 \section{Post-optimal analysis routines} |
|
1295 |
|
1296 \subsection{glp\_analyze\_bound---analyze active bound of non-basic |
|
1297 variable} |
|
1298 |
|
1299 \subsubsection*{Synopsis} |
|
1300 |
|
1301 \begin{verbatim} |
|
1302 void glp_analyze_bound(glp_prob *P, int k, double *limit1, |
|
1303 int *var1, double *limit2, int *var2); |
|
1304 \end{verbatim} |
|
1305 |
|
1306 \subsubsection*{Description} |
|
1307 |
|
1308 The routine \verb|glp_analyze_bound| analyzes the effect of varying the |
|
1309 active bound of specified non-basic variable. |
|
1310 |
|
1311 The non-basic variable is specified by the parameter $k$, where |
|
1312 $1\leq k\leq m$ means auxiliary variable of corresponding row, and |
|
1313 $m+1\leq k\leq m+n$ means structural variable (column). |
|
1314 |
|
1315 Note that the current basic solution must be optimal, and the basis |
|
1316 factorization must exist. |
|
1317 |
|
1318 Results of the analysis have the following meaning. |
|
1319 |
|
1320 \verb|value1| is the minimal value of the active bound, at which the |
|
1321 basis still remains primal feasible and thus optimal. \verb|-DBL_MAX| |
|
1322 means that the active bound has no lower limit. |
|
1323 |
|
1324 \verb|var1| is the ordinal number of an auxiliary (1 to $m$) or |
|
1325 structural ($m+1$ to $m+n$) basic variable, which reaches its bound |
|
1326 first and thereby limits further decreasing the active bound being |
|
1327 analyzed. if \verb|value1| = \verb|-DBL_MAX|, \verb|var1| is set to 0. |
|
1328 |
|
1329 \verb|value2| is the maximal value of the active bound, at which the |
|
1330 basis still remains primal feasible and thus optimal. \verb|+DBL_MAX| |
|
1331 means that the active bound has no upper limit. |
|
1332 |
|
1333 \verb|var2| is the ordinal number of an auxiliary (1 to $m$) or |
|
1334 structural ($m+1$ to $m+n$) basic variable, which reaches its bound |
|
1335 first and thereby limits further increasing the active bound being |
|
1336 analyzed. if \verb|value2| = \verb|+DBL_MAX|, \verb|var2| is set to 0. |
|
1337 |
|
1338 The parameters \verb|value1|, \verb|var1|, \verb|value2|, \verb|var2| |
|
1339 can be specified as \verb|NULL|, in which case corresponding information |
|
1340 is not stored. |
|
1341 |
|
1342 \newpage |
|
1343 |
|
1344 \subsection{glp\_analyze\_coef---analyze objective coefficient at basic |
|
1345 variable} |
|
1346 |
|
1347 \subsubsection*{Synopsis} |
|
1348 |
|
1349 \begin{verbatim} |
|
1350 void glp_analyze_coef(glp_prob *P, int k, double *coef1, |
|
1351 int *var1, double *value1, double *coef2, int *var2, |
|
1352 double *value2); |
|
1353 \end{verbatim} |
|
1354 |
|
1355 \subsubsection*{Description} |
|
1356 |
|
1357 The routine \verb|glp_analyze_coef| analyzes the effect of varying the |
|
1358 objective coefficient at specified basic variable. |
|
1359 |
|
1360 The basic variable is specified by the parameter $k$, where |
|
1361 $1\leq k\leq m$ means auxiliary variable of corresponding row, and |
|
1362 $m+1\leq k\leq m+n$ means structural variable (column). |
|
1363 |
|
1364 Note that the current basic solution must be optimal, and the basis |
|
1365 factorization must exist. |
|
1366 |
|
1367 Results of the analysis have the following meaning. |
|
1368 |
|
1369 \verb|coef1| is the minimal value of the objective coefficient, at |
|
1370 which the basis still remains dual feasible and thus optimal. |
|
1371 \verb|-DBL_MAX| means that the objective coefficient has no lower limit. |
|
1372 |
|
1373 \verb|var1| is the ordinal number of an auxiliary (1 to $m$) or |
|
1374 structural ($m+1$ to $m+n$) non-basic variable, whose reduced cost |
|
1375 reaches its zero bound first and thereby limits further decreasing the |
|
1376 objective coefficient being analyzed. If \verb|coef1| = \verb|-DBL_MAX|, |
|
1377 \verb|var1| is set to 0. |
|
1378 |
|
1379 \verb|value1| is value of the basic variable being analyzed in an |
|
1380 adjacent basis, which is defined as follows. Let the objective |
|
1381 coefficient reaches its minimal value (\verb|coef1|) and continues |
|
1382 decreasing. Then the reduced cost of the limiting non-basic variable |
|
1383 (\verb|var1|) becomes dual infeasible and the current basis becomes |
|
1384 non-optimal that forces the limiting non-basic variable to enter the |
|
1385 basis replacing there some basic variable that leaves the basis to keep |
|
1386 primal feasibility. Should note that on determining the adjacent basis |
|
1387 current bounds of the basic variable being analyzed are ignored as if |
|
1388 it were free (unbounded) variable, so it cannot leave the basis. It may |
|
1389 happen that no dual feasible adjacent basis exists, in which case |
|
1390 \verb|value1| is set to \verb|-DBL_MAX| or \verb|+DBL_MAX|. |
|
1391 |
|
1392 \verb|coef2| is the maximal value of the objective coefficient, at |
|
1393 which the basis still remains dual feasible and thus optimal. |
|
1394 \verb|+DBL_MAX| means that the objective coefficient has no upper limit. |
|
1395 |
|
1396 \verb|var2| is the ordinal number of an auxiliary (1 to $m$) or |
|
1397 structural ($m+1$ to $m+n$) non-basic variable, whose reduced cost |
|
1398 reaches its zero bound first and thereby limits further increasing the |
|
1399 objective coefficient being analyzed. If \verb|coef2| = \verb|+DBL_MAX|, |
|
1400 \verb|var2| is set to 0. |
|
1401 |
|
1402 \verb|value2| is value of the basic variable being analyzed in an |
|
1403 adjacent basis, which is defined exactly in the same way as |
|
1404 \verb|value1| above with exception that now the objective coefficient |
|
1405 is increasing. |
|
1406 |
|
1407 The parameters \verb|coef1|, \verb|var1|, \verb|value1|, \verb|coef2|, |
|
1408 \verb|var2|, \verb|value2| can be specified as \verb|NULL|, in which |
|
1409 case corresponding information is not stored. |
|
1410 |
|
1411 %* eof *% |