LCOV - code coverage report
Current view: top level - app/src/Opt - GeneticIntervalSolver.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 20 100.0 %
Date: 2023-08-17 16:45:52 Functions: 5 5 100.0 %

          Line data    Source code
       1             : #include "Opt/GeneticIntervalSolver.hpp"
       2             : 
       3             : using namespace std;
       4             : using namespace Opt;
       5             : 
       6             : typedef UnivariateSolver::Var Var;
       7             : 
       8           7 : GeneticIntervalSolver::GeneticIntervalSolver(
       9             :     size_t              populationSize,
      10             :     size_t              newPopulationSize,
      11             :     Var                 variabilityCoeff,
      12             :     size_t              maxNumberGenerations,
      13             :     int                 parallelism,
      14             :     shared_ptr<mt19937> gen
      15           7 : ):
      16             :     solver(
      17             :         populationSize,
      18             :         newPopulationSize,
      19             :         variabilityCoeff,
      20             :         maxNumberGenerations,
      21             :         parallelism,
      22             :         gen
      23             :     ),
      24          14 :     initialPopulationSize(populationSize + newPopulationSize) {}
      25             : 
      26           7 : void GeneticIntervalSolver::setInterval(Var l, Var r) {
      27           7 :     left  = l;
      28           7 :     right = r;
      29           7 : }
      30             : 
      31           7 : void GeneticIntervalSolver::setStopCriteria(Var e) {
      32           7 :     solver.setStopCriteria(e);
      33           7 : }
      34             : 
      35           7 : Var GeneticIntervalSolver::solve(Problem p) {
      36           7 :     solver.clearInitialSolutions();
      37             : 
      38        7707 :     for(size_t i = 0; i < initialPopulationSize; ++i) {
      39        7700 :         double r = (double)i / ((double)initialPopulationSize - 1.0);
      40        7700 :         solver.addInitialSolution(left + (right - left) * r);
      41             :     }
      42             : 
      43       60409 :     Problem p_ = [&p, this](Var a) -> Var {
      44       60409 :         if(a < left || a > right) return numeric_limits<Var>::infinity();
      45      120786 :         return p(a);
      46           7 :     };
      47             : 
      48          21 :     return solver.solve(p_);
      49             : }

Generated by: LCOV version 1.14