11 #ifndef AbcSimplexDual_H
12 #define AbcSimplexDual_H
17 #define ABC_PARALLEL 2
21 #include <cilk/cilk.h>
154 double * newLower,
double * newUpper,
155 double ** outputSolution,
156 int * outputStatus,
int * outputIterations,
157 bool stopOnFirstInfeasible =
true,
158 bool alwaysFinish =
false,
159 int startFinishOptions = 0);
184 int whileIteratingThread();
187 int whileIteratingCilk();
201 void createDualPricingVectorThread();
203 int getTableauColumnFlipAndStartReplaceThread();
204 void getTableauColumnPart1Thread();
207 void createDualPricingVectorCilk();
209 int getTableauColumnFlipAndStartReplaceCilk();
210 void getTableauColumnPart1Cilk();
315 void perturbB(
double factor,
int type);
318 int fastDual(
bool alwaysFinish =
false);
341 void * abc_parallelManager(
void * simplex);
void dualColumn2()
Chooses incoming Puts flipped ones in list If necessary will modify costs.
void perturb(double factor)
Perturbs problem.
int resetFakeBounds(int type)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
double dualColumn1B()
Do all given tableau row.
int numberIterations() const
Number of iterations.
void computeObjective()
Computes nonbasic cost and total cost.
void startupSolve()
Startup part of dual.
double increaseInObjective
int bounceTolerances(int type)
Does something about fake tolerances.
int pivotResultPart1()
Pivot in a variable and choose an outgoing one.
int whileIterating3()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int noPivotColumn()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void dualPivotColumn()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void perturbB(double factor, int type)
Perturbs problem B.
void whileIterating2()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void finishSolve()
Ending part of dual.
void originalBound(int iSequence)
Restores bound to original bound.
void flipBack(int number)
Undo a flip.
void updateDualsInDual()
The duals are updated.
int changeBounds(int initialize, double &changeCost)
Checks if any fake bounds active - if so returns number and modifies updatedDualBound_ and everything...
int numberRows() const
Number of rows.
void getTableauColumnPart1Serial()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int checkUnbounded(CoinIndexedVector &ray, double changeCost)
Checks if tentative optimal actually means unbounded in dual Returns -3 if not, 2 if is unbounded...
void dualPivotRow()
Chooses dual pivot row Would be faster with separate region to scan and will have this (with square o...
int whileIteratingSerial()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int noPivotRow()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void checkReplacePart1b()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int numberAtFakeBound()
Checks number of variables at fake bounds.
int fastDual(bool alwaysFinish=false)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int whatNext()
Fast iterations.
void updatePrimalSolution()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
This solves LPs using the dual simplex method.
void checkReplacePart1()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int numberColumns() const
Number of rows.
bool changeBound(int iSequence)
As changeBounds but just changes new bounds for a single variable.
void replaceColumnPart3()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int nextSuperBasic()
Get next free , -1 if none.
int checkReplace()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
AbcSimplexFactorization * setupForStrongBranching(char *arrays, int numberRows, int numberColumns, bool solveLp=false)
This does first part of StrongBranching.
int getTableauColumnFlipAndStartReplaceSerial()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int makeNonFreeVariablesDualFeasible(bool changeCosts=false)
Make non free variables dual feasible by moving to a bound.
bool checkCutoff(bool computeObjective)
see if cutoff reached
void dualColumn2Most(dualColumnResult &result)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int strongBranching(int numberVariables, const int *variables, double *newLower, double *newUpper, double **outputSolution, int *outputStatus, int *outputIterations, bool stopOnFirstInfeasible=true, bool alwaysFinish=false, int startFinishOptions=0)
For strong branching.
void gutsOfDual()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
double dualColumn1A()
Array has tableau row (row section) Just does slack part Returns guess at upper theta (infinite if no...
This just implements AbcFactorization when an AbcMatrix object is passed.
int whileIteratingParallel(int numberIterations)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void dualColumn1(bool doAll=false)
Array has tableau row (row section) Puts candidates for rows in list Returns guess at upper theta (in...
void getTableauColumnPart2()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
void checkReplacePart1a()
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
AbcSimplexFactorization * factorization() const
factorization
int flipBounds()
The duals are updated by the given arrays.
void createDualPricingVectorSerial()
Create dual pricing vector.
void checkPossibleCleanup(CoinIndexedVector *array)
This sees what is best thing to do in branch and bound cleanup If sequenceIn_ < 0 then can't do anythi...
void cleanupAfterStrongBranching(AbcSimplexFactorization *factorization)
This cleans up after strong branching.
void dualColumn2First(dualColumnResult &result)
This has the flow between re-factorizations Broken out for clarity and will be used by strong branchi...
int dual()
Dual algorithm.
void statusOfProblemInDual(int type)
Refactorizes if necessary Checks if finished.
double * ray() const
For advanced users - no need to delete - sign not changed.