aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/machina/Evolver.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/machina/Evolver.hpp')
-rw-r--r--src/engine/machina/Evolver.hpp27
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