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