summaryrefslogtreecommitdiff
path: root/newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp
diff options
context:
space:
mode:
authorHarpreet2016-09-03 00:36:51 +0530
committerHarpreet2016-09-03 00:36:51 +0530
commita0d9443af147e949c1e6a01ac24749d12593ec5b (patch)
tree1a1955c5482ae608fd7f618b06f4ecc6a0d39a23 /newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp
parent4b64cf486f5c999fd8167758cae27839f3b50848 (diff)
downloadFOSSEE-Optim-toolbox-development-a0d9443af147e949c1e6a01ac24749d12593ec5b.tar.gz
FOSSEE-Optim-toolbox-development-a0d9443af147e949c1e6a01ac24749d12593ec5b.tar.bz2
FOSSEE-Optim-toolbox-development-a0d9443af147e949c1e6a01ac24749d12593ec5b.zip
cbcintlinprog added
Diffstat (limited to 'newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp')
-rw-r--r--newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp381
1 files changed, 0 insertions, 381 deletions
diff --git a/newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp b/newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp
deleted file mode 100644
index da4e144..0000000
--- a/newstructure/thirdparty/linux/include/coin/ClpDynamicMatrix.hpp
+++ /dev/null
@@ -1,381 +0,0 @@
-/* $Id: ClpDynamicMatrix.hpp 1755 2011-06-28 18:24:31Z lou $ */
-// Copyright (C) 2004, International Business Machines
-// Corporation and others. All Rights Reserved.
-// This code is licensed under the terms of the Eclipse Public License (EPL).
-
-#ifndef ClpDynamicMatrix_H
-#define ClpDynamicMatrix_H
-
-
-#include "CoinPragma.hpp"
-
-#include "ClpPackedMatrix.hpp"
-class ClpSimplex;
-/** This implements a dynamic matrix when we have a limit on the number of
- "interesting rows". This version inherits from ClpPackedMatrix and knows that
- the real matrix is gub. A later version could use shortest path to generate columns.
-
-*/
-
-class ClpDynamicMatrix : public ClpPackedMatrix {
-
-public:
- /// enums for status of various sorts
- enum DynamicStatus {
- soloKey = 0x00,
- inSmall = 0x01,
- atUpperBound = 0x02,
- atLowerBound = 0x03
- };
- /**@name Main functions provided */
- //@{
- /// Partial pricing
- virtual void partialPricing(ClpSimplex * model, double start, double end,
- int & bestSequence, int & numberWanted);
-
- /**
- update information for a pivot (and effective rhs)
- */
- virtual int updatePivot(ClpSimplex * model, double oldInValue, double oldOutValue);
- /** Returns effective RHS offset if it is being used. This is used for long problems
- or big dynamic or anywhere where going through full columns is
- expensive. This may re-compute */
- virtual double * rhsOffset(ClpSimplex * model, bool forceRefresh = false,
- bool check = false);
-
- using ClpPackedMatrix::times ;
- /** Return <code>y + A * scalar *x</code> in <code>y</code>.
- @pre <code>x</code> must be of size <code>numColumns()</code>
- @pre <code>y</code> must be of size <code>numRows()</code> */
- virtual void times(double scalar,
- const double * x, double * y) const;
- /// Modifies rhs offset
- void modifyOffset(int sequence, double amount);
- /// Gets key value when none in small
- double keyValue(int iSet) const;
- /**
- mode=0 - Set up before "updateTranspose" and "transposeTimes" for duals using extended
- updates array (and may use other if dual values pass)
- mode=1 - Update dual solution after "transposeTimes" using extended rows.
- mode=2 - Compute all djs and compute key dual infeasibilities
- mode=3 - Report on key dual infeasibilities
- mode=4 - Modify before updateTranspose in partial pricing
- */
- virtual void dualExpanded(ClpSimplex * model, CoinIndexedVector * array,
- double * other, int mode);
- /**
- mode=0 - Create list of non-key basics in pivotVariable_ using
- number as numberBasic in and out
- mode=1 - Set all key variables as basic
- mode=2 - return number extra rows needed, number gives maximum number basic
- mode=3 - before replaceColumn
- mode=4 - return 1 if can do primal, 2 if dual, 3 if both
- mode=5 - save any status stuff (when in good state)
- mode=6 - restore status stuff
- mode=7 - flag given variable (normally sequenceIn)
- mode=8 - unflag all variables
- mode=9 - synchronize costs
- mode=10 - return 1 if there may be changing bounds on variable (column generation)
- mode=11 - make sure set is clean (used when a variable rejected - but not flagged)
- mode=12 - after factorize but before permute stuff
- mode=13 - at end of simplex to delete stuff
- */
- virtual int generalExpanded(ClpSimplex * model, int mode, int & number);
- /** Purely for column generation and similar ideas. Allows
- matrix and any bounds or costs to be updated (sensibly).
- Returns non-zero if any changes.
- */
- virtual int refresh(ClpSimplex * model);
- /** Creates a variable. This is called after partial pricing and will modify matrix.
- Will update bestSequence.
- */
- virtual void createVariable(ClpSimplex * model, int & bestSequence);
- /// Returns reduced cost of a variable
- virtual double reducedCost( ClpSimplex * model, int sequence) const;
- /// Does gub crash
- void gubCrash();
- /// Writes out model (without names)
- void writeMps(const char * name);
- /// Populates initial matrix from dynamic status
- void initialProblem();
- /** Adds in a column to gub structure (called from descendant) and returns sequence */
- int addColumn(int numberEntries, const int * row, const double * element,
- double cost, double lower, double upper, int iSet,
- DynamicStatus status);
- /** If addColumn forces compression then this allows descendant to know what to do.
- If >=0 then entry stayed in, if -1 then entry went out to lower bound.of zero.
- Entries at upper bound (really nonzero) never go out (at present).
- */
- virtual void packDown(const int * , int ) {}
- /// Gets lower bound (to simplify coding)
- inline double columnLower(int sequence) const {
- if (columnLower_) return columnLower_[sequence];
- else return 0.0;
- }
- /// Gets upper bound (to simplify coding)
- inline double columnUpper(int sequence) const {
- if (columnUpper_) return columnUpper_[sequence];
- else return COIN_DBL_MAX;
- }
-
- //@}
-
-
-
- /**@name Constructors, destructor */
- //@{
- /** Default constructor. */
- ClpDynamicMatrix();
- /** This is the real constructor.
- It assumes factorization frequency will not be changed.
- This resizes model !!!!
- The contents of original matrix in model will be taken over and original matrix
- will be sanitized so can be deleted (to avoid a very small memory leak)
- */
- ClpDynamicMatrix(ClpSimplex * model, int numberSets,
- int numberColumns, const int * starts,
- const double * lower, const double * upper,
- const CoinBigIndex * startColumn, const int * row,
- const double * element, const double * cost,
- const double * columnLower = NULL, const double * columnUpper = NULL,
- const unsigned char * status = NULL,
- const unsigned char * dynamicStatus = NULL);
-
- /** Destructor */
- virtual ~ClpDynamicMatrix();
- //@}
-
- /**@name Copy method */
- //@{
- /** The copy constructor. */
- ClpDynamicMatrix(const ClpDynamicMatrix&);
- /** The copy constructor from an CoinPackedMatrix. */
- ClpDynamicMatrix(const CoinPackedMatrix&);
-
- ClpDynamicMatrix& operator=(const ClpDynamicMatrix&);
- /// Clone
- virtual ClpMatrixBase * clone() const ;
- //@}
- /**@name gets and sets */
- //@{
- /// Status of row slacks
- inline ClpSimplex::Status getStatus(int sequence) const {
- return static_cast<ClpSimplex::Status> (status_[sequence] & 7);
- }
- inline void setStatus(int sequence, ClpSimplex::Status status) {
- unsigned char & st_byte = status_[sequence];
- st_byte = static_cast<unsigned char>(st_byte & ~7);
- st_byte = static_cast<unsigned char>(st_byte | status);
- }
- /// Whether flagged slack
- inline bool flaggedSlack(int i) const {
- return (status_[i] & 8) != 0;
- }
- inline void setFlaggedSlack(int i) {
- status_[i] = static_cast<unsigned char>(status_[i] | 8);
- }
- inline void unsetFlaggedSlack(int i) {
- status_[i] = static_cast<unsigned char>(status_[i] & ~8);
- }
- /// Number of sets (dynamic rows)
- inline int numberSets() const {
- return numberSets_;
- }
- /// Number of possible gub variables
- inline int numberGubEntries() const
- { return startSet_[numberSets_];}
- /// Sets
- inline int * startSets() const
- { return startSet_;}
- /// Whether flagged
- inline bool flagged(int i) const {
- return (dynamicStatus_[i] & 8) != 0;
- }
- inline void setFlagged(int i) {
- dynamicStatus_[i] = static_cast<unsigned char>(dynamicStatus_[i] | 8);
- }
- inline void unsetFlagged(int i) {
- dynamicStatus_[i] = static_cast<unsigned char>(dynamicStatus_[i] & ~8);
- }
- inline void setDynamicStatus(int sequence, DynamicStatus status) {
- unsigned char & st_byte = dynamicStatus_[sequence];
- st_byte = static_cast<unsigned char>(st_byte & ~7);
- st_byte = static_cast<unsigned char>(st_byte | status);
- }
- inline DynamicStatus getDynamicStatus(int sequence) const {
- return static_cast<DynamicStatus> (dynamicStatus_[sequence] & 7);
- }
- /// Saved value of objective offset
- inline double objectiveOffset() const {
- return objectiveOffset_;
- }
- /// Starts of each column
- inline CoinBigIndex * startColumn() const {
- return startColumn_;
- }
- /// rows
- inline int * row() const {
- return row_;
- }
- /// elements
- inline double * element() const {
- return element_;
- }
- /// costs
- inline double * cost() const {
- return cost_;
- }
- /// ids of active columns (just index here)
- inline int * id() const {
- return id_;
- }
- /// Optional lower bounds on columns
- inline double * columnLower() const {
- return columnLower_;
- }
- /// Optional upper bounds on columns
- inline double * columnUpper() const {
- return columnUpper_;
- }
- /// Lower bounds on sets
- inline double * lowerSet() const {
- return lowerSet_;
- }
- /// Upper bounds on sets
- inline double * upperSet() const {
- return upperSet_;
- }
- /// size
- inline int numberGubColumns() const {
- return numberGubColumns_;
- }
- /// first free
- inline int firstAvailable() const {
- return firstAvailable_;
- }
- /// first dynamic
- inline int firstDynamic() const {
- return firstDynamic_;
- }
- /// number of columns in dynamic model
- inline int lastDynamic() const {
- return lastDynamic_;
- }
- /// number of rows in original model
- inline int numberStaticRows() const {
- return numberStaticRows_;
- }
- /// size of working matrix (max)
- inline int numberElements() const {
- return numberElements_;
- }
- inline int * keyVariable() const {
- return keyVariable_;
- }
- /// Switches off dj checking each factorization (for BIG models)
- void switchOffCheck();
- /// Status region for gub slacks
- inline unsigned char * gubRowStatus() const {
- return status_;
- }
- /// Status region for gub variables
- inline unsigned char * dynamicStatus() const {
- return dynamicStatus_;
- }
- /// Returns which set a variable is in
- int whichSet (int sequence) const;
- //@}
-
-
-protected:
- /**@name Data members
- The data members are protected to allow access for derived classes. */
- //@{
- /// Sum of dual infeasibilities
- double sumDualInfeasibilities_;
- /// Sum of primal infeasibilities
- double sumPrimalInfeasibilities_;
- /// Sum of Dual infeasibilities using tolerance based on error in duals
- double sumOfRelaxedDualInfeasibilities_;
- /// Sum of Primal infeasibilities using tolerance based on error in primals
- double sumOfRelaxedPrimalInfeasibilities_;
- /// Saved best dual on gub row in pricing
- double savedBestGubDual_;
- /// Saved best set in pricing
- int savedBestSet_;
- /// Backward pointer to pivot row !!!
- int * backToPivotRow_;
- /// Key variable of set (only accurate if none in small problem)
- mutable int * keyVariable_;
- /// Backward pointer to extra row
- int * toIndex_;
- // Reverse pointer from index to set
- int * fromIndex_;
- /// Number of sets (dynamic rows)
- int numberSets_;
- /// Number of active sets
- int numberActiveSets_;
- /// Saved value of objective offset
- double objectiveOffset_;
- /// Lower bounds on sets
- double * lowerSet_;
- /// Upper bounds on sets
- double * upperSet_;
- /// Status of slack on set
- unsigned char * status_;
- /// Pointer back to model
- ClpSimplex * model_;
- /// first free
- int firstAvailable_;
- /// first free when iteration started
- int firstAvailableBefore_;
- /// first dynamic
- int firstDynamic_;
- /// number of columns in dynamic model
- int lastDynamic_;
- /// number of rows in original model
- int numberStaticRows_;
- /// size of working matrix (max)
- int numberElements_;
- /// Number of dual infeasibilities
- int numberDualInfeasibilities_;
- /// Number of primal infeasibilities
- int numberPrimalInfeasibilities_;
- /** If pricing will declare victory (i.e. no check every factorization).
- -1 - always check
- 0 - don't check
- 1 - in don't check mode but looks optimal
- */
- int noCheck_;
- /// Infeasibility weight when last full pass done
- double infeasibilityWeight_;
- /// size
- int numberGubColumns_;
- /// current maximum number of columns (then compress)
- int maximumGubColumns_;
- /// current maximum number of elemnts (then compress)
- int maximumElements_;
- /// Start of each set
- int * startSet_;
- /// next in chain
- int * next_;
- /// Starts of each column
- CoinBigIndex * startColumn_;
- /// rows
- int * row_;
- /// elements
- double * element_;
- /// costs
- double * cost_;
- /// ids of active columns (just index here)
- int * id_;
- /// for status and which bound
- unsigned char * dynamicStatus_;
- /// Optional lower bounds on columns
- double * columnLower_;
- /// Optional upper bounds on columns
- double * columnUpper_;
- //@}
-};
-
-#endif