Clp 1.17.5
Loading...
Searching...
No Matches
ClpPredictorCorrector.hpp
Go to the documentation of this file.
1/* $Id: ClpPredictorCorrector.hpp 2385 2019-01-06 19:43:06Z unxusr $ */
2// Copyright (C) 2003, International Business Machines
3// Corporation and others. 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 ClpPredictorCorrector_H
12#define ClpPredictorCorrector_H
13
14#include "ClpInterior.hpp"
15
38
39public:
49 int solve();
51
55 //phase - 0 predictor
56 // 1 corrector
57 // 2 primal dual
58 CoinWorkDouble findStepLength(int phase);
60 CoinWorkDouble findDirectionVector(const int phase);
64 //phase 0=as is , 1 = after predictor , 2 after corrector
65 CoinWorkDouble complementarityGap(int &numberComplementarityPairs, int &numberComplementarityItems,
66 const int phase);
68 //phase 0=affine , 1 = corrector , 2 = primal-dual
69 void setupForSolve(const int phase);
71 void solveSystem(CoinWorkDouble *region1, CoinWorkDouble *region2,
72 const CoinWorkDouble *region1In, const CoinWorkDouble *region2In,
73 const CoinWorkDouble *saveRegion1, const CoinWorkDouble *saveRegion2,
74 bool gentleRefine);
76 bool checkGoodMove(const bool doCorrector, CoinWorkDouble &bestNextGap,
77 bool allowIncreasingGap);
79 bool checkGoodMove2(CoinWorkDouble move, CoinWorkDouble &bestNextGap,
80 bool allowIncreasingGap);
82 //returns number fixed
83 int updateSolution(CoinWorkDouble nextGap);
85 CoinWorkDouble affineProduct();
87 void debugMove(int phase, CoinWorkDouble primalStep, CoinWorkDouble dualStep);
89};
90#endif
91
92/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
93*/
This solves LPs using interior point methods.
This solves LPs using the predictor-corrector method due to Mehrotra.
bool checkGoodMove2(CoinWorkDouble move, CoinWorkDouble &bestNextGap, bool allowIncreasingGap)
: checks for one step size
void solveSystem(CoinWorkDouble *region1, CoinWorkDouble *region2, const CoinWorkDouble *region1In, const CoinWorkDouble *region2In, const CoinWorkDouble *saveRegion1, const CoinWorkDouble *saveRegion2, bool gentleRefine)
Does solve.
int updateSolution(CoinWorkDouble nextGap)
updateSolution. Updates solution at end of iteration
CoinWorkDouble findStepLength(int phase)
findStepLength.
CoinWorkDouble findDirectionVector(const int phase)
findDirectionVector.
void setupForSolve(const int phase)
setupForSolve.
int solve()
Primal Dual Predictor Corrector algorithm.
CoinWorkDouble affineProduct()
Save info on products of affine deltaT*deltaW and deltaS*deltaZ.
bool checkGoodMove(const bool doCorrector, CoinWorkDouble &bestNextGap, bool allowIncreasingGap)
sees if looks plausible change in complementarity
int createSolution()
createSolution. Creates solution from scratch (- code if no memory)
void debugMove(int phase, CoinWorkDouble primalStep, CoinWorkDouble dualStep)
See exactly what would happen given current deltas.
CoinWorkDouble complementarityGap(int &numberComplementarityPairs, int &numberComplementarityItems, const int phase)
complementarityGap. Computes gap