coin-Bcp
CoinStructuredModel.hpp
Go to the documentation of this file.
1 /* $Id: CoinStructuredModel.hpp 2083 2019-01-06 19:38:09Z unxusr $ */
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  {
34  }
36 
38 
39 public:
45  int addBlock(const std::string &rowBlock,
46  const std::string &columnBlock,
47  const CoinBaseModel &block);
51  int addBlock(const CoinBaseModel &block);
56  int addBlock(const std::string &rowBlock,
57  const std::string &columnBlock,
58  CoinBaseModel *block);
61  int addBlock(const std::string &rowBlock,
62  const std::string &columnBlock,
63  const CoinPackedMatrix &matrix,
64  const double *rowLower, const double *rowUpper,
65  const double *columnLower, const double *columnUpper,
66  const double *objective);
67 
93  int writeMps(const char *filename, int compression = 0,
94  int formatType = 0, int numberAcross = 2, bool keepStrings = false);
96  int readSmps(const char *filename,
97  bool keepNames = false,
98  bool ignoreErrors = false);
99 
106  int decompose(const CoinModel &model, int type,
107  int maxBlocks = 50, const char **starts = NULL);
114  int decompose(const CoinPackedMatrix &matrix,
115  const double *rowLower, const double *rowUpper,
116  const double *columnLower, const double *columnUpper,
117  const double *objective, int type, int maxBlocks = 50,
118  int *starts = NULL,
119  double objectiveOffset = 0.0);
120 
122 
125  inline int numberRowBlocks() const
127  {
128  return numberRowBlocks_;
129  }
131  inline int numberColumnBlocks() const
132  {
133  return numberColumnBlocks_;
134  }
136  inline int numberElementBlocks() const
137  {
138  return numberElementBlocks_;
139  }
143  inline const std::string &getRowBlock(int i) const
144  {
145  return rowBlockNames_[i];
146  }
148  inline void setRowBlock(int i, const std::string &name)
149  {
150  rowBlockNames_[i] = name;
151  }
153  int addRowBlock(int numberRows, const std::string &name);
155  int rowBlock(const std::string &name) const;
157  inline const std::string &getColumnBlock(int i) const
158  {
159  return columnBlockNames_[i];
160  }
162  inline void setColumnBlock(int i, const std::string &name)
163  {
164  columnBlockNames_[i] = name;
165  }
167  int addColumnBlock(int numberColumns, const std::string &name);
169  int columnBlock(const std::string &name) const;
171  inline const CoinModelBlockInfo &blockType(int i) const
172  {
173  return blockType_[i];
174  }
176  inline CoinBaseModel *block(int i) const
177  {
178  return blocks_[i];
179  }
181  const CoinBaseModel *block(int row, int column) const;
183  CoinModel *coinBlock(int i) const;
185  const CoinBaseModel *coinBlock(int row, int column) const;
187  int blockIndex(int row, int column) const;
193  void setCoinModel(CoinModel *block, int iBlock);
195  void refresh(int iBlock);
198  CoinModelBlockInfo block(int row, int column,
199  const double *&rowLower, const double *&rowUpper,
200  const double *&columnLower, const double *&columnUpper,
201  const double *&objective) const;
203  inline double optimizationDirection() const
204  {
205  return optimizationDirection_;
206  }
208  inline void setOptimizationDirection(double value)
209  {
210  optimizationDirection_ = value;
211  }
213 
221  CoinStructuredModel(const char *fileName, int decompose = 0,
222  int maxBlocks = 50);
224  virtual ~CoinStructuredModel();
226 
234  virtual CoinBaseModel *clone() const;
236 
237 private:
241  int fillInfo(CoinModelBlockInfo &info, const CoinModel *block);
244  void fillInfo(CoinModelBlockInfo &info, const CoinStructuredModel *block);
247  int numberRowBlocks_;
256  std::vector< std::string > rowBlockNames_;
258  std::vector< std::string > columnBlockNames_;
266 };
267 #endif
268 
269 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
270 */
int numberColumnBlocks() const
Return number of column blocks.
int CoinBigIndex
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
This is a simple minded model which is stored in a format which makes it easier to construct and modi...
Definition: CoinModel.hpp:181
virtual ~CoinStructuredModel()
Destructor.
int blockIndex(int row, int column) const
Return block number corresponding to row and column.
std::vector< std::string > columnBlockNames_
Columnblock name.
int numberRowBlocks() const
Return number of row blocks.
CoinModel ** coinModelBlocks_
CoinModel copies of blocks or NULL if original CoinModel.
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...
int addColumnBlock(int numberColumns, const std::string &name)
Add or check a column block name and number of columns.
const std::string & getRowBlock(int i) const
Return the i&#39;th row block name.
int numberElementBlocks() const
Return number of elementBlocks.
Sparse Matrix Base Class.
int maximumElementBlocks_
Maximum number of element blocks.
CoinModel * coinModelBlock(CoinModelBlockInfo &info)
Return model as a CoinModel block and fill in info structure and update counts.
const std::string & getColumnBlock(int i) const
Return i&#39;th the column block name.
void setCoinModel(CoinModel *block, int iBlock)
Sets given block into coinModelBlocks_.
void setRowBlock(int i, const std::string &name)
Set i&#39;th row block name.
int fillInfo(CoinModelBlockInfo &info, const CoinModel *block)
Fill in info structure and update counts Returns number of inconsistencies on border.
int columnBlock(const std::string &name) const
Return a column block index given a column block name.
void refresh(int iBlock)
Refresh info in blockType_.
int numberColumns() const
Return number of columns.
Definition: CoinModel.hpp:42
virtual CoinBaseModel * clone() const
Clone.
int numberElementBlocks_
Current number of element blocks.
CoinBaseModel * block(int i) const
Return i&#39;th block.
CoinStructuredModel()
Default constructor.
int numberRowBlocks_
Current number of row blocks.
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 ...
std::vector< std::string > rowBlockNames_
Rowblock name.
struct CoinModelInfo2 CoinModelBlockInfo
This is a model which is made up of Coin(Structured)Model blocks.
double objectiveOffset() const
Returns the (constant) objective offset This is the RHS entry for the objective row.
Definition: CoinModel.hpp:51
CoinStructuredModel & operator=(const CoinStructuredModel &)
=
This is a model which is made up of Coin(Structured)Model blocks.
double optimizationDirection_
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Definition: CoinModel.hpp:118
CoinModelBlockInfo * blockType_
Which parts of model are set in block.
int readSmps(const char *filename, bool keepNames=false, bool ignoreErrors=false)
Read SMPS model.
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.
void setColumnBlock(int i, const std::string &name)
Set i&#39;th column block name.
CoinBaseModel ** blocks_
Blocks.
const CoinModelBlockInfo & blockType(int i) const
Return i&#39;th block type.
int rowBlock(const std::string &name) const
Return a row block index given a row block name.
int addRowBlock(int numberRows, const std::string &name)
Add or check a row block name and number of rows.
int numberColumnBlocks_
Current number of column blocks.
void setOptimizationDirection(double value)
Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
CoinBigIndex numberElements() const
Return number of elements.
int numberRows() const
Return number of rows.
Definition: CoinModel.hpp:37
CoinModel * coinBlock(int i) const
Return i&#39;th block as CoinModel (or NULL)