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