Cbc  2.9.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AbcSimplexPrimal.hpp
Go to the documentation of this file.
1 /* $Id: AbcSimplexPrimal.hpp 1910 2013-01-27 02:00:13Z stefan $ */
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others, Copyright (C) 2012, FasterCoin. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 /*
6  Authors
7 
8  John Forrest
9 
10  */
11 #ifndef AbcSimplexPrimal_H
12 #define AbcSimplexPrimal_H
13 
14 #include "AbcSimplex.hpp"
15 
23 class AbcSimplexPrimal : public AbcSimplex {
24 
25 public:
26 
115  int primal(int ifValuesPass = 0, int startFinishOptions = 0);
117 
120  void alwaysOptimal(bool onOff);
122  bool alwaysOptimal() const;
127  void exactOutgoing(bool onOff);
128  bool exactOutgoing() const;
130 
145  int whileIterating(int valuesOption);
146 
165  int pivotResult(int ifValuesPass = 0);
166  int pivotResult4(int ifValuesPass = 0);
167 
168 
174  double theta,
175  double & objectiveChange,
176  int valuesPass);
181  double theta,bool valuesPass);
184  void createUpdateDuals(CoinIndexedVector & rowArray,
185  const double * originalCost,
186  const double extraCost[4],
187  double & objectiveChange,
188  int valuesPass);
191  double updateMinorCandidate(const CoinIndexedVector & updateBy,
192  CoinIndexedVector & candidate,
193  int sequenceIn);
195  void updatePartialUpdate(CoinIndexedVector & partialUpdate);
197  int doFTUpdate(CoinIndexedVector * vector[4]);
206  void primalRow(CoinIndexedVector * rowArray,
207  CoinIndexedVector * rhsArray,
208  CoinIndexedVector * spareArray,
209  int valuesPass);
210  typedef struct {
211  double theta_;
212  double alpha_;
213  double saveDualIn_;
214  double dualIn_;
215  double lowerIn_;
216  double upperIn_;
217  double valueIn_;
220  double dualOut_;
221  double lowerOut_;
222  double upperOut_;
223  double valueOut_;
228  } pivotStruct;
229  void primalRow(CoinIndexedVector * rowArray,
230  CoinIndexedVector * rhsArray,
231  CoinIndexedVector * spareArray,
232  pivotStruct & stuff);
240  void primalColumn(CoinPartitionedVector * updateArray,
241  CoinPartitionedVector * spareRow2,
242  CoinPartitionedVector * spareColumn1);
243 
247  double changeCost);
257  void statusOfProblemInPrimal(int type);
259  void perturb(int type);
261  bool unPerturb();
263  int unflag();
269  int nextSuperBasic(int superBasicType, CoinIndexedVector * columnArray);
270 
272  void primalRay(CoinIndexedVector * rowArray);
274  void clearAll();
275 
277  int lexSolve();
278 
280 };
281 #endif
282 
double * ray() const
For advanced users - no need to delete - sign not changed.
Definition: ClpModel.hpp:772
int checkUnbounded(CoinIndexedVector *ray, CoinIndexedVector *spare, double changeCost)
Checks if tentative optimal actually means unbounded in primal Returns -3 if not, 2 if is unbounded...
bool unPerturb()
Take off effect of perturbation and say whether to try dual.
double theta() const
Theta (pivot change)
int lexSolve()
Sort of lexicographic resolve.
bool alwaysOptimal() const
void primalColumn(CoinPartitionedVector *updateArray, CoinPartitionedVector *spareRow2, CoinPartitionedVector *spareColumn1)
Chooses primal pivot column updateArray has cost updates (also use pivotRow_ from last iteration) Wou...
int unflag()
Unflag all variables and return number unflagged.
double updateMinorCandidate(const CoinIndexedVector &updateBy, CoinIndexedVector &candidate, int sequenceIn)
Update minor candidate vector - new reduced cost returned later try and get change in reduced cost (t...
void createUpdateDuals(CoinIndexedVector &rowArray, const double *originalCost, const double extraCost[4], double &objectiveChange, int valuesPass)
After rowArray will have cost changes for use next iteration.
void primalRow(CoinIndexedVector *rowArray, CoinIndexedVector *rhsArray, CoinIndexedVector *spareArray, int valuesPass)
Row array has pivot column This chooses pivot row.
void statusOfProblemInPrimal(int type)
Refactorizes if necessary Checks if finished.
int sequenceIn() const
Return sequence In or Out.
Definition: AbcSimplex.hpp:596
void primalRay(CoinIndexedVector *rowArray)
Create primal ray.
void updatePartialUpdate(CoinIndexedVector &partialUpdate)
Update partial Ftran by R update.
bool exactOutgoing() const
void perturb(int type)
Perturbs problem (method depends on perturbation())
Indexed Vector.
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:731
int primal(int ifValuesPass=0, int startFinishOptions=0)
Primal algorithm.
int nextSuperBasic(int superBasicType, CoinIndexedVector *columnArray)
Get next superbasic -1 if none, Normal type is 1 If type is 3 then initializes sorted list if 2 uses ...
int doFTUpdate(CoinIndexedVector *vector[4])
Do FT update as separate function for minor iterations (nonzero return code on problems) ...
int updatePrimalsInPrimal(CoinIndexedVector *rowArray, double theta, double &objectiveChange, int valuesPass)
The primals are updated by the given array.
void clearAll()
Clears all bits and clears rowArray[1] etc.
int whileIterating(int valuesOption)
This has the flow between re-factorizations.
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:727
int pivotResult(int ifValuesPass=0)
Do last half of an iteration.
int pivotResult4(int ifValuesPass=0)
This solves LPs using the primal simplex method.