52 #include "Riostream.h" 110 Double_t mu = iterate->
GetMu();
123 this->
DoMonitor(prob,iterate,resid,alpha,sigma,
fIter,mu,status_code,0);
156 mu = iterate->
GetMu();
161 this->
DoMonitor(prob,iterate,resid,alpha,sigma,
fIter,mu,status_code,1);
173 Double_t alpha,Double_t ,Int_t i,Double_t mu,
174 Int_t status_code,Int_t level)
179 std::cout << std::endl <<
"Duality Gap: " << resids->
GetDualityGap() << std::endl;
181 std::cout <<
" alpha = " << alpha << std::endl;
183 std::cout <<
" *** Iteration " << i <<
" *** " << std::endl;
184 std::cout <<
" mu = " << mu <<
" relative residual norm = " 190 switch (status_code) {
192 std::cout << std::endl <<
" *** SUCCESSFUL TERMINATION ***" << std::endl;
195 std::cout << std::endl <<
" *** MAXIMUM ITERATIONS REACHED *** " << std::endl;
198 std::cout << std::endl <<
" *** TERMINATION: PROBABLY INFEASIBLE *** " << std::endl;
201 std::cout << std::endl <<
" *** TERMINATION: STATUS UNKNOWN *** " << std::endl;
224 if (
this != &source) {
virtual Double_t DataNorm()=0
int iterate(rng_state_t *X)
virtual TQpVar * MakeVariables(const TQpDataBase *data)=0
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.
void CalcResids(TQpDataBase *problem, TQpVar *vars)
Calculate residuals, their norms, and duality complementarity gap, given a problem and variable set...
TMehrotraSolver & operator=(const TMehrotraSolver &source)
Assignment operator.
TMehrotraSolver()
Default constructor.
virtual Double_t MuStep(TQpVar *step, Double_t alpha)
Compute the complementarity gap resulting from a step of length "alpha" along direction "step"...
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
virtual void Solve(TQpDataBase *prob, TQpVar *vars, TQpResidual *resids, TQpVar *step)
Solves the system for a given set of residuals.
virtual Double_t FinalStepLength(TQpVar *iterate, TQpVar *step)
Implements a version of Mehrotra starting point heuristic, modified to ensure identical steps in the ...
virtual Int_t DoStatus(TQpDataBase *data, TQpVar *vars, TQpResidual *resids, Int_t i, Double_t mu, Int_t level)
Tests for termination.
TQpSolverBase & operator=(const TQpSolverBase &source)
Assignment operator.
virtual Double_t GetMu()
compute complementarity gap, obtained by taking the inner product of the complementary vectors and di...
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 void Start(TQpProbBase *formulation, TQpVar *iterate, TQpDataBase *prob, TQpResidual *resid, TQpVar *step)
Implements a default starting-point heuristic.
Double_t GetResidualNorm()
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...
virtual TQpLinSolverBase * MakeLinSys(const TQpDataBase *data)=0
virtual void Negate()
Perform a "negate" operation on all data vectors : x = -x.
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...
virtual void Saxpy(TQpVar *b, Double_t alpha)
Perform a "saxpy" operation on all data vectors : x += alpha*y.
virtual void Factor(TQpDataBase *prob, TQpVar *vars)
Sets up the matrix for the main linear system in "augmented system" form.
virtual 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)
Print information about the optimization process and monitor the convergence status of thye algorithm...
virtual ~TMehrotraSolver()
Deconstructor.
virtual Int_t Solve(TQpDataBase *prob, TQpVar *iterate, TQpResidual *resid)
Solve the quadratic programming problem as formulated through prob, store the final solution in itera...