CoinUtils 2.11.4
Loading...
Searching...
No Matches
CoinStructuredModel.hpp
Go to the documentation of this file.
1/* $Id$ */
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
15typedef 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
39public:
45 int addBlock(const std::string &rowBlock,
46 const std::string &columnBlock,
47 const CoinBaseModel &block);
56 int addBlock(const std::string &rowBlock,
57 const std::string &columnBlock,
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
126 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 {
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 {
206 }
208 inline void setOptimizationDirection(double value)
209 {
211 }
213
221 CoinStructuredModel(const char *fileName, int decompose = 0,
222 int maxBlocks = 50);
226
234 virtual CoinBaseModel *clone() const;
236
237private:
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*/
struct CoinModelInfo2 CoinModelBlockInfo
This is a model which is made up of Coin(Structured)Model blocks.
int CoinBigIndex
int numberRows() const
Return number of rows.
Definition: CoinModel.hpp:37
double objectiveOffset() const
Returns the (constant) objective offset This is the RHS entry for the objective row.
Definition: CoinModel.hpp:51
int numberColumns() const
Return number of columns.
Definition: CoinModel.hpp:42
double optimizationDirection_
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
Definition: CoinModel.hpp:118
This is a simple minded model which is stored in a format which makes it easier to construct and modi...
Definition: CoinModel.hpp:181
Sparse Matrix Base Class.
virtual CoinBaseModel * clone() const
Clone.
int rowBlock(const std::string &name) const
Return a row block index given a row block name.
int columnBlock(const std::string &name) const
Return a column block index given a column block name.
int numberRowBlocks() const
Return number of row blocks.
double optimizationDirection() const
Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
CoinStructuredModel(const CoinStructuredModel &)
The copy constructor.
CoinStructuredModel()
Default constructor.
int addBlock(const CoinBaseModel &block)
add a block from a CoinModel with names in model returns number of errors (e.g.
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.
int numberRowBlocks_
Current number of row blocks.
const CoinModelBlockInfo & blockType(int i) const
Return i'th block type.
void fillInfo(CoinModelBlockInfo &info, const CoinStructuredModel *block)
Fill in info structure and update counts.
void setOptimizationDirection(double value)
Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore.
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 blockIndex(int row, int column) const
Return block number corresponding to row and column.
CoinBaseModel * block(int i) const
Return i'th block.
const std::string & getColumnBlock(int i) const
Return i'th the column block name.
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...
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 ...
void setColumnBlock(int i, const std::string &name)
Set i'th column block name.
int numberElementBlocks_
Current number of element blocks.
std::vector< std::string > rowBlockNames_
Rowblock name.
int numberElementBlocks() const
Return number of elementBlocks.
void setCoinModel(CoinModel *block, int iBlock)
Sets given block into coinModelBlocks_.
CoinModel ** coinModelBlocks_
CoinModel copies of blocks or NULL if original CoinModel.
int numberColumnBlocks_
Current number of column blocks.
const std::string & getRowBlock(int i) const
Return the i'th row block name.
void setRowBlock(int i, const std::string &name)
Set i'th row block name.
CoinStructuredModel(const char *fileName, int decompose=0, int maxBlocks=50)
Read a problem in MPS format from the given filename.
int addRowBlock(int numberRows, const std::string &name)
Add or check a row block name and number of rows.
int fillInfo(CoinModelBlockInfo &info, const CoinModel *block)
Fill in info structure and update counts Returns number of inconsistencies on border.
CoinStructuredModel & operator=(const CoinStructuredModel &)
=
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....
int maximumElementBlocks_
Maximum number of element blocks.
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.
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
int addColumnBlock(int numberColumns, const std::string &name)
Add or check a column block name and number of columns.
int readSmps(const char *filename, bool keepNames=false, bool ignoreErrors=false)
Read SMPS model.
virtual ~CoinStructuredModel()
Destructor.
CoinModel * coinModelBlock(CoinModelBlockInfo &info)
Return model as a CoinModel block and fill in info structure and update counts.
CoinModelBlockInfo * blockType_
Which parts of model are set in block.
const CoinBaseModel * coinBlock(int row, int column) const
Return block corresponding to row and column as CoinModel.
CoinModel * coinBlock(int i) const
Return i'th block as CoinModel (or NULL)
int numberColumnBlocks() const
Return number of column blocks.
CoinBaseModel ** blocks_
Blocks.
CoinBigIndex numberElements() const
Return number of elements.
void refresh(int iBlock)
Refresh info in blockType_.
const CoinBaseModel * block(int row, int column) const
Return block corresponding to row and column.
std::vector< std::string > columnBlockNames_
Columnblock name.
This is a model which is made up of Coin(Structured)Model blocks.