1 |
/* |
2 |
* MPS: Ascend MPS file generator |
3 |
* by Craig Schmidt |
4 |
* Created: 2/11/95 |
5 |
* Version: $Revision: 1.13 $ |
6 |
* Version control file: $RCSfile: slv6.h,v $ |
7 |
* Date last modified: $Date: 1997/07/18 12:16:23 $ |
8 |
* Last modified by: $Author: mthomas $ |
9 |
* |
10 |
* This file is part of the SLV solver. |
11 |
* |
12 |
* Copyright (C) 1990 Karl Michael Westerberg |
13 |
* Copyright (C) 1993 Joseph Zaher |
14 |
* Copyright (C) 1994 Joseph Zaher, Benjamin Andrew Allan |
15 |
* Copyright (C) 1995 Craig Schmidt |
16 |
* |
17 |
* The SLV solver is free software; you can redistribute |
18 |
* it and/or modify it under the terms of the GNU General Public License as |
19 |
* published by the Free Software Foundation; either version 2 of the |
20 |
* License, or (at your option) any later version. |
21 |
* |
22 |
* The SLV solver is distributed in hope that it will be |
23 |
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
24 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
25 |
* General Public License for more details. |
26 |
* |
27 |
* You should have received a copy of the GNU General Public License |
28 |
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
29 |
*/ |
30 |
|
31 |
/** @file |
32 |
* makeMPS solver registration module. |
33 |
* <pre> |
34 |
* Contents: makeMPS module |
35 |
* |
36 |
* Authors: Karl Westerberg |
37 |
* Joseph Zaher |
38 |
* |
39 |
* Dates: 06/90 - original version |
40 |
* 04/91 - fine tuned modified marquadt computation, |
41 |
* provided minor iterations for step generation |
42 |
* within each major iteration of jacobian |
43 |
* updates |
44 |
* 06/93 - eliminated pointer sublists being generated |
45 |
* at the beginning of each block |
46 |
* 04/94 - extended scope to equality constrained |
47 |
* optimization. |
48 |
* |
49 |
* Description: This file is created by make_slv_header, so don't |
50 |
* modify it yourself. All functions defined in this |
51 |
* header have identical protocols to the corresponding |
52 |
* functions in slv.h except that slv_system_t ==> |
53 |
* slv6_system_t and slv6_eligible_solver() only takes one |
54 |
* parameter: the system. Note also that the select |
55 |
* solver functions don't exist. |
56 |
* </pre> |
57 |
* @todo makeMPS (solver/slv6.c) is out-of-date and will not compile. |
58 |
* Should be either fixed or archived. |
59 |
* @todo Restructure solver/slv6 & mps so can remove declarations in |
60 |
* solver/slv6.h out of header. Currently needed by mps.[ch]. |
61 |
*/ |
62 |
|
63 |
#ifndef ASC_SLV6_H |
64 |
#define ASC_SLV6_H |
65 |
|
66 |
#include <ascend/solver/solver.h> |
67 |
#include <ascend/system/slv_client.h> |
68 |
|
69 |
#include "mps_types.h" |
70 |
|
71 |
typedef struct slv6_system_structure *slv6_system_t; |
72 |
|
73 |
int slv6_register(SlvFunctionsT *sft); |
74 |
/**< |
75 |
* Registration function for the ASCEND makeMPS solver. |
76 |
* This is the function that tells the system about the makeMPS solver. |
77 |
* Our index is not necessarily going to be 6. That everything here is |
78 |
* named slv6* is just a historical event. |
79 |
* |
80 |
* @param sff SlvFunctionsT to receive the solver registration info. |
81 |
* @return Returns non-zero on error (e.g. f == NULL), zero if all is ok. |
82 |
*/ |
83 |
|
84 |
/* WOULD LIKE TO REMOVE EVERYTHING BELOW THIS POINT */ |
85 |
/* THIS DETAIL SHOULD BE IN SOURCE FILE, BUT IS NEEDED BY mps.[ch] */ |
86 |
/* |
87 |
# if 0 |
88 |
*/ |
89 |
#define slv6_solver_name "makeMPS" /**< Solver's name. don't mess with the caps!*/ |
90 |
#define slv6_solver_number 6 /**< Solver's number */ |
91 |
|
92 |
extern boolean free_inc_var_filter(struct var_variable *var); |
93 |
/**< |
94 |
*** I've been calling this particular var filter a lot , |
95 |
*** so I decided to make it a subroutine. Returns true if |
96 |
*** var is not fixed and incident in something. |
97 |
**/ |
98 |
|
99 |
#if 0 |
100 |
extern void slv6_set_var_list(); |
101 |
extern struct var_variable **slv6_get_var_list(); |
102 |
extern void slv6_set_bnd_list(); |
103 |
extern void slv6_set_rel_list(); |
104 |
extern struct rel_relation **slv6_get_rel_list(); |
105 |
extern void slv6_set_extrel_list(); |
106 |
extern struct ExtRelCache **slv6_get_extrel_list(); |
107 |
extern int slv6_count_vars(); |
108 |
extern int slv6_count_bnds(); |
109 |
extern int slv6_count_rels(); |
110 |
extern void slv6_set_obj_relation(); |
111 |
extern struct rel_relation *slv6_get_obj_relation(); |
112 |
extern boolean slv6_eligible_solver(); |
113 |
extern void slv6_get_parameters(); |
114 |
extern void slv6_set_parameters(); |
115 |
extern void slv6_get_status(); |
116 |
//extern linsol_system_t slv6_get_linsol_sys(); |
117 |
extern void slv6_dump_internals(); |
118 |
extern void slv6_presolve(); |
119 |
extern boolean slv6_change_basis(); |
120 |
extern void slv6_resolve(); |
121 |
extern void slv6_iterate(); |
122 |
extern void slv6_solve(); |
123 |
#endif |
124 |
|
125 |
/********************************************************************* |
126 |
Craig Schmidt 2/15/95 |
127 |
|
128 |
This section describes the parameters, subparameters, |
129 |
and status flags as used by the solver. |
130 |
|
131 |
*** See slv6_create() for more specific information *** |
132 |
*** on parameters and status flags *** |
133 |
|
134 |
*** Note: the parameters can be changed by the user *** |
135 |
*** with the slv6_set_parameters routine *** |
136 |
|
137 |
|
138 |
Use of subparameters in iarray and rarray: |
139 |
|
140 |
iarray[SP6_NONLIN] 0->require linear model, |
141 |
1->solve linearization at current pt |
142 |
iarray[SP6_RELAXED] 0->solve regular problem |
143 |
1->solve LP relaxation of problem |
144 |
iarray[SP6_NONNEG] 0->solver handles free vars |
145 |
1->solver requires that all vars have LB=0, UB=infinity, no FR or MI |
146 |
iarray[SP6_OBJ] 0->solver assumes minimization, do nothing special |
147 |
1->solver assumes maximization, swap obj coeff for min problems |
148 |
2->solver support SCICONIC style MINIMIZE |
149 |
3->solver supports QOMILP style MAX/MIN in names section |
150 |
iarray[SP6_BINARY] 0->solver supports binary variables using INTORG |
151 |
1->solver supports binary variables with BV option in BOUNDS |
152 |
2->no support |
153 |
iarray[SP6_INTEGER] 0->solver defines integer vars using INTORG |
154 |
1->solver defines integer vars using UI in BOUNDS |
155 |
2->no support for integer vars |
156 |
iarray[SP6_SEMI] 0->no support |
157 |
1->solver supports SCICONIC style semi-continuous vars |
158 |
iarray[SP6_SOS1] 0->no support |
159 |
1->solver supports SOS1, i.e. sum(Xi) = 1 |
160 |
iarray[SP6_SOS2] 0->no support |
161 |
1->solver supports SOS2, i.e. sum(xi) <=2, with 2 nonzeros being adjacent |
162 |
Note: this parameter currently ignored, no support offered for type 2 |
163 |
iarray[SP6_SOS3] 0->no support |
164 |
1->solver supports SOS3, i.e. sum(xi) <= 1 |
165 |
iarray[SP6_BO] 0->no support |
166 |
1->solver supports QOMILP style BO cutoff bound in names section |
167 |
Note: value of bound is in rarray[SP6_BNDVAL] |
168 |
iarray[SP6_EPS] 0->no support |
169 |
1->solver supports QOMILP style EPS termination criterion |
170 |
Note: value of bound is in rarray[SP6_EPSVAL] |
171 |
|
172 |
rarray[SP6_BOVAL] value of QOMILP style BO cutoff bound in names section |
173 |
Note: Ignored if iarray[SP6_BO]=0 |
174 |
rarray[SP6_EPSVAL] value of QOMILP style EPS termination criterion |
175 |
Note: Ignored if iarray[SP6_EPS]=0 |
176 |
rarray[SP6_PINF] any UB >= pinf is set to + infinity |
177 |
rarray[SP6_MINF] any LB <= minf is set to - infinity |
178 |
|
179 |
carray[SP6_FILENAME] pointer to filename to create |
180 |
|
181 |
*********************************************************************/ |
182 |
#if 0 |
183 |
#define slv6_IA_SIZE 12 |
184 |
#define slv6_RA_SIZE 4 |
185 |
#define slv6_CA_SIZE 1 |
186 |
#define slv6_VA_SIZE 0 |
187 |
|
188 |
/**< subscripts for ia */ |
189 |
#define SP6_NONLIN 0 |
190 |
#define SP6_RELAXED 1 |
191 |
#define SP6_NONNEG 2 |
192 |
#define SP6_OBJ 3 |
193 |
#define SP6_BINARY 4 |
194 |
#define SP6_INTEGER 5 |
195 |
#define SP6_SEMI 6 |
196 |
#define SP6_SOS1 7 |
197 |
#define SP6_SOS2 8 |
198 |
#define SP6_SOS3 9 |
199 |
#define SP6_BO 10 |
200 |
#define SP6_EPS 11 |
201 |
|
202 |
/**< subscripts for ra */ |
203 |
#define SP6_BOVAL 0 |
204 |
#define SP6_EPSVAL 1 |
205 |
#define SP6_PINF 2 |
206 |
#define SP6_MINF 3 |
207 |
|
208 |
/**< subscripts for ca */ |
209 |
#define SP6_FILENAME 0 |
210 |
#endif |
211 |
|
212 |
|
213 |
enum{ |
214 |
/** ASCEND OPTIONS */ |
215 |
ASCEND_PARAM_SAFEEVAL = 0 |
216 |
/**< integer-valued */ |
217 |
, SP6_NONLIN |
218 |
, SP6_RELAXED |
219 |
, SP6_NONNEG |
220 |
, SP6_OBJ |
221 |
, SP6_BINARY |
222 |
, SP6_INTEGER |
223 |
, SP6_SEMI |
224 |
, SP6_SOS1 |
225 |
, SP6_SOS2 |
226 |
, SP6_SOS3 |
227 |
, SP6_BO |
228 |
, SP6_EPS |
229 |
/* real-valued */ |
230 |
, SP6_BOVAL |
231 |
, SP6_EPSVAL |
232 |
, SP6_PINF |
233 |
, SP6_MINF |
234 |
/* string-valued */ |
235 |
, SP6_FILENAME |
236 |
, SP6_PARAMS |
237 |
}; |
238 |
|
239 |
/**< define another token to go with |
240 |
rel_TOK_less, rel_TOK_equal, and rel_TOK_greater, |
241 |
defined in rel.h */ |
242 |
#define rel_TOK_nonincident 00 |
243 |
|
244 |
#endif /* ASC_SLV6_H */ |
245 |
|