107     int &numberColumnBasic);
 
  110     int &numberColumnBasic,
 
  111     int *row, 
int *start,
 
  112     int *rowCount, 
int *columnCount,
 
  116     int &numberColumnBasic,
 
  117     int *row, 
int *start,
 
  118     int *rowCount, 
int *columnCount,
 
  119     long double *element);
 
  122   void scale(
int numberRowsAlreadyScaled);
 
  153     const double *x, 
double *y) 
const;
 
  158     const double *x, 
double *y) 
const;
 
  163     const double *x, 
double *y) 
const;
 
  168     const double *x, 
double *y) 
const;
 
  177     const double *x, 
double *y) 
const;
 
  196   double dualColumn1Row(
int iBlock, 
double upperThetaSlack, 
int &freeSequence,
 
  230     double &bestValue) 
const;
 
  241     const double *weights) 
const;
 
  251     double *infeasibilities,
 
  252     double referenceIn, 
double devex,
 
  254     unsigned int *reference,
 
  255     double *weights, 
double scaleFactor) 
const;
 
  265     double *infeasibilities,
 
  266     double referenceIn, 
double devex,
 
  268     unsigned int *reference,
 
  269     double *weights, 
double scaleFactor) 
const;
 
  280     double referenceIn, 
double devex,
 
  282     unsigned int *reference,
 
  283     double *weights, 
double scaleFactor) 
const;
 
  290     int &bestSequence, 
int &numberWanted);
 
  429     int numberRows, 
const int *whichRows,
 
  430     int numberColumns, 
const int *whichColumns);
 
  432     int numberRows, 
const int *whichRows,
 
  433     int numberColumns, 
const int *whichColumns);
 
  448 #if ABC_PARALLEL == 0 
  449 #define NUMBER_ROW_BLOCKS 1 
  450 #define NUMBER_COLUMN_BLOCKS 1 
  451 #elif ABC_PARALLEL == 1 
  452 #define NUMBER_ROW_BLOCKS 4 
  453 #define NUMBER_COLUMN_BLOCKS 4 
  455 #define NUMBER_ROW_BLOCKS 8 
  456 #define NUMBER_COLUMN_BLOCKS 8 
  480   int countFirst_[MAX_COUNT + 1];
 
  482   int *countRealColumn_;
 
  486   double *countElement_;
 
  515   double acceptablePivot;
 
  522   double *bestPossiblePtr;
 
  523   double *upperThetaPtr;
 
  525   double *freePivotPtr;
 
  527   const unsigned short *count;
 
  530   const double *element;
 
  531   const unsigned short *column;
 
  533   int numberInRowArray;
 
  593   pthread_t *threadId_;
 
  594   dualColumn0Struct *info_;
 
  619     const double *piWeight,
 
  620     double referenceIn, 
double devex,
 
  622     unsigned int *reference,
 
  623     double *weights, 
double scaleFactor);
 
CoinPackedMatrix * matrix_
Data. 
int primalColumnDouble(int iBlock, CoinPartitionedVector &updateForTableauRow, CoinPartitionedVector &updateForDjs, const CoinIndexedVector &updateForWeights, CoinPartitionedVector &spareColumn1, double *infeasibilities, double referenceIn, double devex, unsigned int *reference, double *weights, double scaleFactor) const 
does steepest edge double or triple update If scaleFactor!=0 then use with tableau row to update djs ...
int primalColumnSparseDouble(int iBlock, CoinPartitionedVector &updateForTableauRow, CoinPartitionedVector &updateForDjs, const CoinIndexedVector &updateForWeights, CoinPartitionedVector &spareColumn1, double *infeasibilities, double referenceIn, double devex, unsigned int *reference, double *weights, double scaleFactor) const 
does steepest edge double or triple update If scaleFactor!=0 then use with tableau row to update djs ...
void swapOne(const AbcSimplex *model, const AbcMatrix *matrix, int iColumn)
Swap one variable. 
CoinBigIndex getNumElements() const 
Number of entries in the packed matrix. 
void timesModifyExcludingSlacks(double scalar, const double *x, double *y) const 
Return y + A * scalar *x in y. 
int numberBlocks_
Number of blocks. 
double savedBestDj() const 
Current best reduced cost. 
void putIntofUseful(int sequence, CoinIndexedVector &spare)
Put into useful. 
void setModel(AbcSimplex *model)
Sets model. 
#define NUMBER_ROW_BLOCKS
void setCurrentWanted(int value)
Returns CoinPackedMatrix (non const) 
int minimumObjectsScan_
Partial pricing tuning parameter - minimum number of "objects" to scan. 
double endFraction() const 
Current end of search space in matrix (as fraction) 
const double * getElements() const 
A vector containing the elements in the packed matrix. 
void setSavedBestSequence(int value)
Returns CoinPackedMatrix (non const) 
bool usefulInfo() const 
Returns true if copy has useful information. 
bool gotRowCopy() const 
Returns CoinPackedMatrix (non const) 
int minimumGoodReducedCosts() const 
Partial pricing tuning parameter - minimum number of negative reduced costs to get. 
CoinPackedMatrix * getPackedMatrix() const 
Return a complete CoinPackedMatrix. 
int numberRowBlocks_
Number of actual row blocks. 
int numberColumnBlocks_
Number of actual column blocks. 
void scale(int numberRowsAlreadyScaled)
Scales and creates row copy. 
int getNumRows() const 
Number of rows. 
const int * getVectorLengths() const 
The lengths of the major-dimension vectors. 
void setMinimumGoodReducedCosts(int value)
Returns CoinPackedMatrix (non const) 
double * work_
work arrays 
int blockStart(int block) const 
Start of each block (in stored) 
void transposeTimesAll(const double *x, double *y) const 
Return y - A * x in y. 
AbcMatrix2 & operator=(const AbcMatrix2 &)
The copy constructor. 
CoinBigIndex * rowStart_
Start of each row (per block) - last lot are useless first all row starts for block 0...
int numberColumnBlocks() const 
Number of actual column blocks. 
int currentWanted_
Current number of negative reduced costs which we still need. 
unsigned short * count_
Counts of elements in each part of row. 
int numberRowBlocks() const 
Number of actual row blocks. 
int numberRows() const 
Number of rows. 
int getNumRows() const 
Number of rows. 
void setEndFraction(double value)
Returns CoinPackedMatrix (non const) 
const CoinBigIndex * getVectorStarts() const 
Starts. 
Sparse Matrix Base Class. 
int * column_
Column indices and reverse lookup (within block) 
int pivotColumnDantzig(const CoinIndexedVector &updates, CoinPartitionedVector &spare) const 
Get sequenceIn when Dantzig. 
double startFraction() const 
Current start of search space in matrix (as fraction) 
CoinBigIndex * start_
Starts for odd/long vectors. 
int chooseBestDj(int iBlock, const CoinIndexedVector &infeasibilities, const double *weights) const 
Chooses best weighted dj. 
void copy(const AbcMatrix *from)
Copy contents - resizing if necessary - otherwise re-use memory. 
int primalColumnRowAndDjs(int iBlock, const CoinIndexedVector &updateTableau, const CoinIndexedVector &updateDjs, CoinPartitionedVector &tableauRow) const 
gets tableau row and dj row - returns number of slacks in block 
int * offset_
Column offset for each block (plus one at end) 
double * getMutableElements() const 
Mutable elements. 
unsigned short * column_
columns within block 
CoinBigIndex * rowStart() const 
Row starts. 
void subsetTransposeTimes(const CoinIndexedVector &x, CoinIndexedVector &z) const 
Return x *A in z but just for indices Already in z. 
int numberBlocks_
Number of blocks. 
void transposeTimesBasic(double scalar, const double *x, double *y) const 
Return y + A * scalar(+-1) *x in y. 
double * element_
Elements. 
double startFraction_
Special row copy. 
void timesModifyIncludingSlacks(double scalar, const double *x, double *y) const 
Return y + A * scalar(+-1) *x in y. 
int primalColumnRow(int iBlock, bool doByRow, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow) const 
gets tableau row - returns number of slacks in block 
CoinPackedMatrix * reverseOrderedCopy() const 
Returns a new matrix in reverse order without gaps. 
const int * getIndices() const 
A vector containing the minor indices of the elements in the packed matrix. 
CoinBigIndex countBasis(const int *whichColumn, int &numberColumnBasic)
Returns number of elements in column part of basis. 
void transposeTimes2(const AbcSimplex *model, const double *pi, CoinIndexedVector &dj1, const double *piWeight, double referenceIn, double devex, unsigned int *reference, double *weights, double scaleFactor)
Updates two arrays for steepest. 
CoinPackedMatrix * matrix() const 
Returns CoinPackedMatrix (non const) 
CoinBigIndex * rowStart_
Row starts. 
int * startColumnBlock() const 
Start of each column block. 
void primalColumnSubset(int iBlock, const CoinIndexedVector &update, const CoinPartitionedVector &tableauRow, CoinPartitionedVector &weights) const 
gets subset updates 
int numberColumns() const 
Number of rows. 
void transposeTimes(const AbcSimplex *model, const double *pi, CoinIndexedVector &output) const 
Return x * -1 * A in z. 
const CoinBigIndex * getVectorStarts() const 
The positions where the major-dimension vectors start in elements and indices. 
void setMinimumObjectsScan(int value)
Returns CoinPackedMatrix (non const) 
double endFraction_
Current end of search space in matrix (as fraction) 
double dualColumn1Row(int iBlock, double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta 
void unpack(CoinIndexedVector &rowArray, int column) const 
Unpacks a column into an CoinIndexedVector. 
double * rowElements() const 
Row elements. 
void sortBlocks(const AbcSimplex *model)
Sort blocks. 
int savedBestSequence_
Saved best sequence in pricing. 
const int * blockStart() const 
Start of each block (in stored) 
CoinSimplexInt * rowColumns() const 
Row columns. 
blockStruct * block_
Blocks (ordinary start at 0 and go to first block) 
void setStartFraction(double value)
Returns CoinPackedMatrix (non const) 
double savedBestDj_
Best reduced cost so far. 
void createRowCopy()
Creates row copy. 
int getNumCols() const 
Number of columns. 
CoinBigIndex * getMutableVectorStarts() const 
Return a complete CoinPackedMatrix. 
void transposeTimes(const CoinIndexedVector &x, CoinIndexedVector &z) const 
Return -x *A in z 
int blockStart_[NUMBER_ROW_BLOCKS+1]
Start of each block (in stored) 
void moveLargestToStart()
Move largest in column to beginning (not used as doesn't help factorization) 
int currentWanted() const 
Current number of negative reduced costs which we still need. 
int * getMutableIndices() const 
A vector containing the minor indices of the elements in the packed matrix. 
int originalWanted_
Initial number of negative reduced costs wanted. 
int getNumCols() const 
Number of columns. 
double dualColumn1Row1(double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta 
const int * getIndices() const 
A vector containing the minor indices of the elements in the packed matrix. 
void makeAllUseful(CoinIndexedVector &spare)
Make all useful. 
int numberColumns_
Number of columns. 
AbcMatrix3()
Default constructor. 
void transposeTimes(const AbcSimplex *model, const CoinPackedMatrix *rowCopy, const CoinIndexedVector &x, CoinIndexedVector &spareArray, CoinIndexedVector &z) const 
Return x * -1 * A in z. 
AbcMatrix2()
Default constructor. 
CoinBigIndex * getMutableVectorStarts() const 
The positions where the major-dimension vectors start in element_ and index_. 
double * getMutableElements() const 
A vector containing the elements in the packed matrix. 
int minimumObjectsScan() const 
Partial pricing tuning parameter - minimum number of "objects" to scan. 
AbcMatrix()
Default constructor. 
void partialPricing(double startFraction, double endFraction, int &bestSequence, int &numberWanted)
Partial pricing. 
void rebalance() const 
rebalance for parallel 
int * getMutableVectorLengths() const 
The lengths of the major-dimension vectors. 
int * getMutableVectorLengths() const 
The lengths of the major-dimension vectors. 
double dualColumn1Row2(double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta 
void takeOutOfUseful(int sequence, CoinIndexedVector &spare)
Take out of useful. 
void dualColumn1Part(int iBlock, int &sequenceIn, double &upperTheta, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta On input first,last give what to scan On output...
int savedBestSequence() const 
Current best sequence. 
AbcSimplex * model_
Model. 
bool isColOrdered() const 
Whether the packed matrix is column major ordered or not. 
AbcMatrix3 & operator=(const AbcMatrix3 &)
The copy constructor. 
int numberRows_
Number of rows. 
int minimumGoodReducedCosts_
Partial pricing tuning parameter - minimum number of negative reduced costs to get. 
AbcMatrix & operator=(const AbcMatrix &)
The copy constructor. 
void timesIncludingSlacks(double scalar, const double *x, double *y) const 
Return A * scalar(+-1) *x in y. 
#define NUMBER_COLUMN_BLOCKS
void setOriginalWanted(int value)
Returns CoinPackedMatrix (non const) 
CoinBigIndex getNumElements() const 
Number of entries in the packed matrix. 
CoinBigIndex * rowEnd() const 
Row ends. 
int originalWanted() const 
Initial number of negative reduced costs wanted. 
void transposeTimesNonBasic(double scalar, const double *x, double *y) const 
Return A * scalar(+-1) *x + y in y. 
void inOutUseful(int sequenceIn, int sequenceOut)
Put in and out for useful. 
int startColumnBlock_[NUMBER_COLUMN_BLOCKS+1]
Start of each column block. 
double * element_
Values by row. 
void fillBasis(const int *whichColumn, int &numberColumnBasic, int *row, int *start, int *rowCount, int *columnCount, CoinSimplexDouble *element)
Fills in column part of basis. 
double dualColumn1RowFew(int iBlock, double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta 
int * getMutableIndices() const 
A vector containing the minor indices of the elements in the packed matrix. 
double dualColumn1(const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const 
gets sorted tableau row and a possible value of theta 
CoinBigIndex startElements_
void sortUseful(CoinIndexedVector &spare)
Sort into useful. 
const double * getElements() const 
A vector containing the elements in the packed matrix. 
void add(CoinIndexedVector &rowArray, int column, double multiplier) const 
Adds multiple of a column (or slack) into an CoinIndexedvector You can use quickAdd to add to vector...
void setSavedBestDj(double value)
Returns CoinPackedMatrix (non const) 
const int * getVectorLengths() const 
The lengths of the major-dimension vectors.