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);
CoinBigIndex getNumElements() const
Number of entries in the packed matrix.
void takeOutOfUseful(int sequence, CoinIndexedVector &spare)
Take out of useful.
int pivotColumnDantzig(const CoinIndexedVector &updates, CoinPartitionedVector &spare) const
Get sequenceIn when Dantzig.
CoinBigIndex getNumElements() const
Number of entries in the packed matrix.
AbcMatrix()
Default constructor.
CoinPackedMatrix * matrix() const
Returns CoinPackedMatrix (non const)
void sortUseful(CoinIndexedVector &spare)
Sort into useful.
void setCurrentWanted(int value)
CoinBigIndex startElements_
void primalColumnSubset(int iBlock, const CoinIndexedVector &update, const CoinPartitionedVector &tableauRow, CoinPartitionedVector &weights) const
gets subset updates
AbcMatrix2()
Default constructor.
void setMinimumGoodReducedCosts(int value)
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
void setStartFraction(double value)
int * startColumnBlock() const
Start of each column block.
double endFraction() const
Current end of search space in matrix (as fraction)
CoinBigIndex * getMutableVectorStarts() const
The positions where the major-dimension vectors start in element_ and index_.
int numberColumnBlocks_
Number of actual column blocks.
void inOutUseful(int sequenceIn, int sequenceOut)
Put in and out for useful.
int getNumRows() const
Number of rows.
const int * getVectorLengths() const
The lengths of the major-dimension vectors.
int blockStart_[NUMBER_ROW_BLOCKS+1]
Start of each block (in stored)
int numberColumnBlocks() const
Number of actual column blocks.
void setSavedBestDj(double value)
double savedBestDj_
Best reduced cost so far.
int * offset_
Column offset for each block (plus one at end)
int currentWanted() const
Current number of negative reduced costs which we still need.
double * element_
Elements.
CoinPackedMatrix * reverseOrderedCopy() const
Returns a new matrix in reverse order without gaps.
void setSavedBestSequence(int value)
void transposeTimesBasic(double scalar, const double *x, double *y) const
Return y + A * scalar(+-1) *x in y.
AbcMatrix2 & operator=(const AbcMatrix2 &)
int numberBlocks_
Number of blocks.
int * column_
Column indices and reverse lookup (within block)
void transposeTimesNonBasic(double scalar, const double *x, double *y) const
Return A * scalar(+-1) *x + y in y.
void setEndFraction(double value)
void setOriginalWanted(int value)
void timesModifyExcludingSlacks(double scalar, const double *x, double *y) const
Return y + A * scalar *x in y.
CoinBigIndex * start_
Starts for odd/long vectors.
double dualColumn1Row1(double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const
gets sorted tableau row and a possible value of theta
CoinBigIndex * rowStart_
Row starts.
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.
int savedBestSequence_
Saved best sequence in pricing.
CoinPackedMatrix * getPackedMatrix() const
Return a complete CoinPackedMatrix.
int numberColumns() const
void subsetTransposeTimes(const CoinIndexedVector &x, CoinIndexedVector &z) const
Return x *A in z but just for indices Already in z.
void timesIncludingSlacks(double scalar, const double *x, double *y) const
Return A * scalar(+-1) *x in y.
void partialPricing(double startFraction, double endFraction, int &bestSequence, int &numberWanted)
Partial pricing.
int minimumObjectsScan() const
Partial pricing tuning parameter - minimum number of "objects" to scan.
CoinBigIndex * getMutableVectorStarts() const
const double * getElements() const
A vector containing the elements in the packed matrix.
int * getMutableVectorLengths() const
The lengths of the major-dimension vectors.
blockStruct * block_
Blocks (ordinary start at 0 and go to first block)
int numberRows_
Number of rows.
int getNumCols() const
Number of columns.
void transposeTimesAll(const double *x, double *y) const
Return y - A * x in y.
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 ...
void transposeTimes(const AbcSimplex *model, const double *pi, CoinIndexedVector &output) const
Return x * -1 * A in z.
double dualColumn1Row2(double upperThetaSlack, int &freeSequence, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow, CoinPartitionedVector &candidateList) const
gets sorted tableau row and a possible value of theta
int minimumGoodReducedCosts_
Partial pricing tuning parameter - minimum number of negative reduced costs to get.
CoinBigIndex * rowEnd() const
Row ends.
int currentWanted_
Current number of negative reduced costs which we still need.
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 ...
#define NUMBER_COLUMN_BLOCKS
AbcMatrix3 & operator=(const AbcMatrix3 &)
void timesModifyIncludingSlacks(double scalar, const double *x, double *y) const
Return y + A * scalar(+-1) *x in y.
const CoinBigIndex * getVectorStarts() const
The positions where the major-dimension vectors start in elements and indices.
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
#define NUMBER_ROW_BLOCKS
void makeAllUseful(CoinIndexedVector &spare)
Make all useful.
CoinBigIndex * rowStart() const
Row starts.
AbcSimplex * model_
Model.
void setMinimumObjectsScan(int value)
double * work_
work arrays
int * getMutableIndices() const
A vector containing the minor indices of the elements in the packed matrix.
int numberRowBlocks_
Number of actual row blocks.
double * getMutableElements() const
A vector containing the elements in the packed matrix.
int minimumGoodReducedCosts() const
Partial pricing tuning parameter - minimum number of negative reduced costs to get.
void createRowCopy()
Creates row copy.
int * getMutableVectorLengths() const
The lengths of the major-dimension vectors.
const double * getElements() const
A vector containing 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
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 getNumRows() const
Number of rows.
const int * blockStart() const
Start of each block (in stored)
int savedBestSequence() const
Current best sequence.
void transposeTimes(const CoinIndexedVector &x, CoinIndexedVector &z) const
Return -x *A in z
int blockStart(int block) const
Start of each block (in stored)
Sparse Matrix Base Class.
int numberRowBlocks() const
Number of actual row blocks.
double startFraction() const
Current start of search space in matrix (as fraction)
void moveLargestToStart()
Move largest in column to beginning (not used as doesn't help factorization)
int numberRows() const
Number of rows.
AbcMatrix & operator=(const AbcMatrix &)
void sortBlocks(const AbcSimplex *model)
Sort blocks.
int numberColumns_
Number of columns.
double * getMutableElements() const
Mutable elements.
const int * getVectorLengths() const
The lengths of the major-dimension vectors.
const CoinBigIndex * getVectorStarts() const
Starts.
bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
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 minimumObjectsScan_
Partial pricing tuning parameter - minimum number of "objects" to scan.
void scale(int numberRowsAlreadyScaled)
Scales and creates row copy.
void setModel(AbcSimplex *model)
Sets model.
double startFraction_
Special row copy.
int getNumCols() const
Number of columns.
int numberBlocks_
Number of blocks.
const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
int * getMutableIndices() const
A vector containing the minor indices of the elements in the packed matrix.
CoinBigIndex * rowStart_
Start of each row (per block) - last lot are useless first all row starts for block 0...
void transposeTimes(const AbcSimplex *model, const CoinPackedMatrix *rowCopy, const CoinIndexedVector &x, CoinIndexedVector &spareArray, CoinIndexedVector &z) const
Return x * -1 * A in z.
bool usefulInfo() const
Returns true if copy has useful information.
double * rowElements() const
Row elements.
double endFraction_
Current end of search space in matrix (as fraction)
void swapOne(const AbcSimplex *model, const AbcMatrix *matrix, int iColumn)
Swap one variable.
double savedBestDj() const
Current best reduced cost.
int chooseBestDj(int iBlock, const CoinIndexedVector &infeasibilities, const double *weights) const
Chooses best weighted dj.
unsigned short * column_
columns within block
void fillBasis(const int *whichColumn, int &numberColumnBasic, int *row, int *start, int *rowCount, int *columnCount, CoinSimplexDouble *element)
Fills in column part of basis.
void unpack(CoinIndexedVector &rowArray, int column) const
Unpacks a column into an CoinIndexedVector.
void rebalance() const
rebalance for parallel
void putIntofUseful(int sequence, CoinIndexedVector &spare)
Put into useful.
CoinBigIndex countBasis(const int *whichColumn, int &numberColumnBasic)
Returns number of elements in column part of basis.
int primalColumnRow(int iBlock, bool doByRow, const CoinIndexedVector &update, CoinPartitionedVector &tableauRow) const
gets tableau row - returns number of slacks in block
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 copy(const AbcMatrix *from)
Copy contents - resizing if necessary - otherwise re-use memory.
double * element_
Values by row.
CoinSimplexInt * rowColumns() const
Row columns.
AbcMatrix3()
Default constructor.
int startColumnBlock_[NUMBER_COLUMN_BLOCKS+1]
Start of each column block.
unsigned short * count_
Counts of elements in each part of row.
int originalWanted() const
Initial number of negative reduced costs wanted.
const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
int originalWanted_
Initial number of negative reduced costs wanted.
CoinPackedMatrix * matrix_
Data.