ClpSimplexOther.hpp
Go to the documentation of this file.
1 /* $Id: ClpSimplexOther.hpp 1525 2010-02-26 17:27:59Z mjs $ */
2 // Copyright (C) 2004, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 
5 /*
6  Authors
7 
8  John Forrest
9 
10  */
11 #ifndef ClpSimplexOther_H
12 #define ClpSimplexOther_H
13 
14 #include "ClpSimplex.hpp"
15 
23 class ClpSimplexOther : public ClpSimplex {
24 
25 public:
26 
49  void dualRanging(int numberCheck, const int * which,
50  double * costIncrease, int * sequenceIncrease,
51  double * costDecrease, int * sequenceDecrease,
52  double * valueIncrease = NULL, double * valueDecrease = NULL);
67  void primalRanging(int numberCheck, const int * which,
68  double * valueIncrease, int * sequenceIncrease,
69  double * valueDecrease, int * sequenceDecrease);
83  int parametrics(double startingTheta, double & endingTheta, double reportIncrement,
84  const double * changeLowerBound, const double * changeUpperBound,
85  const double * changeLowerRhs, const double * changeUpperRhs,
86  const double * changeObjective);
87 private:
96  int parametricsLoop(double startingTheta, double & endingTheta, double reportIncrement,
97  const double * changeLower, const double * changeUpper,
98  const double * changeObjective, ClpDataSave & data,
99  bool canTryQuick);
118  int whileIterating(double startingTheta, double & endingTheta, double reportIncrement,
119  const double * changeLower, const double * changeUpper,
120  const double * changeObjective);
125  int nextTheta(int type, double maxTheta, double * primalChange, double * dualChange,
126  const double * changeLower, const double * changeUpper,
127  const double * changeObjective);
133  void checkDualRatios(CoinIndexedVector * rowArray,
134  CoinIndexedVector * columnArray,
135  double & costIncrease, int & sequenceIncrease, double & alphaIncrease,
136  double & costDecrease, int & sequenceDecrease, double & alphaDecrease);
141  void checkPrimalRatios(CoinIndexedVector * rowArray,
142  int direction);
144  double primalRanging1(int whichIn, int whichOther);
145 
146 public:
161  int writeBasis(const char *filename,
162  bool writeValues = false,
163  int formatType = 0) const;
165  int readBasis(const char *filename);
171  ClpSimplex * dualOfModel(double fractionRowRanges = 1.0, double fractionColumnRanges = 1.0) const;
175  int restoreFromDual(const ClpSimplex * dualProblem);
179  ClpSimplex * crunch(double * rhs, int * whichRows, int * whichColumns,
180  int & nBound, bool moreBounds = false, bool tightenBounds = false);
184  void afterCrunch(const ClpSimplex & small,
185  const int * whichRows, const int * whichColumns,
186  int nBound);
188  void cleanupAfterPostsolve();
191  int tightenIntegerBounds(double * rhsSpace);
202  int expandKnapsack(int knapsackRow, int & numberOutput,
203  double * buildObj, CoinBigIndex * buildStart,
204  int * buildRow, double * buildElement, int reConstruct = -1) const;
206 };
207 #endif