Mercurial > octave
annotate libinterp/dldfcn/__glpk__.cc @ 21691:263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
We had more or less decided not to bother trying to eliminate all
these warnings for cases in which external dependencies are missing.
But then we get people trying to fix these in various ways, so we
might as well do it for all cases and use a consistent method.
* oct-conf-post.in.h (octave_unused_parameter): New function for C++
code and new macro for C code.
* mk-octave-config-h.sh: Emit octave_unused_parameter function and
macro for octave-config.h.
* CSparse.cc, __delaunayn__.cc, __eigs__.cc, __fltk_uigetfile__.cc,
__glpk__.cc, __magick_read__.cc, __osmesa_print__.cc, __voronoi__.cc,
amd.cc, audiodevinfo.cc, audioread.cc, ccolamd.cc, cdisplay.c,
colamd.cc, convhulln.cc, dSparse.cc, dmperm.cc, fftw.cc, gl-render.cc,
lo-error.c, load-save.cc, ls-hdf5.cc, ls-mat5.cc, oct-hdf5-types.cc,
ov-base-int.cc, ov-bool-mat.cc, ov-bool-sparse.cc, ov-bool.cc,
ov-cell.cc, ov-class.cc, ov-complex.cc, ov-cx-mat.cc, ov-cx-sparse.cc,
ov-fcn-handle.cc, ov-fcn-inline.cc, ov-float.cc, ov-flt-complex.cc,
ov-flt-cx-mat.cc, ov-flt-re-mat.cc, ov-java.cc, ov-range.cc,
ov-re-mat.cc, ov-re-sparse.cc, ov-scalar.cc, ov-str-mat.cc,
ov-struct.cc, sparse-chol.cc, sparse-dmsolve.cc, sparse-lu.cc,
sparse-qr.cc, sparse-util.cc, symbfact.cc: Use octave_unused_parameter
to eliminate warnings for conditionally compiled code.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 13 May 2016 09:36:14 -0400 |
parents | d7a268e68e69 |
children | bcc30b45a225 |
rev | line source |
---|---|
5234 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
3 Copyright (C) 2005-2015 Nicolo' Giorgetti |
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
4 Copyright (C) 2013-2015 Sébastien Villemot <sebastien@debian.org> |
5234 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
5234 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5234 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
25 # include "config.h" |
5234 | 26 #endif |
5232 | 27 |
28 #include <cfloat> | |
29 #include <ctime> | |
30 | |
9003
0631d397fbe0
replace lo_ieee_isnan by xisnan, add missing includes
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
31 #include "lo-ieee.h" |
0631d397fbe0
replace lo_ieee_isnan by xisnan, add missing includes
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
32 |
5234 | 33 #include "defun-dld.h" |
34 #include "error.h" | |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21091
diff
changeset
|
35 #include "errwarn.h" |
5235 | 36 #include "oct-map.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
37 #include "ovl.h" |
5235 | 38 #include "pager.h" |
39 | |
40 #if defined (HAVE_GLPK) | |
5232 | 41 |
6333 | 42 extern "C" |
43 { | |
6804 | 44 #if defined (HAVE_GLPK_GLPK_H) |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
45 # include <glpk/glpk.h> |
6804 | 46 #else |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
47 # include <glpk.h> |
6804 | 48 #endif |
6472 | 49 } |
6333 | 50 |
17181
4e9ff411d0fa
Remove minor stylistic C'ism
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17180
diff
changeset
|
51 struct control_params |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
52 { |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
53 int msglev; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
54 int dual; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
55 int price; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
56 int itlim; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
57 int outfrq; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
58 int branch; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
59 int btrack; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
60 int presol; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
61 int rtest; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
62 int tmlim; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
63 int outdly; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
64 double tolbnd; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
65 double toldj; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
66 double tolpiv; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
67 double objll; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
68 double objul; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
69 double tolint; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
70 double tolobj; |
17181
4e9ff411d0fa
Remove minor stylistic C'ism
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17180
diff
changeset
|
71 }; |
5232 | 72 |
5234 | 73 int |
74 glpk (int sense, int n, int m, double *c, int nz, int *rn, int *cn, | |
75 double *a, double *b, char *ctype, int *freeLB, double *lb, | |
76 int *freeUB, double *ub, int *vartype, int isMIP, int lpsolver, | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
77 int save_pb, int scale, const control_params *par, |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
78 double *xmin, double *fmin, int *status, |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
79 double *lambda, double *redcosts, double *time) |
5232 | 80 { |
5234 | 81 int typx = 0; |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
82 int errnum = 0; |
5234 | 83 |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
84 clock_t t_start = clock (); |
5234 | 85 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
86 glp_prob *lp = glp_create_prob (); |
5232 | 87 |
20946 | 88 // Set the sense of optimization |
5234 | 89 if (sense == 1) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
90 glp_set_obj_dir (lp, GLP_MIN); |
5234 | 91 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
92 glp_set_obj_dir (lp, GLP_MAX); |
5234 | 93 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
94 glp_add_cols (lp, n); |
5234 | 95 for (int i = 0; i < n; i++) |
96 { | |
20946 | 97 // Define type of the structural variables |
5234 | 98 if (! freeLB[i] && ! freeUB[i]) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
99 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
100 if (lb[i] != ub[i]) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
101 glp_set_col_bnds (lp, i+1, GLP_DB, lb[i], ub[i]); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
102 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
103 glp_set_col_bnds (lp, i+1, GLP_FX, lb[i], ub[i]); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
104 } |
5234 | 105 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
106 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
107 if (! freeLB[i] && freeUB[i]) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
108 glp_set_col_bnds (lp, i+1, GLP_LO, lb[i], ub[i]); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
109 else |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
110 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
111 if (freeLB[i] && ! freeUB[i]) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
112 glp_set_col_bnds (lp, i+1, GLP_UP, lb[i], ub[i]); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
113 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
114 glp_set_col_bnds (lp, i+1, GLP_FR, lb[i], ub[i]); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
115 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
116 } |
5234 | 117 |
118 // -- Set the objective coefficient of the corresponding | |
5232 | 119 // -- structural variable. No constant term is assumed. |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
120 glp_set_obj_coef(lp,i+1,c[i]); |
5232 | 121 |
5234 | 122 if (isMIP) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
123 glp_set_col_kind (lp, i+1, vartype[i]); |
5234 | 124 } |
125 | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
126 glp_add_rows (lp, m); |
5234 | 127 |
128 for (int i = 0; i < m; i++) | |
129 { | |
20946 | 130 // If the i-th row has no lower bound (types F,U), the |
131 // corrispondent parameter will be ignored. If the i-th row has | |
132 // no upper bound (types F,L), the corrispondent parameter will be | |
133 // ignored. If the i-th row is of S type, the i-th LB is used, | |
134 // but the i-th UB is ignored. | |
5234 | 135 |
136 switch (ctype[i]) | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
137 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
138 case 'F': |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
139 typx = GLP_FR; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
140 break; |
5234 | 141 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
142 case 'U': |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
143 typx = GLP_UP; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
144 break; |
5234 | 145 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
146 case 'L': |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
147 typx = GLP_LO; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
148 break; |
5232 | 149 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
150 case 'S': |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
151 typx = GLP_FX; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
152 break; |
5232 | 153 |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
154 case 'D': |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
155 typx = GLP_DB; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
156 break; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
157 } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11574
diff
changeset
|
158 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
159 glp_set_row_bnds (lp, i+1, typx, b[i], b[i]); |
5234 | 160 |
161 } | |
162 | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
163 glp_load_matrix (lp, nz, rn, cn, a); |
5232 | 164 |
5234 | 165 if (save_pb) |
166 { | |
6484 | 167 static char tmp[] = "outpb.lp"; |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
168 if (glp_write_lp (lp, 0, tmp) != 0) |
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
169 error ("__glpk__: unable to write problem"); |
5234 | 170 } |
171 | |
20946 | 172 // scale the problem data |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
173 if (! par->presol || lpsolver != 1) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
174 glp_scale_prob (lp, scale); |
5234 | 175 |
20946 | 176 // build advanced initial basis (if required) |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
177 if (lpsolver == 1 && ! par->presol) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
178 glp_adv_basis (lp, 0); |
5232 | 179 |
20946 | 180 // For MIP problems without a presolver, a first pass with glp_simplex |
181 // is required | |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
182 if ((! isMIP && lpsolver == 1) |
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
183 || (isMIP && ! par->presol)) |
5234 | 184 { |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
185 glp_smcp smcp; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
186 glp_init_smcp (&smcp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
187 smcp.msg_lev = par->msglev; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
188 smcp.meth = par->dual; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
189 smcp.pricing = par->price; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
190 smcp.r_test = par->rtest; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
191 smcp.tol_bnd = par->tolbnd; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
192 smcp.tol_dj = par->toldj; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
193 smcp.tol_piv = par->tolpiv; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
194 smcp.obj_ll = par->objll; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
195 smcp.obj_ul = par->objul; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
196 smcp.it_lim = par->itlim; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
197 smcp.tm_lim = par->tmlim; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
198 smcp.out_frq = par->outfrq; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
199 smcp.out_dly = par->outdly; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
200 smcp.presolve = par->presol; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
201 errnum = glp_simplex (lp, &smcp); |
5234 | 202 } |
203 | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
204 if (isMIP) |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
205 { |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
206 glp_iocp iocp; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
207 glp_init_iocp (&iocp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
208 iocp.msg_lev = par->msglev; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
209 iocp.br_tech = par->branch; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
210 iocp.bt_tech = par->btrack; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
211 iocp.tol_int = par->tolint; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
212 iocp.tol_obj = par->tolobj; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
213 iocp.tm_lim = par->tmlim; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
214 iocp.out_frq = par->outfrq; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
215 iocp.out_dly = par->outdly; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
216 iocp.presolve = par->presol; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
217 errnum = glp_intopt (lp, &iocp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
218 } |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
219 |
20955
77f5591878bf
maint: Use '! expr' rather than '!expr' to conform to coding guidelines.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
220 if (! isMIP && lpsolver == 2) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
221 { |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
222 glp_iptcp iptcp; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
223 glp_init_iptcp (&iptcp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
224 iptcp.msg_lev = par->msglev; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
225 errnum = glp_interior (lp, &iptcp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
226 } |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
227 |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
228 if (errnum == 0) |
5234 | 229 { |
230 if (isMIP) | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
231 { |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
232 *status = glp_mip_status (lp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
233 *fmin = glp_mip_obj_val (lp); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
234 } |
5234 | 235 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
236 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
237 if (lpsolver == 1) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
238 { |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
239 *status = glp_get_status (lp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
240 *fmin = glp_get_obj_val (lp); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
241 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
242 else |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
243 { |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
244 *status = glp_ipt_status (lp); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
245 *fmin = glp_ipt_obj_val (lp); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
246 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
247 } |
5232 | 248 |
5234 | 249 if (isMIP) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
250 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
251 for (int i = 0; i < n; i++) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
252 xmin[i] = glp_mip_col_val (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
253 } |
5234 | 254 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
255 { |
20946 | 256 // Primal values |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
257 for (int i = 0; i < n; i++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
258 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
259 if (lpsolver == 1) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
260 xmin[i] = glp_get_col_prim (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
261 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
262 xmin[i] = glp_ipt_col_prim (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
263 } |
5232 | 264 |
20946 | 265 // Dual values |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
266 for (int i = 0; i < m; i++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
267 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
268 if (lpsolver == 1) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
269 lambda[i] = glp_get_row_dual (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
270 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
271 lambda[i] = glp_ipt_row_dual (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
272 } |
5234 | 273 |
20946 | 274 // Reduced costs |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
275 for (int i = 0; i < glp_get_num_cols (lp); i++) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
276 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
277 if (lpsolver == 1) |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
278 redcosts[i] = glp_get_col_dual (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
279 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
280 redcosts[i] = glp_ipt_col_dual (lp, i+1); |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
281 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
282 } |
5234 | 283 |
5241 | 284 *time = (clock () - t_start) / CLOCKS_PER_SEC; |
5234 | 285 } |
286 | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
287 glp_delete_prob (lp); |
21445
de155ca994d4
Ask glpk to free all resources used after solving problem.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
288 // Request that GLPK free all memory resources. |
de155ca994d4
Ask glpk to free all resources used after solving problem.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
289 // This prevents reported memory leaks, but isn't strictly necessary. |
de155ca994d4
Ask glpk to free all resources used after solving problem.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
290 // The memory blocks use are allocated once and don't grow with further |
21604
d7a268e68e69
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
21445
diff
changeset
|
291 // calls to glpk so they would be reclaimed anyways when Octave exits. |
21445
de155ca994d4
Ask glpk to free all resources used after solving problem.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
292 glp_free_env (); |
5234 | 293 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
294 return errnum; |
5232 | 295 } |
296 | |
5235 | 297 #endif |
298 | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
299 #define OCTAVE_GLPK_GET_REAL_PARAM(NAME, VAL) \ |
5240 | 300 do \ |
301 { \ | |
11053
c33b7054f1f9
in recent Octave_map -> octave_scalar_map changes, use GETFIELD to access map elements, not CONTENTS
John W. Eaton <jwe@octave.org>
parents:
11048
diff
changeset
|
302 octave_value tmp = PARAM.getfield (NAME); \ |
11047
52609f73c7d9
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10527
diff
changeset
|
303 \ |
52609f73c7d9
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10527
diff
changeset
|
304 if (tmp.is_defined ()) \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
305 { \ |
5240 | 306 if (! tmp.is_empty ()) \ |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
307 VAL = tmp.xscalar_value ("glpk: invalid value in PARAM" NAME); \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
308 else \ |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
309 error ("glpk: invalid value in PARAM" NAME); \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
310 } \ |
5240 | 311 } \ |
312 while (0) | |
313 | |
314 #define OCTAVE_GLPK_GET_INT_PARAM(NAME, VAL) \ | |
315 do \ | |
316 { \ | |
11053
c33b7054f1f9
in recent Octave_map -> octave_scalar_map changes, use GETFIELD to access map elements, not CONTENTS
John W. Eaton <jwe@octave.org>
parents:
11048
diff
changeset
|
317 octave_value tmp = PARAM.getfield (NAME); \ |
11047
52609f73c7d9
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10527
diff
changeset
|
318 \ |
52609f73c7d9
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10527
diff
changeset
|
319 if (tmp.is_defined ()) \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
320 { \ |
5240 | 321 if (! tmp.is_empty ()) \ |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
322 VAL = tmp.xint_value ("glpk: invalid value in PARAM" NAME); \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
323 else \ |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
324 error ("glpk: invalid value in PARAM" NAME); \ |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
325 } \ |
5240 | 326 } \ |
327 while (0) | |
328 | |
5235 | 329 DEFUN_DLD (__glpk__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
330 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20825
diff
changeset
|
331 @deftypefn {} {[@var{values}] =} __glpk__ (@var{args})\n\ |
6945 | 332 Undocumented internal function.\n\ |
5245 | 333 @end deftypefn") |
5232 | 334 { |
5235 | 335 #if defined (HAVE_GLPK) |
336 | |
20812
d9ca869ca124
maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents:
20790
diff
changeset
|
337 // FIXME: Should we even need checking for an internal function? |
20818
cef0448a6ed2
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20812
diff
changeset
|
338 if (args.length () != 9) |
20790
c2d9556d51d0
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
339 print_usage (); |
5234 | 340 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20867
diff
changeset
|
341 // 1nd Input. A column array containing the objective function coefficients. |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
342 int mrowsc = args(0).rows (); |
5234 | 343 |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
344 Matrix C = args(0).xmatrix_value ("__glpk__: invalid value of C"); |
5240 | 345 |
5234 | 346 double *c = C.fortran_vec (); |
5455 | 347 Array<int> rn; |
348 Array<int> cn; | |
349 ColumnVector a; | |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
350 int mrowsA; |
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
351 int nz = 0; |
5232 | 352 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20867
diff
changeset
|
353 // 2nd Input. A matrix containing the constraints coefficients. |
5234 | 354 // If matrix A is NOT a sparse matrix |
5631 | 355 if (args(1).is_sparse_type ()) |
5455 | 356 { |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
357 SparseMatrix A = args(1).xsparse_matrix_value ("__glpk__: invalid value of A"); |
5234 | 358 |
5455 | 359 mrowsA = A.rows (); |
360 octave_idx_type Anc = A.cols (); | |
10527
b4d2080b6df7
Replace nzmax by nnz as needed
David Bateman <dbateman@free.fr>
parents:
10350
diff
changeset
|
361 octave_idx_type Anz = A.nnz (); |
11574
a83bad07f7e3
attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
362 rn.resize (dim_vector (Anz+1, 1)); |
a83bad07f7e3
attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
363 cn.resize (dim_vector (Anz+1, 1)); |
5455 | 364 a.resize (Anz+1, 0.0); |
365 | |
366 if (Anc != mrowsc) | |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
367 error ("__glpk__: invalid value of A"); |
5455 | 368 |
369 for (octave_idx_type j = 0; j < Anc; j++) | |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
370 for (octave_idx_type i = A.cidx (j); i < A.cidx (j+1); i++) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
371 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
372 nz++; |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
373 rn(nz) = A.ridx (i) + 1; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
374 cn(nz) = j + 1; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
375 a(nz) = A.data(i); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
376 } |
5455 | 377 } |
5631 | 378 else |
379 { | |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
380 Matrix A = args(1).xmatrix_value ("__glpk__: invalid value of A"); |
5631 | 381 |
382 mrowsA = A.rows (); | |
11574
a83bad07f7e3
attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
383 rn.resize (dim_vector (mrowsA*mrowsc+1, 1)); |
a83bad07f7e3
attempt better backward compatibility for Array resize functions
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
384 cn.resize (dim_vector (mrowsA*mrowsc+1, 1)); |
5631 | 385 a.resize (mrowsA*mrowsc+1, 0.0); |
386 | |
387 for (int i = 0; i < mrowsA; i++) | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
388 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
389 for (int j = 0; j < mrowsc; j++) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
390 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
391 if (A(i,j) != 0) |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
392 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
393 nz++; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
394 rn(nz) = i + 1; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
395 cn(nz) = j + 1; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
396 a(nz) = A(i,j); |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
397 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
398 } |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
399 } |
5631 | 400 |
401 } | |
5232 | 402 |
20946 | 403 // 3rd Input. A column array containing the right-hand side value |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
404 // for each constraint in the constraint matrix. |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
405 Matrix B = args(2).xmatrix_value ("__glpk__: invalid value of B"); |
5240 | 406 |
5234 | 407 double *b = B.fortran_vec (); |
408 | |
20946 | 409 // 4th Input. An array of length mrowsc containing the lower |
410 // bound on each of the variables. | |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
411 Matrix LB = args(3).xmatrix_value ("__glpk__: invalid value of LB"); |
5240 | 412 |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
413 if (LB.numel () < mrowsc) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
414 error ("__glpk__: invalid dimensions for LB"); |
5240 | 415 |
5234 | 416 double *lb = LB.fortran_vec (); |
417 | |
20946 | 418 // LB argument, default: Free |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
419 Array<int> freeLB (dim_vector (mrowsc, 1)); |
5234 | 420 for (int i = 0; i < mrowsc; i++) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
421 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
422 if (xisinf (lb[i])) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
423 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
424 freeLB(i) = 1; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
425 lb[i] = -octave_Inf; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
426 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
427 else |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
428 freeLB(i) = 0; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
429 } |
5234 | 430 |
20946 | 431 // 5th Input. An array of at least length numcols containing the upper |
432 // bound on each of the variables. | |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
433 Matrix UB = args(4).xmatrix_value ("__glpk__: invalid value of UB"); |
5234 | 434 |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
435 if (UB.numel () < mrowsc) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
436 error ("__glpk__: invalid dimensions for UB"); |
5240 | 437 |
5234 | 438 double *ub = UB.fortran_vec (); |
5232 | 439 |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
440 Array<int> freeUB (dim_vector (mrowsc, 1)); |
5234 | 441 for (int i = 0; i < mrowsc; i++) |
442 { | |
5455 | 443 if (xisinf (ub[i])) |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
444 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
445 freeUB(i) = 1; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
446 ub[i] = octave_Inf; |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
447 } |
5234 | 448 else |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
449 freeUB(i) = 0; |
5234 | 450 } |
451 | |
20946 | 452 // 6th Input. A column array containing the sense of each constraint |
453 // in the constraint matrix. | |
21091
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
454 charMatrix CTYPE = args(5).xchar_matrix_value ("__glpk__: invalid value of CTYPE"); |
5240 | 455 |
5237 | 456 char *ctype = CTYPE.fortran_vec (); |
457 | |
20946 | 458 // 7th Input. A column array containing the types of the variables. |
21091
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
459 charMatrix VTYPE = args(6).xchar_matrix_value ("__glpk__: invalid value of VARTYPE"); |
5240 | 460 |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
461 Array<int> vartype (dim_vector (mrowsc, 1)); |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
462 int isMIP = 0; |
5234 | 463 for (int i = 0; i < mrowsc ; i++) |
464 { | |
465 if (VTYPE(i,0) == 'I') | |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
466 { |
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
467 isMIP = 1; |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
468 vartype(i) = GLP_IV; |
10154
40dfc0c99116
DLD-FUNCTIONS/*.cc: untabify
John W. Eaton <jwe@octave.org>
parents:
9003
diff
changeset
|
469 } |
5234 | 470 else |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
471 vartype(i) = GLP_CV; |
5234 | 472 } |
473 | |
20946 | 474 // 8th Input. Sense of optimization. |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
475 int sense; |
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
476 double SENSE = args(7).xscalar_value ("__glpk__: invalid value of SENSE"); |
5240 | 477 |
5237 | 478 if (SENSE >= 0) |
479 sense = 1; | |
480 else | |
481 sense = -1; | |
482 | |
20946 | 483 // 9th Input. A structure containing the control parameters. |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20232
diff
changeset
|
484 octave_scalar_map PARAM = args(8).xscalar_map_value ("__glpk__: invalid value of PARAM"); |
5240 | 485 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
486 control_params par; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
487 |
20946 | 488 // Integer parameters |
5234 | 489 |
20946 | 490 // Level of messages output by the solver |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
491 par.msglev = 1; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
492 OCTAVE_GLPK_GET_INT_PARAM ("msglev", par.msglev); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
493 if (par.msglev < 0 || par.msglev > 3) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
494 error ("__glpk__: PARAM.msglev must be 0 (no output) or 1 (error and warning messages only [default]) or 2 (normal output) or 3 (full output)"); |
5232 | 495 |
20946 | 496 // scaling option |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
497 int scale = 16; |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
498 OCTAVE_GLPK_GET_INT_PARAM ("scale", scale); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
499 if (scale < 0 || scale > 128) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
500 error ("__glpk__: PARAM.scale must either be 128 (automatic selection of scaling options), or a bitwise or of: 1 (geometric mean scaling), 16 (equilibration scaling), 32 (round scale factors to power of two), 64 (skip if problem is well scaled"); |
5232 | 501 |
20946 | 502 // Dual simplex option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
503 par.dual = 1; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
504 OCTAVE_GLPK_GET_INT_PARAM ("dual", par.dual); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
505 if (par.dual < 1 || par.dual > 3) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
506 error ("__glpk__: PARAM.dual must be 1 (use two-phase primal simplex [default]) or 2 (use two-phase dual simplex) or 3 (use two-phase dual simplex, and if it fails, switch to the primal simplex)"); |
5232 | 507 |
20946 | 508 // Pricing option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
509 par.price = 34; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
510 OCTAVE_GLPK_GET_INT_PARAM ("price", par.price); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
511 if (par.price != 17 && par.price != 34) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
512 error ("__glpk__: PARAM.price must be 17 (textbook pricing) or 34 (steepest edge pricing [default])"); |
5234 | 513 |
20946 | 514 // Simplex iterations limit |
17195
2899d110c178
Use std::numeric_limits instead of INT_MAX in __glpk__ (bug #39715).
Rik <rik@octave.org>
parents:
17181
diff
changeset
|
515 par.itlim = std::numeric_limits<int>::max (); |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
516 OCTAVE_GLPK_GET_INT_PARAM ("itlim", par.itlim); |
5234 | 517 |
20946 | 518 // Output frequency, in iterations |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
519 par.outfrq = 200; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
520 OCTAVE_GLPK_GET_INT_PARAM ("outfrq", par.outfrq); |
5234 | 521 |
20946 | 522 // Branching heuristic option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
523 par.branch = 4; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
524 OCTAVE_GLPK_GET_INT_PARAM ("branch", par.branch); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
525 if (par.branch < 1 || par.branch > 5) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
526 error ("__glpk__: PARAM.branch must be 1 (first fractional variable) or 2 (last fractional variable) or 3 (most fractional variable) or 4 (heuristic by Driebeck and Tomlin [default]) or 5 (hybrid pseudocost heuristic)"); |
5232 | 527 |
20946 | 528 // Backtracking heuristic option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
529 par.btrack = 4; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
530 OCTAVE_GLPK_GET_INT_PARAM ("btrack", par.btrack); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
531 if (par.btrack < 1 || par.btrack > 4) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
532 error ("__glpk__: PARAM.btrack must be 1 (depth first search) or 2 (breadth first search) or 3 (best local bound) or 4 (best projection heuristic [default]"); |
5232 | 533 |
20946 | 534 // Presolver option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
535 par.presol = 1; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
536 OCTAVE_GLPK_GET_INT_PARAM ("presol", par.presol); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
537 if (par.presol < 0 || par.presol > 1) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
538 error ("__glpk__: PARAM.presol must be 0 (do NOT use LP presolver) or 1 (use LP presolver [default])"); |
5234 | 539 |
20946 | 540 // LPsolver option |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
541 int lpsolver = 1; |
5240 | 542 OCTAVE_GLPK_GET_INT_PARAM ("lpsolver", lpsolver); |
543 if (lpsolver < 1 || lpsolver > 2) | |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
544 error ("__glpk__: PARAM.lpsolver must be 1 (simplex method) or 2 (interior point method)"); |
5237 | 545 |
20946 | 546 // Ratio test option |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
547 par.rtest = 34; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
548 OCTAVE_GLPK_GET_INT_PARAM ("rtest", par.rtest); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
549 if (par.rtest != 17 && par.rtest != 34) |
20825
66cd994d1b79
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20818
diff
changeset
|
550 error ("__glpk__: PARAM.rtest must be 17 (standard ratio test) or 34 (Harris' two-pass ratio test [default])"); |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
551 |
17195
2899d110c178
Use std::numeric_limits instead of INT_MAX in __glpk__ (bug #39715).
Rik <rik@octave.org>
parents:
17181
diff
changeset
|
552 par.tmlim = std::numeric_limits<int>::max (); |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
553 OCTAVE_GLPK_GET_INT_PARAM ("tmlim", par.tmlim); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
554 |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
555 par.outdly = 0; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
556 OCTAVE_GLPK_GET_INT_PARAM ("outdly", par.outdly); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
557 |
20946 | 558 // Save option |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
559 int save_pb = 0; |
5240 | 560 OCTAVE_GLPK_GET_INT_PARAM ("save", save_pb); |
561 save_pb = save_pb != 0; | |
5237 | 562 |
20946 | 563 // Real parameters |
5234 | 564 |
20946 | 565 // Relative tolerance used to check if the current basic solution |
566 // is primal feasible | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
567 par.tolbnd = 1e-7; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
568 OCTAVE_GLPK_GET_REAL_PARAM ("tolbnd", par.tolbnd); |
5234 | 569 |
20946 | 570 // Absolute tolerance used to check if the current basic solution |
571 // is dual feasible | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
572 par.toldj = 1e-7; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
573 OCTAVE_GLPK_GET_REAL_PARAM ("toldj", par.toldj); |
5232 | 574 |
20946 | 575 // Relative tolerance used to choose eligible pivotal elements of |
576 // the simplex table in the ratio test | |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
577 par.tolpiv = 1e-10; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
578 OCTAVE_GLPK_GET_REAL_PARAM ("tolpiv", par.tolpiv); |
5234 | 579 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
580 par.objll = -std::numeric_limits<double>::max (); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
581 OCTAVE_GLPK_GET_REAL_PARAM ("objll", par.objll); |
5232 | 582 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
583 par.objul = std::numeric_limits<double>::max (); |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
584 OCTAVE_GLPK_GET_REAL_PARAM ("objul", par.objul); |
5234 | 585 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
586 par.tolint = 1e-5; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
587 OCTAVE_GLPK_GET_REAL_PARAM ("tolint", par.tolint); |
5234 | 588 |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
589 par.tolobj = 1e-7; |
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
590 OCTAVE_GLPK_GET_REAL_PARAM ("tolobj", par.tolobj); |
5234 | 591 |
20946 | 592 // Assign pointers to the output parameters |
8068
e3e3d12364b0
make glpk return NA values for unfeasible problems
Jaroslav Hajek <highegg@gmail.com>
parents:
8036
diff
changeset
|
593 ColumnVector xmin (mrowsc, octave_NA); |
11048
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
594 double fmin = octave_NA; |
8068
e3e3d12364b0
make glpk return NA values for unfeasible problems
Jaroslav Hajek <highegg@gmail.com>
parents:
8036
diff
changeset
|
595 ColumnVector lambda (mrowsA, octave_NA); |
e3e3d12364b0
make glpk return NA values for unfeasible problems
Jaroslav Hajek <highegg@gmail.com>
parents:
8036
diff
changeset
|
596 ColumnVector redcosts (mrowsc, octave_NA); |
11048
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
597 double time; |
19779
166051951878
avoid warning from GCC about variables possibly clobbered by longjmp
John W. Eaton <jwe@octave.org>
parents:
19697
diff
changeset
|
598 int status; |
5232 | 599 |
21090
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
600 int errnum = glpk (sense, mrowsc, mrowsA, c, nz, rn.fortran_vec (), |
93d294511277
don't use setjmp/longjmp to handle error in glpk
John W. Eaton <jwe@octave.org>
parents:
21082
diff
changeset
|
601 cn.fortran_vec (), a.fortran_vec (), b, ctype, |
21091
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
602 freeLB.fortran_vec (), lb, freeUB.fortran_vec (), |
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
603 ub, vartype.fortran_vec (), isMIP, lpsolver, |
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
604 save_pb, scale, &par, xmin.fortran_vec (), &fmin, |
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
605 &status, lambda.fortran_vec (), |
72eefc36c6b7
use correct value extractor functions in glpk
John W. Eaton <jwe@octave.org>
parents:
21090
diff
changeset
|
606 redcosts.fortran_vec (), &time); |
5232 | 607 |
11048
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
608 octave_scalar_map extra; |
5234 | 609 |
5238 | 610 if (! isMIP) |
611 { | |
11048
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
612 extra.assign ("lambda", lambda); |
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
613 extra.assign ("redcosts", redcosts); |
5238 | 614 } |
615 | |
11048
10c65e01f042
__glpk__.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
11047
diff
changeset
|
616 extra.assign ("time", time); |
17180
54e251e699bb
Use the new GLPK API (bug #39038).
Sébastien Villemot <sebastien@debian.org>
parents:
15213
diff
changeset
|
617 extra.assign ("status", status); |
5232 | 618 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20867
diff
changeset
|
619 return ovl (xmin, fmin, errnum, extra); |
5234 | 620 |
5235 | 621 #else |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21604
diff
changeset
|
622 |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21604
diff
changeset
|
623 octave_unused_parameter (args); |
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21604
diff
changeset
|
624 |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21091
diff
changeset
|
625 err_disabled_feature ("glpk", "GNU Linear Programming Kit"); |
21691
263d18409fdf
Eliminate unused variable warnings for conditionally compiled code.
John W. Eaton <jwe@octave.org>
parents:
21604
diff
changeset
|
626 |
5235 | 627 #endif |
5232 | 628 } |
12805
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
629 |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
630 /* |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
631 ## No test needed for internal helper function. |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
632 %!assert (1) |
3641167e5b75
codesprint: *.cc helper functions do not need tests
Rik <octave@nomad.inbox5.com>
parents:
11586
diff
changeset
|
633 */ |