155 mu = iterate->
GetMu();
178 std::cout << std::endl <<
"Duality Gap: " << resids->
GetDualityGap() << std::endl;
180 std::cout <<
" alpha = " << alpha << std::endl;
182 std::cout <<
" *** Iteration " << i <<
" *** " << std::endl;
183 std::cout <<
" mu = " << mu <<
" relative residual norm = "
189 switch (status_code) {
191 std::cout << std::endl <<
" *** SUCCESSFUL TERMINATION ***" << std::endl;
194 std::cout << std::endl <<
" *** MAXIMUM ITERATIONS REACHED *** " << std::endl;
197 std::cout << std::endl <<
" *** TERMINATION: PROBABLY INFEASIBLE *** " << std::endl;
200 std::cout << std::endl <<
" *** TERMINATION: STATUS UNKNOWN *** " << std::endl;
223 if (
this != &source) {
@ kSUCCESSFUL_TERMINATION
Derived class of TQpSolverBase implementing the original Mehrotra predictor-corrector algorithm.
void DefMonitor(TQpDataBase *data, TQpVar *vars, TQpResidual *resids, Double_t alpha, Double_t sigma, Int_t i, Double_t mu, Int_t status_code, Int_t level) override
Print information about the optimization process and monitor the convergence status of thye algorithm...
TMehrotraSolver()
Default constructor.
TMehrotraSolver & operator=(const TMehrotraSolver &source)
Assignment operator.
~TMehrotraSolver() override
Deconstructor.
Int_t Solve(TQpDataBase *prob, TQpVar *iterate, TQpResidual *resid) override
Solve the quadratic programming problem as formulated through prob, store the final solution in itera...
Data for the general QP formulation.
virtual Double_t DataNorm()=0
virtual void Solve(TQpDataBase *prob, TQpVar *vars, TQpResidual *resids, TQpVar *step)
Solves the system for a given set of residuals.
virtual void Factor(TQpDataBase *prob, TQpVar *vars)
Sets up the matrix for the main linear system in "augmented system" form.
default general problem formulation:
virtual TQpLinSolverBase * MakeLinSys(const TQpDataBase *data)=0
virtual TQpVar * MakeVariables(const TQpDataBase *data)=0
The Residuals class calculates and stores the quantities that appear on the right-hand side of the li...
Double_t GetResidualNorm()
void Set_r3_xz_alpha(TQpVar *vars, Double_t alpha)
Set the "complementarity" component of the residuals to the pairwise products of the complementary va...
void CalcResids(TQpDataBase *problem, TQpVar *vars)
Calculate residuals, their norms, and duality complementarity gap, given a problem and variable set.
void Add_r3_xz_alpha(TQpVar *vars, Double_t alpha)
Modify the "complementarity" component of the residuals, by adding the pairwise products of the compl...
The Solver class contains methods for monitoring and checking the convergence status of the algorithm...
virtual void Start(TQpProbBase *formulation, TQpVar *iterate, TQpDataBase *prob, TQpResidual *resid, TQpVar *step)
Implements a default starting-point heuristic.
virtual void DoMonitor(TQpDataBase *data, TQpVar *vars, TQpResidual *resids, Double_t alpha, Double_t sigma, Int_t i, Double_t mu, Int_t stop_code, Int_t level)
Monitor progress / convergence aat each interior-point iteration.
virtual Int_t DoStatus(TQpDataBase *data, TQpVar *vars, TQpResidual *resids, Int_t i, Double_t mu, Int_t level)
Tests for termination.
virtual Double_t FinalStepLength(TQpVar *iterate, TQpVar *step)
Implements a version of Mehrotra starting point heuristic, modified to ensure identical steps in the ...
TQpSolverBase & operator=(const TQpSolverBase &source)
Assignment operator.
Class containing the variables for the general QP formulation.
static Double_t StepBound(TVectorD &v, TVectorD &dir, Double_t maxStep)
Find the maximum stepsize of v in direction dir before violating the nonnegativity constraints.
virtual Double_t MuStep(TQpVar *step, Double_t alpha)
Compute the complementarity gap resulting from a step of length "alpha" along direction "step".
virtual Double_t GetMu()
compute complementarity gap, obtained by taking the inner product of the complementary vectors and di...
virtual void Negate()
Perform a "negate" operation on all data vectors : x = -x.
virtual void Saxpy(TQpVar *b, Double_t alpha)
Perform a "saxpy" operation on all data vectors : x += alpha*y.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.