ClpSimplexDual.hpp
Go to the documentation of this file.
1 /* $Id: ClpSimplexDual.hpp 1525 2010-02-26 17:27:59Z mjs $ */
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 
5 /*
6  Authors
7 
8  John Forrest
9 
10  */
11 #ifndef ClpSimplexDual_H
12 #define ClpSimplexDual_H
13 
14 #include "ClpSimplex.hpp"
15 
23 class ClpSimplexDual : public ClpSimplex {
24 
25 public:
26 
118  int dual(int ifValuesPass, int startFinishOptions = 0);
127  int strongBranching(int numberVariables, const int * variables,
128  double * newLower, double * newUpper,
129  double ** outputSolution,
130  int * outputStatus, int * outputIterations,
131  bool stopOnFirstInfeasible = true,
132  bool alwaysFinish = false,
133  int startFinishOptions = 0);
136  int numberColumns, bool solveLp = false);
140 
156  int whileIterating(double * & givenPi, int ifValuesPass);
164  int updateDualsInDual(CoinIndexedVector * rowArray,
165  CoinIndexedVector * columnArray,
166  CoinIndexedVector * outputArray,
167  double theta,
168  double & objectiveChange,
169  bool fullRecompute);
173  void updateDualsInValuesPass(CoinIndexedVector * rowArray,
174  CoinIndexedVector * columnArray,
175  double theta);
179  void flipBounds(CoinIndexedVector * rowArray,
180  CoinIndexedVector * columnArray);
192  double dualColumn(CoinIndexedVector * rowArray,
193  CoinIndexedVector * columnArray,
194  CoinIndexedVector * spareArray,
195  CoinIndexedVector * spareArray2,
196  double accpetablePivot,
197  CoinBigIndex * dubiousWeights);
199  int dualColumn0(const CoinIndexedVector * rowArray,
200  const CoinIndexedVector * columnArray,
201  CoinIndexedVector * spareArray,
202  double acceptablePivot,
203  double & upperReturn, double &bestReturn, double & badFree);
210  void checkPossibleValuesMove(CoinIndexedVector * rowArray,
211  CoinIndexedVector * columnArray,
212  double acceptablePivot);
219  void checkPossibleCleanup(CoinIndexedVector * rowArray,
220  CoinIndexedVector * columnArray,
221  double acceptablePivot);
226  void doEasyOnesInValuesPass(double * givenReducedCosts);
236  void dualRow(int alreadyChosen);
246  int changeBounds(int initialize, CoinIndexedVector * outputArray,
247  double & changeCost);
250  bool changeBound( int iSequence);
252  void originalBound(int iSequence);
255  int checkUnbounded(CoinIndexedVector * ray, CoinIndexedVector * spare,
256  double changeCost);
266  void statusOfProblemInDual(int & lastCleaned, int type,
267  double * givenDjs, ClpDataSave & saveData,
268  int ifValuesPass);
271  int perturb();
277  int fastDual(bool alwaysFinish = false);
280  int numberAtFakeBound();
281 
287  int pivotResult();
289  int nextSuperBasic();
292  int startupSolve(int ifValuesPass, double * saveDuals, int startFinishOptions);
293  void finishSolve(int startFinishOptions);
294  void gutsOfDual(int ifValuesPass, double * & saveDuals, int initialStatus,
295  ClpDataSave & saveData);
296  //int dual2(int ifValuesPass,int startFinishOptions=0);
297  void resetFakeBounds(int type);
298 
300 };
301 #endif