diff options
Diffstat (limited to 'src/engine/Evolver.cpp')
-rw-r--r-- | src/engine/Evolver.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/engine/Evolver.cpp b/src/engine/Evolver.cpp index 906e888..973c9c8 100644 --- a/src/engine/Evolver.cpp +++ b/src/engine/Evolver.cpp @@ -33,8 +33,10 @@ namespace machina { Evolver::Evolver(TimeUnit unit, const string& target_midi, SPtr<Machine> seed) - : _problem(new Problem(unit, target_midi, seed)) + : _rng(0) + , _problem(new Problem(unit, target_midi, seed)) , _seed_fitness(-FLT_MAX) + , _exit_flag(false) { SPtr<eugene::HybridMutation<Machine> > m(new HybridMutation<Machine>()); @@ -75,6 +77,24 @@ Evolver::Evolver(TimeUnit unit, } void +Evolver::start() +{ + if (!_thread) { + _thread = std::unique_ptr<std::thread>( + new std::thread(&Evolver::run, this)); + } +} + +void +Evolver::join() +{ + if (_thread && _thread->joinable()) { + _exit_flag = true; + _thread->join(); + } +} + +void Evolver::seed(SPtr<Machine> parent) { /*_best = SPtr<Machine>(new Machine(*parent.get())); @@ -84,7 +104,7 @@ Evolver::seed(SPtr<Machine> parent) } void -Evolver::_run() +Evolver::run() { float old_best = _ga->best_fitness(); |