diff options
Diffstat (limited to 'src/engine/machina/Evolver.hpp')
-rw-r--r-- | src/engine/machina/Evolver.hpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/engine/machina/Evolver.hpp b/src/engine/machina/Evolver.hpp index e14fc4a..400c177 100644 --- a/src/engine/machina/Evolver.hpp +++ b/src/engine/machina/Evolver.hpp @@ -1,6 +1,6 @@ /* This file is part of Machina. - Copyright 2007-2013 David Robillard <http://drobilla.net> + Copyright 2007-2017 David Robillard <http://drobilla.net> Machina is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -17,10 +17,13 @@ #ifndef MACHINA_EVOLVER_HPP #define MACHINA_EVOLVER_HPP +#include <atomic> +#include <memory> +#include <thread> + #include "eugene/GA.hpp" #include "eugene/Random.hpp" #include "machina/types.hpp" -#include "raul/Thread.hpp" #include "raul/TimeStamp.hpp" #include "Machine.hpp" @@ -34,7 +37,7 @@ namespace machina { class Problem; -class Evolver : public Raul::Thread +class Evolver { public: Evolver(Raul::TimeUnit unit, @@ -44,18 +47,24 @@ public: void seed(SPtr<Machine> parent); bool improvement() { return _improvement; } + void start(); + void join(); + const Machine& best() { return _ga->best(); } typedef eugene::GA<Machine> MachinaGA; private: - void _run(); + void run(); + + eugene::Random _rng; + SPtr<MachinaGA> _ga; + SPtr<Problem> _problem; + float _seed_fitness; + Schrodinbit _improvement; + std::atomic<bool> _exit_flag; - eugene::Random _rng; - SPtr<MachinaGA> _ga; - SPtr<Problem> _problem; - float _seed_fitness; - Schrodinbit _improvement; + std::unique_ptr<std::thread> _thread; }; } // namespace machina |