CoinUtils 2.11.4
CoinOslFactorization.hpp
Go to the documentation of this file.
1/* $Id$ */
2// Copyright (C) 1987, 2009, 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/*
7 Authors
8
9 John Forrest
10
11 */
12#ifndef CoinOslFactorization_H
13#define CoinOslFactorization_H
14#include <iostream>
15#include <string>
16#include <cassert>
17#include "CoinTypes.hpp"
18#include "CoinIndexedVector.hpp"
28typedef struct {
29 int suc, pre;
30} EKKHlink;
31typedef struct _EKKfactinfo {
32 double drtpiv;
33 double demark;
34 double zpivlu;
36 double areaFactor;
37 int *xrsadr;
38 int *xcsadr;
39 int *xrnadr;
40 int *xcnadr;
41 int *krpadr;
42 int *kcpadr;
43 int *mpermu;
45 int *back;
46 char *nonzero;
47 double *trueStart;
48 mutable double *kadrpm;
52
53 int *xecadr;
54 int *xeradr;
55 double *xeeadr;
56 double *xe2adr;
59 double *kw1adr;
60 double *kw2adr;
61 double *kw3adr;
62 int *hpivcoR;
63 int nrow;
64 int nrowmx;
67 int maxinv;
68 int nnetas;
69 int iterin;
70 int iter0;
71 int invok;
72 int nbfinv;
74 int nnentl;
75 int nnentu;
76#ifdef CLP_REUSE_ETAS
77 int save_nnentu;
78#endif
79 int ndenuc;
80 int npivots; /* use as xpivsq in factorization */
81 int kmxeta;
82 int xnetal;
85 int iterno;
90 int lstart;
92 mutable int packedMode;
95 bool rows_ok; /* replaces test using mrstrt[1] */
96#ifdef CLP_REUSE_ETAS
97 mutable int reintro;
98#endif
100 int sortedEta; /* if vector for F-T is sorted */
107
109 friend void CoinOslFactorizationUnitTest(const std::string &mpsDir);
110
111public:
118
126
130 virtual void getAreas(int numberRows,
131 int numberColumns,
132 int maximumL,
133 int maximumU);
134
136 virtual void preProcess();
142 virtual int factor();
144 virtual void postProcess(const int *sequence, int *pivotVariable);
146 virtual void makeNonSingular(int *sequence, int numberColumns);
154 int factorize(const CoinPackedMatrix &matrix,
155 int rowIsBasic[], int columnIsBasic[],
156 double areaFactor = 0.0);
158
162 virtual inline int numberElements() const
163 {
165 }
169 virtual int *pivotRow() const;
173 virtual int *intWorkArea() const;
175 virtual int *numberInRow() const;
177 virtual int *numberInColumn() const;
179 virtual int *starts() const;
181 virtual int *permuteBack() const;
183 virtual bool wantsTableauColumn() const;
188 virtual void setUsefulInformation(const int *info, int whereFrom);
190 virtual void maximumPivots(int value);
191
193 double maximumCoefficient() const;
195 double conditionNumber() const;
197 virtual void clearArrays();
199
202
210 virtual int replaceColumn(CoinIndexedVector *regionSparse,
211 int pivotRow,
212 double pivotCheck,
213 bool checkBeforeModifying = false,
214 double acceptablePivot = 1.0e-8);
216
226 virtual int updateColumnFT(CoinIndexedVector *regionSparse,
227 CoinIndexedVector *regionSparse2,
228 bool noPermute = false);
231 virtual int updateColumn(CoinIndexedVector *regionSparse,
232 CoinIndexedVector *regionSparse2,
233 bool noPermute = false) const;
235 virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1,
236 CoinIndexedVector *regionSparse2,
237 CoinIndexedVector *regionSparse3,
238 bool noPermute = false);
243 virtual int updateColumnTranspose(CoinIndexedVector *regionSparse,
244 CoinIndexedVector *regionSparse2) const;
246
247
252 //inline void clearArrays()
253 //{ gutsOfDestructor();}
255 virtual int *indices() const;
257 virtual inline int *permute() const
258 {
259 return NULL; /*pivotRow_*/
260 ;
261 }
263
265 void gutsOfDestructor(bool clearFact = true);
267 void gutsOfInitialize(bool zapFact = true);
270
272protected:
275 int checkPivot(double saveFromU, double oldPivot) const;
277protected:
283};
284#endif
285
286/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
287*/
struct _EKKfactinfo EKKfactinfo
double CoinFactorizationDouble
Definition: CoinTypes.hpp:57
virtual void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU)
Gets space for a factorization.
CoinOslFactorization()
Default constructor.
virtual void preProcess()
PreProcesses column ordered copy of basis.
virtual int numberElements() const
Total number of elements in factorization.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
virtual int * intWorkArea() const
Returns int work area.
virtual void clearArrays()
Get rid of all memory.
virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false) const
This version has same effect as above with FTUpdate==false so number returned is always >=0.
void gutsOfInitialize(bool zapFact=true)
The real work of constructor.
virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModify...
virtual int factor()
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
virtual int * numberInColumn() const
Number of entries in each column.
friend void CoinOslFactorizationUnitTest(const std::string &mpsDir)
virtual int * permute() const
Returns permute in.
double conditionNumber() const
Condition number - product of pivots after factorization.
virtual int * numberInRow() const
Number of entries in each row.
double maximumCoefficient() const
Returns maximum absolute value in factorization.
CoinOslFactorization & operator=(const CoinOslFactorization &other)
= copy
virtual int * starts() const
Returns array to put basis starts in.
virtual CoinOtherFactorization * clone() const
Clone.
virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute=false)
does FTRAN on two columns
void gutsOfCopy(const CoinOslFactorization &other)
The real work of copy.
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular.
virtual int * pivotRow() const
Returns pivot row.
virtual ~CoinOslFactorization()
Destructor.
virtual int * permuteBack() const
Returns permute back.
virtual int * indices() const
Get rid of all memory.
virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const
Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - i...
virtual CoinFactorizationDouble * workArea() const
Returns work area.
int factorize(const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor=0.0)
When part of LP - given by basic variables.
EKKfactinfo factInfo_
Osl factorization data.
void gutsOfDestructor(bool clearFact=true)
The real work of desstructor.
virtual int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false)
Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no...
virtual void maximumPivots(int value)
Set maximum pivots.
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
CoinOslFactorization(const CoinOslFactorization &other)
Copy constructor.
virtual void makeNonSingular(int *sequence, int numberColumns)
Makes a non-singular basis by replacing variables.
virtual void setUsefulInformation(const int *info, int whereFrom)
Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for repl...
Abstract base class which also has some scalars so can be used from Dense or Simp.
int numberPivots_
Number pivots since last factorization.
int numberRows_
Number of Rows in factorization.
int numberColumns_
Number of Columns in factorization.
int numberRows() const
Number of Rows after factorization.
int numberColumns() const
Total number of columns in factorization.
Sparse Matrix Base Class.