This solves LPs using the predictor-corrector method due to Mehrotra. More...
#include <ClpPredictorCorrector.hpp>
Public Member Functions | |
Description of algorithm | |
int | solve () |
Primal Dual Predictor Corrector algorithm. | |
Functions used in algorithm | |
double | findStepLength (int phase) |
findStepLength. | |
double | findDirectionVector (const int phase) |
findDirectionVector. | |
int | createSolution () |
createSolution. Creates solution from scratch (- code if no memory) | |
double | complementarityGap (int &numberComplementarityPairs, int &numberComplementarityItems, const int phase) |
complementarityGap. Computes gap | |
void | setupForSolve (const int phase) |
setupForSolve. | |
void | solveSystem (double *region1, double *region2, const double *region1In, const double *region2In, const double *saveRegion1, const double *saveRegion2, bool gentleRefine) |
Does solve. | |
bool | checkGoodMove (const bool doCorrector, double &bestNextGap, bool allowIncreasingGap) |
sees if looks plausible change in complementarity | |
bool | checkGoodMove2 (double move, double &bestNextGap, bool allowIncreasingGap) |
: checks for one step size | |
int | updateSolution (double nextGap) |
updateSolution. Updates solution at end of iteration | |
double | affineProduct () |
Save info on products of affine deltaT*deltaW and deltaS*deltaZ. | |
void | debugMove (int phase, double primalStep, double dualStep) |
See exactly what would happen given current deltas. |
This solves LPs using the predictor-corrector method due to Mehrotra.
It also uses multiple centrality corrections as in Gondzio.
See; S. Mehrotra, "On the implementation of a primal-dual interior point method", SIAM Journal on optimization, 2 (1992) J. Gondzio, "Multiple centraility corrections in a primal-dual method for linear programming", Computational Optimization and Applications,6 (1996)
It is rather basic as Interior point is not my speciality
It inherits from ClpInterior. It has no data of its own and is never created - only cast from a ClpInterior object at algorithm time.
It can also solve QPs
Definition at line 36 of file ClpPredictorCorrector.hpp.
int ClpPredictorCorrector::solve | ( | ) |
Primal Dual Predictor Corrector algorithm.
Method
Big TODO
double ClpPredictorCorrector::findStepLength | ( | int | phase | ) |
findStepLength.
double ClpPredictorCorrector::findDirectionVector | ( | const int | phase | ) |
findDirectionVector.
int ClpPredictorCorrector::createSolution | ( | ) |
createSolution. Creates solution from scratch (- code if no memory)
double ClpPredictorCorrector::complementarityGap | ( | int & | numberComplementarityPairs, | |
int & | numberComplementarityItems, | |||
const int | phase | |||
) |
complementarityGap. Computes gap
void ClpPredictorCorrector::setupForSolve | ( | const int | phase | ) |
setupForSolve.
void ClpPredictorCorrector::solveSystem | ( | double * | region1, | |
double * | region2, | |||
const double * | region1In, | |||
const double * | region2In, | |||
const double * | saveRegion1, | |||
const double * | saveRegion2, | |||
bool | gentleRefine | |||
) |
Does solve.
region1 is for deltaX (columns+rows), region2 for deltaPi (rows)
bool ClpPredictorCorrector::checkGoodMove | ( | const bool | doCorrector, | |
double & | bestNextGap, | |||
bool | allowIncreasingGap | |||
) |
sees if looks plausible change in complementarity
bool ClpPredictorCorrector::checkGoodMove2 | ( | double | move, | |
double & | bestNextGap, | |||
bool | allowIncreasingGap | |||
) |
: checks for one step size
int ClpPredictorCorrector::updateSolution | ( | double | nextGap | ) |
updateSolution. Updates solution at end of iteration
double ClpPredictorCorrector::affineProduct | ( | ) |
Save info on products of affine deltaT*deltaW and deltaS*deltaZ.
void ClpPredictorCorrector::debugMove | ( | int | phase, | |
double | primalStep, | |||
double | dualStep | |||
) |
See exactly what would happen given current deltas.