dbl_rawlp.h

Go to the documentation of this file.
00001 /****************************************************************************/
00002 /*                                                                          */
00003 /*  This file is part of QSopt_ex.                                          */
00004 /*                                                                          */
00005 /*  (c) Copyright 2006 by David Applegate, William Cook, Sanjeeb Dash,      */
00006 /*  and Daniel Espinoza                                                     */
00007 /*                                                                          */
00008 /*  Sanjeeb Dash ownership of copyright in QSopt_ex is derived from his     */
00009 /*  copyright in QSopt.                                                     */
00010 /*                                                                          */
00011 /*  This code may be used under the terms of the GNU General Public License */
00012 /*  (Version 2.1 or later) as published by the Free Software Foundation.    */
00013 /*                                                                          */
00014 /*  Alternatively, use is granted for research purposes only.               */
00015 /*                                                                          */
00016 /*  It is your choice of which of these two licenses you are operating      */
00017 /*  under.                                                                  */
00018 /*                                                                          */
00019 /*  We make no guarantees about the correctness or usefulness of this code. */
00020 /*                                                                          */
00021 /****************************************************************************/
00022 
00023 /*  RCS_INFO = "$RCSfile: dbl_rawlp.h,v $ $Revision: 1.3 $ $Date: 2003/11/05 16:57:39 $"; */
00024 #ifndef dbl___ILL_RAWLP_H_
00025 #define dbl___ILL_RAWLP_H_
00026 
00027 /****************************************************************************/
00028 /* DataStructure and Routines                                               */
00029 /*          to deal with raw lp information as read from mps or lp files    */
00030 /*          support scanning of input                                       */
00031 /*          error reporting                                                 */
00032 /****************************************************************************/
00033 
00034 #include "trace.h"
00035 #include "dbl_lpdata.h"
00036 #include "dbl_iqsutil.h"
00037 #include "dbl_format.h"
00038 #include "dbl_lpdefs.h"
00039 
00040 #define dbl_ILL_ISBLANK(p) \
00041              (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
00042 
00043 /* 
00044  * we rely on ILLsymboltab property:
00045  *   the ith name added can be retrieved by ILLsymboltab_get(table, i) 
00046  *   as long as we never delete names from the symbol table 
00047  */
00048 typedef struct dbl_rawlpdata
00049 {
00050   char *name;
00051 
00052   char *rhsname;
00053   char *rangesname;
00054   char *boundsname;
00055 
00056   int objsense;                 /* maximize or minimize */
00057   int objindex;                 /* index of objective row */
00058 
00059   int nrows;                    /* number of rows in problem */
00060   ILLsymboltab rowtab;          /* ILLsymboltab_get(rowtab, i) name of ith row */
00061 
00062   int sensesize;                /* size of rowsense */
00063   char *rowsense;               /* rowsense[i] snese of row[i] */
00064 
00065   char *rhsind;                 /* rhsind[i] == 1 we saw an rhs for row[i] */
00066   /* size is nrows */
00067   int rhssize;                  /* size of rhs array */
00068   double *rhs;                /* rhs values for rows; size is nrows */
00069   char *rangesind;              /* ranges[i] == 1 we saw a range def for row[i] */
00070   struct dbl_colptr *ranges;        /* list of range values */
00071 
00072   int ncols;                    /* number of cols in problem */
00073   ILLsymboltab coltab;          /* ILLsymboltab_get(coltab, i) name of ith col */
00074   int colsize;                  /* size of cols array */
00075   struct dbl_colptr **cols;
00076 
00077   char *lbind;                  /* lbind[i] == 1  we saw a lower bound for col[i] */
00078   char *ubind;                  /* ubind[i] == 1  we saw a upper bound for col[i] */
00079   double *lower;              /* lower[i] = lower bound for col[i] */
00080   double *upper;              /* upper[i] = upper bound for col[i] */
00081 
00082   int intsize;                  /* size of intmarker array */
00083   char *intmarker;              /* intmarker[i] == 1  col[i] is an int var */
00084 
00085   /* sos information is tranfered into dbl_ILLmatrix lpdata->sos */
00086   char *refrow;                 /* name of reference row */
00087   int refrowind;                /* index of refrow or -1  */
00088 
00089   int is_sos_size;              /* size of is_sos_member array */
00090   int *is_sos_member;           /* for each col contains either               
00091                                  *     -1 == no sos memeber 
00092                                  *     i  == member of set #i */
00093 
00094   int nsos_member;              /* total number of sos set members */
00095   int sos_weight_size;          /* size of sos_weight array */
00096   double *sos_weight;       /* sos set elem i has weight of sos_weight[i] 
00097                                  * value comes from refrow coeficients */
00098   int sos_col_size;             /* size of sos_col array */
00099   int *sos_col;                 /* sos elem i is column sos_col[i] */
00100 
00101   int nsos;                     /* number of sos sets */
00102   int sos_setsize;              /* size of sosset array */
00103   struct dbl_sosptr *sos_set;       /* type, size, first element of sos sets 
00104                                  * first is index into sos_weight and sos_col 
00105                                  * arrays */
00106   dbl_qserror_collector *error_collector;
00107   ILLptrworld ptrworld;
00108 }
00109 dbl_rawlpdata;
00110 
00111 typedef struct dbl_colptr
00112 {
00113   double coef;
00114   struct dbl_colptr *next;
00115   int this_val;                     /* row index */
00116 }
00117 dbl_colptr;
00118 extern dbl_colptr *dbl_ILLcolptralloc (
00119   ILLptrworld * p);
00120 
00121 typedef struct dbl_sosptr
00122 {
00123   int nelem;                    /* number of set elements */
00124   int first;                    /* index of first set element in sosmemeber */
00125   char type;                    /* set type */
00126 }
00127 dbl_sosptr;
00128 extern const int dbl_ILL_SOS_TYPE1;
00129 extern const int dbl_ILL_SOS_TYPE2;
00130 
00131 extern void dbl_ILLinit_rawlpdata (
00132   dbl_rawlpdata * lp,
00133   dbl_qserror_collector * collector);
00134 extern void dbl_ILLfree_rawlpdata (
00135   dbl_rawlpdata * lp);
00136 extern void dbl_ILLraw_clear_matrix (
00137   dbl_rawlpdata * lp);
00138 
00139 extern const char *dbl_ILLraw_rowname (
00140   dbl_rawlpdata * lp,
00141   int i);
00142 extern const char *dbl_ILLraw_colname (
00143   dbl_rawlpdata * lp,
00144   int i);
00145 
00146 extern int dbl_ILLraw_add_col (
00147   dbl_rawlpdata * lp,
00148   const char *name,
00149   int intmarker);
00150 extern int dbl_ILLraw_add_row (
00151   dbl_rawlpdata * lp,
00152   const char *name,
00153   int sense,
00154   const double rhs);
00155 
00156 extern int dbl_ILLraw_add_col_coef (
00157   dbl_rawlpdata * lp,
00158   int colind,
00159   int rowind,
00160   double coef);
00161 
00162 extern int dbl_ILLraw_init_ranges (
00163   dbl_rawlpdata * lp);
00164 extern int dbl_ILLraw_init_rhs (
00165   dbl_rawlpdata * lp);
00166 
00167 extern int dbl_ILLraw_add_ranges_coef (
00168   dbl_rawlpdata * lp,
00169   int rowind,
00170   double coef);
00171 
00172 
00173 extern int dbl_ILLraw_add_sos (
00174   dbl_rawlpdata * lp,
00175   int sos_type);
00176 
00177                                                 /* add empty set with type */
00178 extern int dbl_ILLraw_add_sos_member (
00179   dbl_rawlpdata * lp,
00180   int colind);
00181 
00182                                                 /* add col to last set */
00183 extern int dbl_ILLraw_is_mem_other_sos (
00184   dbl_rawlpdata * lp,
00185   int colind);
00186 
00187 extern int dbl_ILLraw_set_rhs_name (
00188   dbl_rawlpdata * lp,
00189   const char *name,
00190   int *skip);
00191 extern int dbl_ILLraw_set_bounds_name (
00192   dbl_rawlpdata * lp,
00193   const char *name,
00194   int *skip);
00195 extern int dbl_ILLraw_set_ranges_name (
00196   dbl_rawlpdata * lp,
00197   const char *name,
00198   int *skip);
00199 extern void dbl_ILLprint_rawlpdata (
00200   dbl_rawlpdata * lp);
00201 
00202 extern char *dbl_ILLraw_unique_name (
00203   ILLsymboltab * tab,
00204   char *prefix,
00205   int i);
00206 extern int dbl_ILLraw_fill_in_rownames (
00207   dbl_rawlpdata * lp);
00208 
00209 extern int dbl_ILLraw_init_bounds (
00210   dbl_rawlpdata * lp);
00211 
00212 extern const char *dbl_ILLraw_set_lowerBound (
00213   dbl_rawlpdata * lp,
00214   int i,
00215   double bnd);
00216 extern const char *dbl_ILLraw_set_upperBound (
00217   dbl_rawlpdata * lp,
00218   int i,
00219   double bnd);
00220 extern const char *dbl_ILLraw_set_fixedBound (
00221   dbl_rawlpdata * lp,
00222   int i,
00223   double bnd);
00224 extern const char *dbl_ILLraw_set_binaryBound (
00225   dbl_rawlpdata * lp,
00226   int i);
00227 extern const char *dbl_ILLraw_set_unbound (
00228   dbl_rawlpdata * lp,
00229   int colind);
00230 extern int dbl_ILLraw_fill_in_bounds (
00231   dbl_rawlpdata * lp);
00232 
00233 extern int dbl_ILLraw_first_nondefault_bound (
00234   dbl_ILLlpdata * lp);
00235 extern int dbl_ILLraw_default_lower (
00236   dbl_ILLlpdata * lp,
00237   int i);
00238 extern int dbl_ILLraw_default_upper (
00239   dbl_ILLlpdata * lp,
00240   int i,
00241   int ri);
00242 
00243 extern int dbl_ILLrawlpdata_to_lpdata (
00244   dbl_rawlpdata * raw,
00245   dbl_ILLlpdata * lp);
00246 
00247 extern int dbl_ILLdata_error (
00248   dbl_qserror_collector * collector,
00249   const char *format,
00250   ...);
00251 extern void dbl_ILLdata_warn (
00252   dbl_qserror_collector * collector,
00253   const char *format,
00254   ...);
00255 
00256 #endif

Generated on Thu Mar 29 09:32:29 2012 for QSopt_ex by  doxygen 1.4.7