Line data Source code
1 : #include "Opt/QuadraticGuessSolver.hpp" 2 : 3 : #include <cmath> 4 : #include <iostream> 5 : 6 : using namespace std; 7 : using namespace Opt; 8 : 9 : typedef UnivariateSolver::Var Var; 10 : 11 0 : QuadraticGuessSolver::QuadraticGuessSolver( 12 : SolverWithInitialSolutions &solver_, 13 : Var initialSolution_, 14 : Var alpha_, 15 : Var multAdjust_, 16 : Var margin_ 17 0 : ): 18 : solver(solver_), 19 : s(initialSolution_), 20 : alpha(alpha_), 21 : multAdjust(multAdjust_), 22 0 : margin(margin_) {} 23 : 24 0 : void QuadraticGuessSolver::setStopCriteria(Var e) { 25 0 : epsilon = e; 26 0 : } 27 : 28 0 : Var QuadraticGuessSolver::solve(Problem prob) { 29 0 : Var p = pow(10, margin); 30 0 : Var s1 = s * multAdjust; 31 0 : Var s2 = s * p; 32 0 : Var s3 = s / p; 33 0 : Var e = fabs(s2 - s3) * epsilon; 34 0 : solver.clearInitialSolutions(); 35 0 : solver.addInitialSolutions(s1, s2, s3); 36 0 : solver.setStopCriteria(e); 37 0 : Var x = solver.solve(prob); 38 0 : s = (1.0 - alpha) * s + alpha * x; 39 0 : return x; 40 : }