CoinUtils  2.10.14
CoinStructuredModel.hpp
Go to the documentation of this file.
1 /* $Id: CoinStructuredModel.hpp 1691 2014-03-19 12:43:56Z forrest $ */
2 // Copyright (C) 2008, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef CoinStructuredModel_H
7 #define CoinStructuredModel_H
8 
9 #include "CoinModel.hpp"
10 #include <vector>
11 
15  typedef struct CoinModelInfo2 {
16  int rowBlock; // Which row block
17  int columnBlock; // Which column block
18  char matrix; // nonzero if matrix exists
19  char rhs; // nonzero if non default rhs exists
20  char rowName; // nonzero if row names exists
21  char integer; // nonzero if integer information exists
22  char bounds; // nonzero if non default bounds/objective exists
23  char columnName; // nonzero if column names exists
25  rowBlock(0),
26  columnBlock(0),
27  matrix(0),
28  rhs(0),
29  rowName(0),
30  integer(0),
31  bounds(0),
32  columnName(0)
33  {}
35 
37 
38 public:
44  int addBlock(const std::string & rowBlock,
45  const std::string & columnBlock,
46  const CoinBaseModel & block);
55  int addBlock(const std::string & rowBlock,
56  const std::string & columnBlock,
60  int addBlock(const std::string & rowBlock,
61  const std::string & columnBlock,
62  const CoinPackedMatrix & matrix,
63  const double * rowLower, const double * rowUpper,
64  const double * columnLower, const double * columnUpper,
65  const double * objective);
66 
92  int writeMps(const char *filename, int compression = 0,
93  int formatType = 0, int numberAcross = 2, bool keepStrings=false) ;
95  int readSmps(const char *filename,
96  bool keepNames = false,
97  bool ignoreErrors = false);
98 
105  int decompose(const CoinModel &model,int type,
106  int maxBlocks=50, const char ** starts=NULL);
113  int decompose(const CoinPackedMatrix & matrix,
114  const double * rowLower, const double * rowUpper,
115  const double * columnLower, const double * columnUpper,
116  const double * objective, int type,int maxBlocks=50,
117  int * starts=NULL,
118  double objectiveOffset=0.0);
119 
121 
122 
125  inline int numberRowBlocks() const
127  { return numberRowBlocks_;}
129  inline int numberColumnBlocks() const
130  { return numberColumnBlocks_;}
133  { return numberElementBlocks_;}
137  inline const std::string & getRowBlock(int i) const
138  { return rowBlockNames_[i];}
140  inline void setRowBlock(int i,const std::string &name)
141  { rowBlockNames_[i] = name;}
143  int addRowBlock(int numberRows,const std::string &name) ;
145  int rowBlock(const std::string &name) const;
147  inline const std::string & getColumnBlock(int i) const
148  { return columnBlockNames_[i];}
150  inline void setColumnBlock(int i,const std::string &name)
151  { columnBlockNames_[i] = name;}
153  int addColumnBlock(int numberColumns,const std::string &name) ;
155  int columnBlock(const std::string &name) const;
157  inline const CoinModelBlockInfo & blockType(int i) const
158  { return blockType_[i];}
160  inline CoinBaseModel * block(int i) const
161  { return blocks_[i];}
163  const CoinBaseModel * block(int row,int column) const;
165  CoinModel * coinBlock(int i) const;
167  const CoinBaseModel * coinBlock(int row,int column) const;
169  int blockIndex(int row,int column) const;
175  void setCoinModel(CoinModel * block, int iBlock);
177  void refresh(int iBlock);
180  CoinModelBlockInfo block(int row,int column,
181  const double * & rowLower, const double * & rowUpper,
182  const double * & columnLower, const double * & columnUpper,
183  const double * & objective) const;
185  inline double optimizationDirection() const {
186  return optimizationDirection_;
187  }
189  inline void setOptimizationDirection(double value)
190  { optimizationDirection_=value;}
192 
200  CoinStructuredModel(const char *fileName,int decompose=0,
201  int maxBlocks=50);
205 
213  virtual CoinBaseModel * clone() const;
215 
216 private:
217 
227  int numberRowBlocks_;
236  std::vector<std::string> rowBlockNames_;
238  std::vector<std::string> columnBlockNames_;
246 };
247 #endif
CoinBaseModel::numberRows
int numberRows() const
Return number of rows.
Definition: CoinModel.hpp:39
CoinBaseModel::objectiveOffset
double objectiveOffset() const
Returns the (constant) objective offset This is the RHS entry for the objective row.
Definition: CoinModel.hpp:49
CoinStructuredModel::columnBlockNames_
std::vector< std::string > columnBlockNames_
Columnblock name.
Definition: CoinStructuredModel.hpp:238
CoinStructuredModel::rowBlock
int rowBlock(const std::string &name) const
Return a row block index given a row block name.
CoinModelInfo2::integer
char integer
Definition: CoinStructuredModel.hpp:21
CoinStructuredModel::addBlock
int addBlock(const CoinBaseModel &block)
add a block from a CoinModel with names in model returns number of errors (e.g.
CoinStructuredModel::~CoinStructuredModel
virtual ~CoinStructuredModel()
Destructor.
CoinModelInfo2::columnName
char columnName
Definition: CoinStructuredModel.hpp:23
CoinModelInfo2::columnBlock
int columnBlock
Definition: CoinStructuredModel.hpp:17
CoinBaseModel::optimizationDirection_
double optimizationDirection_
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Definition: CoinModel.hpp:97
CoinModelBlockInfo
struct CoinModelInfo2 CoinModelBlockInfo
This is a model which is made up of Coin(Structured)Model blocks.
CoinStructuredModel::decompose
int decompose(const CoinModel &model, int type, int maxBlocks=50, const char **starts=NULL)
Decompose a CoinModel 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero ...
CoinStructuredModel::CoinStructuredModel
CoinStructuredModel()
Default constructor.
CoinModelInfo2::rhs
char rhs
Definition: CoinStructuredModel.hpp:19
CoinStructuredModel::numberRowBlocks
int numberRowBlocks() const
Return number of row blocks.
Definition: CoinStructuredModel.hpp:126
CoinStructuredModel::readSmps
int readSmps(const char *filename, bool keepNames=false, bool ignoreErrors=false)
Read SMPS model.
CoinStructuredModel::blockIndex
int blockIndex(int row, int column) const
Return block number corresponding to row and column.
CoinStructuredModel
Definition: CoinStructuredModel.hpp:36
CoinStructuredModel::optimizationDirection
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Definition: CoinStructuredModel.hpp:185
CoinStructuredModel::blocks_
CoinBaseModel ** blocks_
Blocks.
Definition: CoinStructuredModel.hpp:240
CoinStructuredModel::coinModelBlocks_
CoinModel ** coinModelBlocks_
CoinModel copies of blocks or NULL if original CoinModel.
Definition: CoinStructuredModel.hpp:242
CoinModel
This is a simple minded model which is stored in a format which makes it easier to construct and modi...
Definition: CoinModel.hpp:161
CoinStructuredModel::addColumnBlock
int addColumnBlock(int numberColumns, const std::string &name)
Add or check a column block name and number of columns.
CoinStructuredModel::block
CoinBaseModel * block(int i) const
Return i'th block.
Definition: CoinStructuredModel.hpp:160
CoinStructuredModel::coinModelBlock
CoinModel * coinModelBlock(CoinModelBlockInfo &info)
Return model as a CoinModel block and fill in info structure and update counts.
CoinStructuredModel::numberElementBlocks
CoinBigIndex numberElementBlocks() const
Return number of elementBlocks.
Definition: CoinStructuredModel.hpp:132
CoinStructuredModel::refresh
void refresh(int iBlock)
Refresh info in blockType_.
CoinModelInfo2::rowBlock
int rowBlock
Definition: CoinStructuredModel.hpp:16
CoinStructuredModel::coinBlock
CoinModel * coinBlock(int i) const
Return i'th block as CoinModel (or NULL)
CoinStructuredModel::writeMps
int writeMps(const char *filename, int compression=0, int formatType=0, int numberAcross=2, bool keepStrings=false)
Write the problem in MPS format to a file with the given filename.
CoinBaseModel
Definition: CoinModel.hpp:13
CoinStructuredModel::CoinStructuredModel
CoinStructuredModel(const char *fileName, int decompose=0, int maxBlocks=50)
Read a problem in MPS format from the given filename.
CoinModelInfo2::CoinModelInfo2
CoinModelInfo2()
Definition: CoinStructuredModel.hpp:24
CoinStructuredModel::numberElements
CoinBigIndex numberElements() const
Return number of elements.
CoinStructuredModel::blockType
const CoinModelBlockInfo & blockType(int i) const
Return i'th block type.
Definition: CoinStructuredModel.hpp:157
CoinStructuredModel::decompose
int decompose(const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective, int type, int maxBlocks=50, int *starts=NULL, double objectiveOffset=0.0)
Decompose a model specified as arrays + CoinPackedMatrix 1 - try D-W 2 - try Benders 3 - try Staircas...
CoinStructuredModel::blockType_
CoinModelBlockInfo * blockType_
Which parts of model are set in block.
Definition: CoinStructuredModel.hpp:244
CoinPackedMatrix
Sparse Matrix Base Class.
Definition: CoinPackedMatrix.hpp:79
CoinStructuredModel::setCoinModel
void setCoinModel(CoinModel *block, int iBlock)
Sets given block into coinModelBlocks_.
CoinStructuredModel::block
CoinModelBlockInfo block(int row, int column, const double *&rowLower, const double *&rowUpper, const double *&columnLower, const double *&columnUpper, const double *&objective) const
Fill pointers corresponding to row and column.
CoinStructuredModel::coinBlock
const CoinBaseModel * coinBlock(int row, int column) const
Return block corresponding to row and column as CoinModel.
CoinModelInfo2
This is a model which is made up of Coin(Structured)Model blocks.
Definition: CoinStructuredModel.hpp:15
CoinStructuredModel::rowBlockNames_
std::vector< std::string > rowBlockNames_
Rowblock name.
Definition: CoinStructuredModel.hpp:236
CoinModelInfo2::rowName
char rowName
Definition: CoinStructuredModel.hpp:20
CoinStructuredModel::numberColumnBlocks
int numberColumnBlocks() const
Return number of column blocks.
Definition: CoinStructuredModel.hpp:129
CoinStructuredModel::getRowBlock
const std::string & getRowBlock(int i) const
Return the i'th row block name.
Definition: CoinStructuredModel.hpp:137
CoinStructuredModel::fillInfo
int fillInfo(CoinModelBlockInfo &info, const CoinModel *block)
Fill in info structure and update counts Returns number of inconsistencies on border.
CoinStructuredModel::numberElementBlocks_
int numberElementBlocks_
Current number of element blocks.
Definition: CoinStructuredModel.hpp:232
CoinStructuredModel::getColumnBlock
const std::string & getColumnBlock(int i) const
Return i'th the column block name.
Definition: CoinStructuredModel.hpp:147
CoinStructuredModel::addRowBlock
int addRowBlock(int numberRows, const std::string &name)
Add or check a row block name and number of rows.
CoinStructuredModel::setColumnBlock
void setColumnBlock(int i, const std::string &name)
Set i'th column block name.
Definition: CoinStructuredModel.hpp:150
CoinStructuredModel::addBlock
int addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective)
add a block using names
CoinStructuredModel::setRowBlock
void setRowBlock(int i, const std::string &name)
Set i'th row block name.
Definition: CoinStructuredModel.hpp:140
CoinStructuredModel::columnBlock
int columnBlock(const std::string &name) const
Return a column block index given a column block name.
CoinModelInfo2::bounds
char bounds
Definition: CoinStructuredModel.hpp:22
CoinStructuredModel::fillInfo
void fillInfo(CoinModelBlockInfo &info, const CoinStructuredModel *block)
Fill in info structure and update counts.
CoinStructuredModel::setOptimizationDirection
void setOptimizationDirection(double value)
Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Definition: CoinStructuredModel.hpp:189
CoinStructuredModel::CoinStructuredModel
CoinStructuredModel(const CoinStructuredModel &)
The copy constructor.
CoinModel.hpp
CoinBigIndex
int CoinBigIndex
Definition: Coin_C_defines.h:105
CoinStructuredModel::numberRowBlocks_
int numberRowBlocks_
Current number of row blocks.
Definition: CoinStructuredModel.hpp:228
CoinStructuredModel::clone
virtual CoinBaseModel * clone() const
Clone.
CoinBaseModel::numberColumns
int numberColumns() const
Return number of columns.
Definition: CoinModel.hpp:42
CoinModelInfo2::matrix
char matrix
Definition: CoinStructuredModel.hpp:18
CoinStructuredModel::addBlock
int addBlock(const std::string &rowBlock, const std::string &columnBlock, CoinBaseModel *block)
add a block from a CoinModel using names given as parameters returns number of errors (e....
CoinStructuredModel::block
const CoinBaseModel * block(int row, int column) const
Return block corresponding to row and column.
CoinStructuredModel::maximumElementBlocks_
int maximumElementBlocks_
Maximum number of element blocks.
Definition: CoinStructuredModel.hpp:234
CoinStructuredModel::numberColumnBlocks_
int numberColumnBlocks_
Current number of column blocks.
Definition: CoinStructuredModel.hpp:230
CoinStructuredModel::operator=
CoinStructuredModel & operator=(const CoinStructuredModel &)
=
CoinStructuredModel::addBlock
int addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinBaseModel &block)
add a block from a CoinModel using names given as parameters returns number of errors (e....