Clp 1.16.9
Loading...
Searching...
No Matches
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
24
25public:
26
115 int primal(int ifValuesPass = 0, int startFinishOptions = 0);
117
121 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
173 int updatePrimalsInPrimal(CoinIndexedVector * rowArray,
174 double theta,
175 double & objectiveChange,
176 int valuesPass);
180 void updatePrimalsInPrimal(CoinIndexedVector & rowArray,
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_;
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
246 int checkUnbounded(CoinIndexedVector * ray, CoinIndexedVector * spare,
247 double changeCost);
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
This solves LPs using the primal simplex method.
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.
bool exactOutgoing() const
void updatePrimalsInPrimal(CoinIndexedVector &rowArray, double theta, bool valuesPass)
The primals are updated by the given array.
int doFTUpdate(CoinIndexedVector *vector[4])
Do FT update as separate function for minor iterations (nonzero return code on problems)
int pivotResult4(int ifValuesPass=0)
void statusOfProblemInPrimal(int type)
Refactorizes if necessary Checks if finished.
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 checkUnbounded(CoinIndexedVector *ray, CoinIndexedVector *spare, double changeCost)
Checks if tentative optimal actually means unbounded in primal Returns -3 if not, 2 if is unbounded.
void primalRow(CoinIndexedVector *rowArray, CoinIndexedVector *rhsArray, CoinIndexedVector *spareArray, int valuesPass)
Row array has pivot column This chooses pivot row.
void primalRow(CoinIndexedVector *rowArray, CoinIndexedVector *rhsArray, CoinIndexedVector *spareArray, pivotStruct &stuff)
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 exactOutgoing(bool onOff)
Normally outgoing variables can go out to slightly negative values (but within tolerance) - this is t...
int primal(int ifValuesPass=0, int startFinishOptions=0)
Primal algorithm.
void alwaysOptimal(bool onOff)
Do not change infeasibility cost and always say optimal.
void perturb(int type)
Perturbs problem (method depends on perturbation())
void clearAll()
Clears all bits and clears rowArray[1] etc.
void updatePartialUpdate(CoinIndexedVector &partialUpdate)
Update partial Ftran by R update.
void primalRay(CoinIndexedVector *rowArray)
Create primal ray.
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 updatePrimalsInPrimal(CoinIndexedVector *rowArray, double theta, double &objectiveChange, int valuesPass)
The primals are updated by the given array.
int pivotResult(int ifValuesPass=0)
Do last half of an iteration.
int unflag()
Unflag all variables and return number unflagged.
int whileIterating(int valuesOption)
This has the flow between re-factorizations.
bool unPerturb()
Take off effect of perturbation and say whether to try dual.
int lexSolve()
Sort of lexicographic resolve.
int sequenceIn() const
Return sequence In or Out.
Definition: AbcSimplex.hpp:596
double * ray() const
For advanced users - no need to delete - sign not changed.
Definition: ClpModel.hpp:772
double theta() const
Theta (pivot change)
CoinIndexedVector * rowArray(int index) const
Useful row length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:727
CoinIndexedVector * columnArray(int index) const
Useful column length arrays (0,1,2,3,4,5)
Definition: ClpSimplex.hpp:731