|
|
|
|
@ -16,6 +16,7 @@
|
|
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
#include <atomic>
|
|
|
|
|
#include <sndfile.h>
|
|
|
|
|
#include <float.h>
|
|
|
|
|
#include <spiralcore/audio.h>
|
|
|
|
|
@ -242,10 +243,12 @@ void brain::build_synapses_thresh(search_params ¶ms, double thresh) {
|
|
|
|
|
m_average_error = calc_average_diff(params)*thresh;
|
|
|
|
|
double err = m_average_error*thresh;
|
|
|
|
|
u32 brain_size = m_blocks.size();
|
|
|
|
|
u32 outer_index = 0;
|
|
|
|
|
for (auto &i : m_blocks) {
|
|
|
|
|
std::atomic<u32> progress{0};
|
|
|
|
|
#pragma omp parallel for
|
|
|
|
|
for (u32 outer_index = 0; outer_index < brain_size; ++outer_index) {
|
|
|
|
|
auto &i = m_blocks[outer_index];
|
|
|
|
|
u32 index = 0;
|
|
|
|
|
status::update("building synapses %d%%",(int)(outer_index/(float)brain_size*100));
|
|
|
|
|
status::update("building synapses %d%%",(int)(progress/(float)brain_size*100));
|
|
|
|
|
for (auto &j : m_blocks) {
|
|
|
|
|
if (index!=outer_index) {
|
|
|
|
|
// collect connections that are under threshold in closeness
|
|
|
|
|
@ -256,30 +259,32 @@ void brain::build_synapses_thresh(search_params ¶ms, double thresh) {
|
|
|
|
|
}
|
|
|
|
|
++index;
|
|
|
|
|
}
|
|
|
|
|
++outer_index;
|
|
|
|
|
++progress;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void brain::build_synapses_fixed(search_params ¶ms) {
|
|
|
|
|
//m_average_error = calc_average_diff(params)*thresh;
|
|
|
|
|
u32 brain_size = m_blocks.size();
|
|
|
|
|
u32 outer_index = 0;
|
|
|
|
|
u32 num_synapses = NUM_FIXED_SYNAPSES;
|
|
|
|
|
if (num_synapses>=m_blocks.size()) num_synapses=m_blocks.size()-1;
|
|
|
|
|
|
|
|
|
|
// need to stop the progress updates flooding osc
|
|
|
|
|
u32 update_period = 100;
|
|
|
|
|
u32 update_tick = 0;
|
|
|
|
|
|
|
|
|
|
for (auto &i:m_blocks) {
|
|
|
|
|
std::atomic<u32> update_tick{0};
|
|
|
|
|
std::atomic<u32> progress{0};
|
|
|
|
|
#pragma omp parallel for
|
|
|
|
|
for (u32 outer_index = 0; outer_index < brain_size; ++outer_index) {
|
|
|
|
|
auto &i = m_blocks[outer_index];
|
|
|
|
|
if (update_tick>update_period) {
|
|
|
|
|
status::update("building synapses %d%%",(int)(outer_index/(float)brain_size*100));
|
|
|
|
|
status::update("building synapses %d%%",(int)(progress/(float)brain_size*100));
|
|
|
|
|
update_tick=0;
|
|
|
|
|
}
|
|
|
|
|
update_tick++;
|
|
|
|
|
|
|
|
|
|
u32 index = 0;
|
|
|
|
|
vector<pair<u32,double>> collect;
|
|
|
|
|
collect.reserve(brain_size);
|
|
|
|
|
|
|
|
|
|
// collect comparisons to all other blocks
|
|
|
|
|
for (auto &j:m_blocks) {
|
|
|
|
|
@ -304,7 +309,7 @@ void brain::build_synapses_fixed(search_params ¶ms) {
|
|
|
|
|
i.get_synapse().push_back(collect[n].first);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
++outer_index;
|
|
|
|
|
++progress;
|
|
|
|
|
}
|
|
|
|
|
status::update("Done: %d synapses grown for %d blocks",num_synapses*brain_size,brain_size);
|
|
|
|
|
}
|
|
|
|
|
|