annotate src/DLD-FUNCTIONS/__glpk__.cc @ 5232:9b776f5a33eb

[project @ 2005-03-22 16:16:30 by jwe]
author jwe
date Tue, 22 Mar 2005 16:18:26 +0000
parents
children a791b8b777e4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5232
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
1 /*- --------------------------------------------------------------------
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
2 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
3 -- Copyright (C) 2005, Nicolo' Giorgetti, All rights reserved.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
4 -- E-mail: <giorgetti@dii.unisi.it>.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
5 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
6 -- This file is part of GLPKOCT an Octave interface to GLPK.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
7 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
8 -- GLPK is free software; you can redistribute it and/or modify it
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
9 -- under the terms of the GNU General Public License as published by
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
10 -- the Free Software Foundation; either version 2, or (at your option)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
11 -- any later version.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
12 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
13 -- GLPK is distributed in the hope that it will be useful, but WITHOUT
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
14 -- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
15 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
16 -- License for more details.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
17 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
18 -- You should have received a copy of the GNU General Public License
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
19 -- along with GLPK; see the file COPYING. If not, write to the Free
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
20 -- Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
21 -- 02111-1307, USA.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
22 --
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
23 -- ---------------------------------------------------------------------*/
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
24
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
25 #include <cfloat>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
26 #include <csetjmp>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
27 #include <ctime>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
28
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
29 //-- Octave headers
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
30 #include <oct.h>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
31 #include <octave/ov-struct.h>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
32 #include <octave/config.h>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
33 #include <octave/error.h>
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
34
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
35 //-- GLPK C header
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
36 extern "C"{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
37 #include "glpk.h"
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
38 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
39
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
40 #define OCTOUT octave_stdout
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
41 #define OCTERR octave_stdout
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
42 #define NIntP 17
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
43 #define NRealP 10
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
44
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
45 int lpxIntParam[NIntP]= {
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
46 1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
47 1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
48 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
49 1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
50 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
51 -1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
52 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
53 200,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
54 1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
55 2,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
56 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
57 1,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
58 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
59 0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
60 2,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
61 2,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
62 1
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
63 };
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
64
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
65 int IParam[NIntP]={
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
66 LPX_K_MSGLEV,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
67 LPX_K_SCALE,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
68 LPX_K_DUAL,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
69 LPX_K_PRICE,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
70 LPX_K_ROUND,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
71 LPX_K_ITLIM,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
72 LPX_K_ITCNT,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
73 LPX_K_OUTFRQ,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
74 LPX_K_MPSINFO,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
75 LPX_K_MPSOBJ,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
76 LPX_K_MPSORIG,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
77 LPX_K_MPSWIDE,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
78 LPX_K_MPSFREE,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
79 LPX_K_MPSSKIP,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
80 LPX_K_BRANCH,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
81 LPX_K_BTRACK,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
82 LPX_K_PRESOL
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
83 };
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
84
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
85
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
86 double lpxRealParam[NRealP]={
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
87 0.07,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
88 1e-7,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
89 1e-7,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
90 1e-9,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
91 -DBL_MAX,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
92 DBL_MAX,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
93 -1.0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
94 0.0,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
95 1e-6,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
96 1e-7
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
97 };
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
98
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
99 int RParam[NRealP]={
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
100 LPX_K_RELAX,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
101 LPX_K_TOLBND,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
102 LPX_K_TOLDJ,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
103 LPX_K_TOLPIV,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
104 LPX_K_OBJLL,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
105 LPX_K_OBJUL,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
106 LPX_K_TMLIM,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
107 LPX_K_OUTDLY,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
108 LPX_K_TOLINT,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
109 LPX_K_TOLOBJ
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
110 };
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
111
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
112 jmp_buf mark; //-- Address for long jump to jump to
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
113 int fperr; //-- Global error number
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
114
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
115
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
116 int glpkmex_fault_hook(void *info, char *msg)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
117 {
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
118 OCTERR<<"*** SEVERE CRITICAL ERROR *** from GLPK !\n\n"<<msg<<" %s\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
119 longjmp( mark, -1 );
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
120 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
121
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
122 int glpkmex_print_hook(void *info, char *msg)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
123 {
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
124 OCTERR<<msg<<"\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
125 return 1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
126 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
127
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
128
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
129 int glpk(int sense,int n, int m, double *c,int nz,int *rn,int *cn,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
130 double *a,double *b, char *ctype,int *freeLB, double *lb,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
131 int *freeUB, double *ub, int *vartype, int isMIP, int lpsolver,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
132 int save_pb, double *xmin, double *fmin, double *status,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
133 double *lambda, double *redcosts, double *time, double *mem)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
134 {
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
135
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
136 LPX *lp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
137 int i,j;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
138 int error;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
139 clock_t t_start;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
140 int typx=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
141 int method;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
142
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
143 t_start = clock();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
144
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
145 lib_set_fault_hook(NULL,glpkmex_fault_hook);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
146
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
147
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
148 if (lpxIntParam[0] > 1){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
149 lib_set_print_hook(NULL,glpkmex_print_hook);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
150 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
151
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
152 lp=lpx_create_prob();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
153
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
154
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
155 //-- Set the sense of optimization
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
156 if (sense==1) lpx_set_obj_dir(lp,LPX_MIN);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
157 else lpx_set_obj_dir(lp,LPX_MAX);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
158
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
159 //-- If the problem has integer structural variables switch to MIP
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
160 if(isMIP) lpx_set_class(lp,LPX_MIP);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
161
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
162 lpx_add_cols(lp,n);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
163 for(i=0;i<n;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
164
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
165 //-- Define type of the structural variables
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
166 if (!freeLB[i] && !freeUB[i]){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
167 lpx_set_col_bnds(lp,i+1,LPX_DB,lb[i],ub[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
168 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
169 if (!freeLB[i] && freeUB[i]){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
170 lpx_set_col_bnds(lp,i+1,LPX_LO,lb[i],ub[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
171 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
172 if (freeLB[i] && !freeUB[i]){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
173 lpx_set_col_bnds(lp,i+1,LPX_UP,lb[i],ub[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
174 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
175 lpx_set_col_bnds(lp,i+1,LPX_FR,lb[i],ub[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
176 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
177 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
178 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
179 // -- Set the objective coefficient of the corresponding
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
180 // -- structural variable. No constant term is assumed.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
181 lpx_set_obj_coef(lp,i+1,c[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
182
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
183 if(isMIP){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
184 lpx_set_col_kind(lp,i+1,vartype[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
185 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
186 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
187
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
188 lpx_add_rows(lp,m);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
189 for(i=0;i<m;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
190
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
191 /* If the i-th row has no lower bound (types F,U), the
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
192 corrispondent parameter will be ignored.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
193 If the i-th row has no upper bound (types F,L), the corrispondent
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
194 parameter will be ignored.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
195 If the i-th row is of S type, the i-th LB is used, but
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
196 the i-th UB is ignored.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
197 */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
198 switch(ctype[i]){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
199 case 'F': typx=LPX_FR; break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
200 case 'U': typx=LPX_UP; break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
201 case 'L': typx=LPX_LO; break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
202 case 'S': typx=LPX_FX; break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
203 case 'D': typx=LPX_DB;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
204 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
205 lpx_set_row_bnds(lp,i+1,typx,b[i],b[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
206
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
207 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
208 lpx_load_matrix(lp,nz,rn,cn,a);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
209
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
210 if (save_pb){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
211 if(lpx_write_cpxlp(lp, "outpb.lp") != 0){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
212 OCTERR<<"Unable to write problem\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
213 longjmp( mark, -1 );
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
214 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
215 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
216
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
217 //-- scale the problem data (if required)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
218 //-- if (scale && (!presol || method == 1)) lpx_scale_prob(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
219 //-- LPX_K_SCALE=IParam[1] LPX_K_PRESOL=IParam[16]
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
220 if (lpxIntParam[1] && (!lpxIntParam[16] || lpsolver!=1)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
221 lpx_scale_prob(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
222 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
223 //-- build advanced initial basis (if required)
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
224 if (lpsolver == 1 && !lpxIntParam[16]){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
225 lpx_adv_basis(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
226 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
227
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
228 for(i=0;i<NIntP;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
229 lpx_set_int_parm(lp,IParam[i],lpxIntParam[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
230 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
231 for(i=0;i<NRealP;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
232 lpx_set_real_parm(lp,RParam[i],lpxRealParam[i]);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
233 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
234
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
235 if(lpsolver==1) method='S';
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
236 else method='T';
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
237
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
238 switch(method){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
239 case 'S':
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
240 if(isMIP){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
241 method='I';
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
242 error=lpx_simplex(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
243 error=lpx_integer(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
244 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
245 error=lpx_simplex(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
246 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
247 break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
248 case 'T':
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
249 error=lpx_interior(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
250 break;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
251 default:
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
252 insist(method != method);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
253 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
254
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
255 /*
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
256 error assumes the following results:
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
257 error=0 <=> No errors
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
258 error=1 <=> Iteration limit exceeded.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
259 error=2 <=> Numerical problems with basis matrix.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
260 */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
261 if(error==LPX_E_OK){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
262 if(isMIP){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
263 *status=(double)lpx_mip_status(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
264 *fmin=lpx_mip_obj_val(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
265 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
266 if(lpsolver==1){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
267 *status=(double)lpx_get_status(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
268 *fmin=lpx_get_obj_val(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
269 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
270 *status=(double)lpx_ipt_status(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
271 *fmin=lpx_ipt_obj_val(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
272 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
273 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
274 if(isMIP){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
275 for(i=0;i<n;i++) xmin[i]=lpx_mip_col_val(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
276 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
277 /* Primal values */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
278 for(i=0;i<n;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
279 if(lpsolver==1) xmin[i]=lpx_get_col_prim(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
280 else xmin[i]=lpx_ipt_col_prim(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
281 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
282 /* Dual values */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
283 for(i=0; i<m; i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
284 if(lpsolver==1) lambda[i]=lpx_get_row_dual(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
285 else lambda[i]=lpx_ipt_row_dual(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
286 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
287 /* Reduced costs */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
288 for(i=0; i<lpx_get_num_cols(lp); i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
289 if(lpsolver==1) redcosts[i]=lpx_get_col_dual(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
290 else redcosts[i]=lpx_ipt_col_dual(lp,i+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
291 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
292 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
293 *time=((double)(clock() - t_start))/CLOCKS_PER_SEC;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
294 *mem=(double)lib_env_ptr()->mem_tpeak;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
295
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
296 lpx_delete_prob(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
297 return(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
298 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
299 lpx_delete_prob(lp);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
300 *status=(double)error;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
301 return(error);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
302 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
303
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
304
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
305
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
306
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
307
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
308 DEFUN_DLD(glpkoct, args, nlhs, "glpkoct: OCT interface for the GLPK library. Don't use glpkoct, use glpk.m instead")
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
309 {
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
310 // The list of values to return. See the declaration in oct-obj.h
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
311 octave_value_list retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
312
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
313 int nrhs=args.length();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
314
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
315 if(nrhs<1){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
316 OCTERR<<"Use the script glpk for the optimization\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
317 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
318 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
319
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
320 //-- 1st Input. Sense of optimization.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
321 int sense;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
322 double SENSE = args(0).scalar_value ();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
323 if (SENSE>=0) sense=1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
324 else sense =-1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
325
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
326 //-- 2nd Input. A column array containing the objective function
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
327 //-- coefficients.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
328 int mrowsc=args(1).rows();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
329
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
330 Matrix C(args(1).matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
331 double *c=C.fortran_vec();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
332
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
333 //-- 3rd Input. A matrix containing the constraints coefficients.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
334 // If matrix A is NOT a sparse matrix
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
335 // if(!mxIsSparse(A_IN)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
336 int mrowsA=args(2).rows();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
337 Matrix A(args(2).matrix_value()); // get the matrix
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
338 Array<int> rn (mrowsA*mrowsc+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
339 Array<int> cn (mrowsA*mrowsc+1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
340 ColumnVector a (mrowsA*mrowsc+1, 0.0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
341
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
342 int nz=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
343 for(int i=0;i<mrowsA;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
344 for(int j=0;j<mrowsc;j++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
345 if(A(i,j) != 0){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
346 nz++;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
347 rn(nz)=i+1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
348 cn(nz)=j+1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
349 a(nz)=A(i,j);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
350 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
351 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
352 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
353 // DON'T DELETE THIS PART... REPRESENTS THE SPARSE MATRICES MANIPULATION
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
354 // }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
355 // int i,j;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
356 // int *jc,*ir;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
357 // double *pr;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
358 // int nelc,count,row;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
359 //
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
360 // /* NOTE: nnz is the actual number of nonzeros and is stored as the
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
361 // last element of the jc array where the size of the jc array is the
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
362 // number of columns + 1 */
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
363 // nz = *(mxGetJc(A_IN) + mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
364 // jc = mxGetJc(A_IN);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
365 // ir = mxGetIr(A_IN);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
366 // pr = mxGetPr(A_IN);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
367 //
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
368 // rn=(int *)calloc(nz+1,sizeof(int));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
369 // cn=(int *)calloc(nz+1,sizeof(int));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
370 // a=(double *)calloc(nz+1,sizeof(double));
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
371 //
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
372 // count=0; row=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
373 // for(i=1;i<=mrowsc;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
374 // nelc=jc[i]-jc[i-1];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
375 // for(j=0;j<nelc;j++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
376 // count++;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
377 // rn[count]=ir[row]+1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
378 // cn[count]=i;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
379 // a[count]=pr[row];
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
380 // row++;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
381 // }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
382 // }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
383 // }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
384
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
385 //-- 4th Input. A column array containing the right-hand side value
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
386 // for each constraint in the constraint matrix.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
387 Matrix B(args(3).matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
388 double *b=B.fortran_vec();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
389
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
390 for(int i=0; i< mrowsA; i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
391 if (isinf(b[i]) && b[i]<0) b[i]=-octave_Inf;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
392 if (isinf(b[i]) && b[i]>0) b[i]=octave_Inf;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
393 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
394
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
395
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
396 //-- 5th Input. A column array containing the sense of each constraint
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
397 //-- in the constraint matrix.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
398 charMatrix CTYPE(args(4).char_matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
399
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
400 char *ctype=CTYPE.fortran_vec();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
401
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
402 //-- 6th Input. An array of length mrowsc containing the lower
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
403 //-- bound on each of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
404 Matrix LB(args(5).matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
405
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
406 double *lb=LB.fortran_vec();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
407
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
408 //-- LB argument, default: Free
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
409 Array<int> freeLB (mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
410 for(int i=0;i<mrowsc;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
411 if(isinf(lb[i])){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
412 freeLB(i)=1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
413 lb[i]=-octave_Inf;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
414 }else freeLB(i)=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
415 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
416
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
417 //-- 7th Input. An array of at least length numcols containing the upper
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
418 //-- bound on each of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
419 Matrix UB(args(6).matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
420
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
421 double *ub=UB.fortran_vec();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
422
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
423 Array<int> freeUB (mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
424 for(int i=0;i<mrowsc;i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
425 if(isinf(ub[i])){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
426 freeUB(i)=1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
427 ub[i]=octave_Inf;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
428 }else freeUB(i)=0;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
429 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
430
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
431 //-- 8th Input. A column array containing the types of the variables.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
432 charMatrix VTYPE(args(7).char_matrix_value());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
433
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
434 Array<int> vartype (mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
435 int isMIP;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
436 for (int i = 0; i < mrowsc ; i++){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
437 if(VTYPE(i,0)=='I'){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
438 isMIP=1;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
439 vartype(i)=LPX_IV;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
440 }else{
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
441 vartype(i)=LPX_CV;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
442 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
443 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
444
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
445 //-- 9th Input. A structure containing the control parameters.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
446 Octave_map PARAM = args(8).map_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
447
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
448 //-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
449 //-- Integer parameters
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
450 //-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
451
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
452 //-- Level of messages output by the solver
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
453 if(PARAM.contains("msglev")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
454 octave_value tmp=PARAM.contents(PARAM.seek("msglev"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
455
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
456 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
457 if((numtmp != 0) && (numtmp != 1) && (numtmp != 2) && (numtmp != 3)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
458 OCTOUT<<"'msglev' parameter must be only:\n\t0 - no output,\n\t1 - error messages only),\n\t2 - normal output,\n\t3 - full output [default]\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
459 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
460 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
461 lpxIntParam[0]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
462 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
463
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
464 //-- scaling option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
465 if(PARAM.contains("scale")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
466 octave_value tmp=PARAM.contents(PARAM.seek("scale"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
467 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
468 if((numtmp != 0) && (numtmp != 1) && (numtmp != 2)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
469 OCTOUT<<"'scale' parameter must be only:\n\t0 - no scaling,\n\t1 - equilibration scaling,\n\t2 - geometric mean scaling\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
470 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
471 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
472 lpxIntParam[1]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
473 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
474
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
475 //-- Dual dimplex option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
476 if(PARAM.contains("dual")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
477 octave_value tmp=PARAM.contents(PARAM.seek("dual"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
478 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
479 if((numtmp != 0) && (numtmp != 1)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
480 OCTOUT<<"'dual' parameter must be only:\n\t0 - do not use the dual simplex [default],\n\t1 - use dual simplex\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
481 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
482 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
483 lpxIntParam[2]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
484 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
485
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
486 //-- Pricing option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
487 if(PARAM.contains("price")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
488 octave_value tmp=PARAM.contents(PARAM.seek("price"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
489 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
490 if((numtmp != 0) && (numtmp != 1)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
491 OCTOUT<<"'price' parameter must be only:\n\t0 - textbook pricing,\n\t1 - steepest edge pricing [default]\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
492 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
493 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
494 lpxIntParam[3]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
495 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
496
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
497 //-- Solution rounding option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
498 if(PARAM.contains("round")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
499 octave_value tmp=PARAM.contents(PARAM.seek("round"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
500 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
501 if((numtmp != 0) && (numtmp != 1)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
502 OCTOUT<<"'round' parameter must be only:\n\t0 - report all primal and dual values [default],\n\t1 - replace tiny primal and dual values by exact zero\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
503 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
504 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
505 lpxIntParam[4]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
506 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
507
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
508 //-- Simplex iterations limit
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
509 if(PARAM.contains("itlim")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
510 octave_value tmp=PARAM.contents(PARAM.seek("itlim"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
511 lpxIntParam[5]=(int) tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
512
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
513 //-- Simplex iterations count
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
514 if(PARAM.contains("itcnt")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
515 octave_value tmp=PARAM.contents(PARAM.seek("itcnt"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
516 lpxIntParam[6]=(int) tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
517
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
518 //-- Output frequency, in iterations
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
519 if(PARAM.contains("outfrq")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
520 octave_value tmp=PARAM.contents(PARAM.seek("outfrq"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
521 lpxIntParam[7]=(int) tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
522
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
523 //-- Branching heuristic option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
524 if(PARAM.contains("branch")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
525 octave_value tmp=PARAM.contents(PARAM.seek("branch"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
526 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
527 if((numtmp != 0) && (numtmp != 1) && (numtmp != 2)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
528 OCTOUT<<"'branch' parameter must be only (for MIP only):\n\t0 - branch on the first variable,\n\t1 - branch on the last variable,\n\t2 - branch using a heuristic by Driebeck and Tomlin [default]\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
529 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
530 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
531 lpxIntParam[14]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
532 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
533
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
534 //-- Backtracking heuristic option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
535 if(PARAM.contains("btrack")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
536 octave_value tmp=PARAM.contents(PARAM.seek("btrack"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
537 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
538 if((numtmp != 0) && (numtmp != 1) && (numtmp != 2)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
539 OCTOUT<<"'btrack' parameter must be only (for MIP only):\n\t0 - depth first search,\n\t1 - breadth first search,\n\t2 - backtrack using the best projection heuristic\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
540 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
541 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
542 lpxIntParam[15]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
543 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
544
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
545 //-- Presolver option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
546 if(PARAM.contains("presol")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
547 octave_value tmp=PARAM.contents(PARAM.seek("presol"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
548 double numtmp=tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
549 if((numtmp != 0) && (numtmp != 1)){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
550 OCTOUT<<"'presol' parameter must be only:\n\t0 - LP presolver is ***NOT*** used,\n\t1 - LP presol is used\n";
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
551 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
552 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
553 lpxIntParam[16]=(int) numtmp;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
554 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
555
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
556 //-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
557 //-- Real parameters
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
558 //-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
559
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
560 //-- Ratio test option
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
561 if(PARAM.contains("relax")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
562 octave_value tmp=PARAM.contents(PARAM.seek("relax"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
563 lpxRealParam[0]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
564
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
565 //-- Relative tolerance used to check if the current basic solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
566 //-- is primal feasible
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
567 if(PARAM.contains("tolbnd")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
568 octave_value tmp=PARAM.contents(PARAM.seek("tolbn"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
569 lpxRealParam[1]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
570
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
571 //-- Absolute tolerance used to check if the current basic solution
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
572 //-- is dual feasible
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
573 if(PARAM.contains("toldj")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
574 octave_value tmp=PARAM.contents(PARAM.seek("toldj"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
575 lpxRealParam[2]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
576
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
577 //-- Relative tolerance used to choose eligible pivotal elements of
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
578 //-- the simplex table in the ratio test
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
579 if(PARAM.contains("tolpiv")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
580 octave_value tmp=PARAM.contents(PARAM.seek("tolpiv"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
581 lpxRealParam[3]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
582
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
583 if(PARAM.contains("objll")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
584 octave_value tmp=PARAM.contents(PARAM.seek("objll"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
585 lpxRealParam[4]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
586
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
587 if(PARAM.contains("objul")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
588 octave_value tmp=PARAM.contents(PARAM.seek("objul"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
589 lpxRealParam[5]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
590
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
591 if(PARAM.contains("tmlim")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
592 octave_value tmp=PARAM.contents(PARAM.seek("tmlim"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
593 lpxRealParam[6]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
594
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
595 if(PARAM.contains("outdly")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
596 octave_value tmp=PARAM.contents(PARAM.seek("outdly"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
597 lpxRealParam[7]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
598
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
599 if(PARAM.contains("tolint")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
600 octave_value tmp=PARAM.contents(PARAM.seek("tolint"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
601 lpxRealParam[8]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
602
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
603 if(PARAM.contains("tolobj")){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
604 octave_value tmp=PARAM.contents(PARAM.seek("tolobj"))(0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
605 lpxRealParam[9]=tmp.scalar_value(); }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
606
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
607
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
608 //-- 10th Input. If the problem is a LP problem you may select which solver
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
609 //-- use: RSM (Revised Simplex Method) or IPM (Interior Point Method).
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
610 //-- If the problem is a MIP problem this field will be ignored.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
611 octave_value tmp=args(9).scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
612 int lpsolver = (int) tmp.scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
613
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
614 //-- 11th Input. Saves a copy of the problem if SAVE<>0.
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
615 tmp=args(10).scalar_value();
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
616 int save_pb = (tmp.scalar_value() != 0);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
617
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
618 //-- Assign pointers to the output parameters
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
619 ColumnVector xmin (mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
620 ColumnVector fmin (1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
621 ColumnVector status (1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
622 ColumnVector lambda (mrowsA);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
623 ColumnVector redcosts (mrowsc);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
624 ColumnVector time (1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
625 ColumnVector mem (1);
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
626
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
627 int jmpret = setjmp( mark );
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
628 if (jmpret==0){
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
629 int error=glpk(sense,mrowsc,mrowsA,c,nz,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
630 rn.fortran_vec(),cn.fortran_vec(),a.fortran_vec(),b,ctype,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
631 freeLB.fortran_vec(),lb,freeUB.fortran_vec(),ub,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
632 vartype.fortran_vec(),isMIP,lpsolver,save_pb,
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
633 xmin.fortran_vec(),fmin.fortran_vec(),status.fortran_vec(),
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
634 lambda.fortran_vec(),redcosts.fortran_vec(),
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
635 time.fortran_vec(),mem.fortran_vec());
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
636 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
637
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
638 // Set the output parameters
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
639 retval(0)=octave_value(xmin); // returns xmin
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
640 retval(1)=octave_value(fmin); // returns fmin
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
641 retval(2)=octave_value(status); // returns status
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
642
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
643 // Extra informations
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
644 Octave_map extra("lambda",octave_value(lambda)); //returns lambda
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
645 extra.assign("redcosts",octave_value(redcosts)); //returns the reduced costs
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
646 extra.assign("time",octave_value(time)); //time to solve the optimization pb
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
647 extra.assign("mem",octave_value(mem)); //memory used
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
648
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
649 retval(3)=extra;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
650
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
651 return retval;
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
652 }
9b776f5a33eb [project @ 2005-03-22 16:16:30 by jwe]
jwe
parents:
diff changeset
653