00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef dbl_ILL_LPDATA_H
00025 #define dbl_ILL_LPDATA_H
00026
00027 #include "config.h"
00028 #include "dbl_qstruct.h"
00029 #include "dbl_iqsutil.h"
00030 #include "dbl_readline.h"
00031 #include "reporter.h"
00032 #include "dbl_format.h"
00033 #include "dbl_dstruct.h"
00034
00035 extern double dbl_ILL_MAXDOUBLE;
00036 extern double dbl_ILL_MINDOUBLE;
00037
00038 #define dbl_ILL_MAXINT (2147483647)
00039 #define dbl_ILL_MIN (1)
00040 #define dbl_ILL_MAX (-1)
00041
00042
00043
00044 #define dbl_ILL_PRE_SCALE 1
00045 #define dbl_ILL_PRE_FIXED 2
00046 #define dbl_ILL_PRE_SINGLE_ROW 4
00047 #define dbl_ILL_PRE_FORCING 8
00048 #define dbl_ILL_PRE_SINGLE_COL 16
00049 #define dbl_ILL_PRE_DUPLICATE_ROW 32
00050 #define dbl_ILL_PRE_DUPLICATE_COL 64
00051 #define dbl_ILL_PRE_EMPTY_COL 128
00052 #define dbl_ILL_PRE_ALL (dbl_ILL_PRE_SCALE | dbl_ILL_PRE_FIXED | dbl_ILL_PRE_SINGLE_ROW \
00053 dbl_ILL_PRE_FORCING | dbl_ILL_PRE_SINGLE_COL | dbl_ILL_PRE_DUPLICATE_ROW \
00054 dbl_ILL_PRE_DUPLICATE_COL | dbl_ILL_PRE_EMPTY_COL)
00055 #define dbl_ILL_PRE_SIMPLE (dbl_ILL_PRE_FIXED | dbl_ILL_PRE_EMPTY_COL)
00056
00057 typedef struct dbl_ILLlpdata
00058 {
00059 int nrows;
00060 int ncols;
00061 int nstruct;
00062 int nzcount;
00063 int rowsize;
00064 int colsize;
00065 int structsize;
00066
00067 int objsense;
00068 char *sense;
00069 double *obj;
00070 double *rhs;
00071 double *rangeval;
00072 double *lower;
00073 double *upper;
00074 dbl_ILLmatrix A;
00075 struct dbl_ILLlp_rows *rA;
00076
00077 char **rownames;
00078 ILLsymboltab rowtab;
00079 char *objname;
00080
00081
00082 char **colnames;
00083 ILLsymboltab coltab;
00084
00085 char *probname;
00086 char *intmarker;
00087 int *structmap;
00088 int *rowmap;
00089 struct dbl_ILLlp_basis *basis;
00090 struct dbl_ILLlp_predata *presolve;
00091 struct dbl_ILLlp_sinfo *sinfo;
00092
00093
00094
00095
00096 dbl_ILLmatrix sos;
00097
00098
00099
00100 char *sos_type;
00101 int *is_sos_mem;
00102
00103
00104
00105 char *refrowname;
00106 int refind;
00107
00108
00109
00110
00111
00112
00113
00114
00115 qsstring_reporter reporter;
00116
00117 }
00118 dbl_ILLlpdata;
00119
00120 typedef struct dbl_ILLlp_basis
00121 {
00122 int nstruct;
00123 int nrows;
00124 int rownorms_size;
00125 int colnorms_size;
00126 char *cstat;
00127 char *rstat;
00128 double *rownorms;
00129 double *colnorms;
00130 }
00131 dbl_ILLlp_basis;
00132
00133 typedef struct dbl_ILLlp_cache
00134 {
00135 int nstruct;
00136 int nrows;
00137 int status;
00138 double val;
00139 double *x;
00140 double *pi;
00141 double *rc;
00142 double *slack;
00143 }
00144 dbl_ILLlp_cache;
00145
00146 typedef struct dbl_ILLlp_sinfo
00147 {
00148 int ncols;
00149 int nrows;
00150 int nzcount;
00151 int rowsize;
00152 int colsize;
00153 int objsense;
00154
00155 double *obj;
00156 double *rhs;
00157 double *lower;
00158 double *upper;
00159
00160 dbl_ILLmatrix A;
00161
00162 char **colnames;
00163 }
00164 dbl_ILLlp_sinfo;
00165
00166 typedef struct dbl_ILLlp_preline
00167 {
00168 double rhs;
00169 double obj;
00170 double lower;
00171 double upper;
00172 int count;
00173 int *ind;
00174 int row_or_col;
00175 double *val;
00176 }
00177 dbl_ILLlp_preline;
00178
00179 typedef struct dbl_ILLlp_preop
00180 {
00181 int ptype;
00182 int rowindex;
00183 int colindex;
00184 dbl_ILLlp_preline line;
00185 }
00186 dbl_ILLlp_preop;
00187
00188 typedef struct dbl_ILLlp_predata
00189 {
00190 int opcount;
00191 int opsize;
00192 dbl_ILLlp_preop *oplist;
00193 int r_nrows;
00194 int r_ncols;
00195 int *colmap;
00196 int *rowmap;
00197 double *rowscale;
00198 double *colscale;
00199 double *colfixval;
00200 double *rowfixval;
00201 }
00202 dbl_ILLlp_predata;
00203
00204 typedef struct dbl_ILLlp_rows
00205 {
00206 int *rowbeg;
00207 int *rowcnt;
00208 int *rowind;
00209 double *rowval;
00210 }
00211 dbl_ILLlp_rows;
00212
00213
00214
00215
00216
00217
00218
00219
00220 struct dbl_qsdata *dbl_ILLread (
00221 dbl_qsline_reader * file,
00222 const char *dbl_fname,
00223 int isMps);
00224 void dbl_ILLstart (
00225 void);
00226
00227
00228
00229 void dbl_ILLend (
00230 void);
00231
00232
00233 void dbl_ILLchange_precision (
00234 void);
00235
00236
00237
00238
00239 void dbl_ILLlpdata_init (
00240 dbl_ILLlpdata * lp);
00241 void dbl_ILLlpdata_free (
00242 dbl_ILLlpdata * lp);
00243 void dbl_ILLlp_basis_init (
00244 dbl_ILLlp_basis * B);
00245 void dbl_ILLlp_basis_free (
00246 dbl_ILLlp_basis * B);
00247 void dbl_ILLlp_cache_init (
00248 dbl_ILLlp_cache * C);
00249 void dbl_ILLlp_cache_free (
00250 dbl_ILLlp_cache * C);
00251 int dbl_ILLlp_basis_alloc (
00252 dbl_ILLlp_basis * B,
00253 int ncols,
00254 int nrows);
00255 int dbl_ILLlp_cache_alloc (
00256 dbl_ILLlp_cache * C,
00257 int ncols,
00258 int nrows);
00259
00260 int dbl_ILLlp_rows_init (
00261 dbl_ILLlp_rows * lp_rows,
00262 dbl_ILLlpdata * lp,
00263 int include_logicals);
00264 void dbl_ILLlp_rows_clear (
00265 dbl_ILLlp_rows * lp_rows);
00266 int dbl_ILLprint_report (
00267 dbl_ILLlpdata * lp,
00268 const char *format,
00269 ...);
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279 void dbl_ILLlp_sinfo_init (
00280 dbl_ILLlp_sinfo * sinfo),
00281 dbl_ILLlp_sinfo_free (
00282 dbl_ILLlp_sinfo * sinfo),
00283 dbl_ILLlp_predata_init (
00284 dbl_ILLlp_predata * pre),
00285 dbl_ILLlp_predata_free (
00286 dbl_ILLlp_predata * pre);
00287
00288 int dbl_ILLlp_add_logicals (
00289 dbl_ILLlpdata * lp),
00290 dbl_ILLlp_scale (
00291 dbl_ILLlpdata * lp),
00292 dbl_ILLlp_presolve (
00293 dbl_ILLlpdata * lp,
00294 int pre_types);
00295
00296
00297
00298
00299
00300 extern int dbl___QSEX_SETUP;
00301
00302 #endif