- Main Page
- Namespaces
- Classes
- Files
- Directories

- Search for |

- File List
- File Members

# CoinLpIO.hpp

Go to the documentation of this file.

    00001 /* $Id: CoinLpIO.hpp 1448 2011-06-19 15:34:41Z stefan $ */
    00002 // Last edit: 11/5/08
    00003 //
    00004 // Name:     CoinLpIO.hpp; Support for Lp files
    00005 // Author:   Francois Margot
    00006 //           Tepper School of Business
    00007 //           Carnegie Mellon University, Pittsburgh, PA 15213
    00008 //           email: fmargot@andrew.cmu.edu
    00009 // Date:     12/28/03
    00010 //-----------------------------------------------------------------------------
    00011 // Copyright (C) 2003, Francois Margot, International Business Machines
    00012 // Corporation and others.  All Rights Reserved.
    00013 // This code is licensed under the terms of the Eclipse Public License (EPL).
    00014
    00015
    00016 #include <cstdio>
    00017
    00018 class CoinPackedMatrix;
    00019 #include "CoinMessage.hpp"
    00020
    00021 typedef int COINColumnIndex;
    00022
    00094 class CoinLpIO {
    00095
    00096 public:
    00097
    00100
    00101   CoinLpIO();
    00102
    00104   ~CoinLpIO();
    00105
    00111   void freePreviousNames(const int section);
    00112
    00114   void freeAll();
    00116
    00119     inline void
    00120     convertBoundToSense(const double lower, const double upper,
    00121                         char& sense, double& right, double& range) const;
    00122
    00125
    00127   const char * getProblemName() const;
    00128
    00130   void setProblemName(const char *name);
    00131
    00133   int getNumCols() const;
    00134
    00136   int getNumRows() const;
    00137
    00139   int getNumElements() const;
    00140
    00142   const double * getColLower() const;
    00143
    00145   const double * getColUpper() const;
    00146
    00148   const double * getRowLower() const;
    00149
    00151   const double * getRowUpper() const;
    00161   const char * getRowSense() const;
    00162
    00174   const double * getRightHandSide() const;
    00175
    00189   const double * getRowRange() const;
    00190
    00192   const double * getObjCoefficients() const;
    00193
    00195   const CoinPackedMatrix * getMatrixByRow() const;
    00196
    00198   const CoinPackedMatrix * getMatrixByCol() const;
    00199
    00201   const char * getObjName() const;
    00202
    00208   void getPreviousRowNames(char const * const * prev,
    00209                            int *card_prev) const;
    00210
    00215   void getPreviousColNames(char const * const * prev,
    00216                            int *card_prev) const;
    00217
    00220   char const * const * getRowNames() const;
    00221
    00223   char const * const *getColNames() const;
    00224
    00228   const char * rowName(int index) const;
    00229
    00233   const char * columnName(int index) const;
    00234
    00238   int rowIndex(const char * name) const;
    00239
    00242   int columnIndex(const char * name) const;
    00243
    00245   double objectiveOffset() const;
    00246
    00248   inline void setObjectiveOffset(double value)
    00249   { objectiveOffset_ = value;}
    00250
    00253   bool isInteger(int columnNumber) const;
    00254
    00256   const char * integerColumns() const;
    00258
    00261
    00262   double getInfinity() const;
    00263
    00266   void setInfinity(const double);
    00267
    00269   double getEpsilon() const;
    00270
    00273   void setEpsilon(const double);
    00274
    00276   int getNumberAcross() const;
    00277
    00280   void setNumberAcross(const int);
    00281
    00283   int getDecimals() const;
    00284
    00287   void setDecimals(const int);
    00289
    00301   void setLpDataWithoutRowAndColNames(
    00302                               const CoinPackedMatrix& m,
    00303                               const double* collb, const double* colub,
    00304                               const double* obj_coeff,
    00305                               const char* integrality,
    00306                               const double* rowlb, const double* rowub);
    00307
    00320   int is_invalid_name(const char *buff, const bool ranged) const;
    00321
    00338   int are_invalid_names(char const * const *vnames,
    00339                                   const int card_vnames,
    00340                                   const bool check_ranged) const;
    00341
    00344   void setDefaultRowNames();
    00345
    00347   void setDefaultColNames();
    00348
    00368   void setLpDataRowAndColNames(char const * const * const rownames,
    00369                                char const * const * const colnames);
    00370
    00385   int writeLp(const char *filename,
    00386               const double epsilon,
    00387               const int numberAcross,
    00388               const int decimals,
    00389               const bool useRowNames = true);
    00390
    00405   int writeLp(FILE *fp,
    00406               const double epsilon,
    00407               const int numberAcross,
    00408               const int decimals,
    00409               const bool useRowNames = true);
    00410
    00413   int writeLp(const char *filename, const bool useRowNames = true);
    00414
    00417   int writeLp(FILE *fp, const bool useRowNames = true);
    00418
    00423   void readLp(const char *filename, const double epsilon);
    00424
    00429   void readLp(const char *filename);
    00430
    00436   void readLp(FILE *fp, const double epsilon);
    00437
    00442   void readLp(FILE *fp);
    00443
    00445   void print() const;
    00447
    00454   void passInMessageHandler(CoinMessageHandler * handler);
    00455
    00457   void newLanguage(CoinMessages::Language language);
    00458
    00460   inline void setLanguage(CoinMessages::Language language) {newLanguage(language);}
    00461
    00463   inline CoinMessageHandler * messageHandler() const {return handler_;}
    00464
    00466   inline CoinMessages messages() {return messages_;}
    00468   inline CoinMessages * messagesPointer() {return & messages_;}
    00470
    00471 protected:
    00473   char * problemName_;
    00474
    00476   CoinMessageHandler * handler_;
    00482   bool defaultHandler_;
    00484   CoinMessages messages_;
    00485
    00487   int numberRows_;
    00488
    00490   int numberColumns_;
    00491
    00493   int numberElements_;
    00494
    00496   mutable CoinPackedMatrix *matrixByColumn_;
    00497
    00499   CoinPackedMatrix *matrixByRow_;
    00500
    00502   double * rowlower_;
    00503
    00505   double * rowupper_;
    00506
    00508   double * collower_;
    00509
    00511   double * colupper_;
    00512
    00514   mutable double * rhs_;
    00515
    00519   mutable double  *rowrange_;
    00520
    00522   mutable char * rowsense_;
    00523
    00525   double * objective_;
    00526
    00528   double objectiveOffset_;
    00529
    00532   char * integerType_;
    00533
    00535   char * fileName_;
    00536
    00538   double infinity_;
    00539
    00541   double epsilon_;
    00542
    00544   int numberAcross_;
    00545
    00547   int decimals_;
    00548
    00550   char *objName_;
    00551
    00558   char **previous_names_[2];
    00559
    00564   int card_previous_names_[2];
    00565
    00570   char **names_[2];
    00571
    00572   typedef struct {
    00573     int index, next;
    00574   } CoinHashLink;
    00575
    00579   int maxHash_[2];
    00580
    00584   int numberHash_[2];
    00585
    00589   mutable CoinHashLink *hash_[2];
    00590
    00596   void startHash(char const * const * const names,
    00597                  const COINColumnIndex number,
    00598                  int section);
    00599
    00603   void stopHash(int section);
    00604
    00609   COINColumnIndex findHash(const char *name, int section) const;
    00610
    00615   void insertHash(const char *thisName, int section);
    00616
    00619   void out_coeff(FILE *fp, double v, int print_1) const;
    00620
    00624   int find_obj(FILE *fp) const;
    00625
    00631   int is_subject_to(const char *buff) const;
    00632
    00635   int first_is_number(const char *buff) const;
    00636
    00639   int is_comment(const char *buff) const;
    00640
    00642   void skip_comment(char *buff, FILE *fp) const;
    00643
    00645   void scan_next(char *buff, FILE *fp) const;
    00646
    00649   int is_free(const char *buff) const;
    00650
    00653   int is_inf(const char *buff) const;
    00654
    00660   int is_sense(const char *buff) const;
    00661
    00671   int is_keyword(const char *buff) const;
    00672
    00675   int read_monom_obj(FILE *fp, double *coeff, char **name, int *cnt,
    00676                      char **obj_name);
    00677
    00682   int read_monom_row(FILE *fp, char *start_str, double *coeff, char **name,
    00683                      int cnt_coeff) const;
    00684
    00686   void realloc_coeff(double **coeff, char ***colNames, int *maxcoeff) const;
    00687
    00689   void realloc_row(char ***rowNames, int **start, double **rhs,
    00690                    double **rowlow, double **rowup, int *maxrow) const;
    00691
    00693   void realloc_col(double **collow, double **colup, char **is_int,
    00694                    int *maxcol) const;
    00695
    00697   void read_row(FILE *fp, char *buff, double **pcoeff, char ***pcolNames,
    00698                 int *cnt_coeff, int *maxcoeff,
    00699                      double *rhs, double *rowlow, double *rowup,
    00700                      int *cnt_row, double inf) const;
    00701
    00715   void checkRowNames();
    00716
    00725   void checkColNames();
    00726
    00727 };
    00728