diff options
Diffstat (limited to 'code/trainer/reinforce_synapse.h')
-rw-r--r-- | code/trainer/reinforce_synapse.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/code/trainer/reinforce_synapse.h b/code/trainer/reinforce_synapse.h new file mode 100644 index 0000000..46b0083 --- /dev/null +++ b/code/trainer/reinforce_synapse.h @@ -0,0 +1,55 @@ +#ifndef TRAINER_H +#define TRAINER_H + +#include <stdio.h> +#include <pthread.h> +#include <map> +#include <queue> +#include "boost/tuple/tuple.hpp" + + +using namespace std; + +class Trainer { + public: + FILE *fd_spike_in, + *fd_spike_out, + *fd_global_out, + *fd_global_in, + *fd_trace_out, + *fd_performance_out; + + // init stuff + Trainer(int argc, char** argv); + + // main routine + void run(); + + // state vars + long currentEpoch; + map<int, int> *neuronFreq[2]; // stores if a surveilled neuron fired during the current or last epoch + double dopamin_level; + + // synchronisation vars + typedef boost::tuple<double, int, double> SpikeEvent; // <what time, wich neuron, current> + queue<SpikeEvent> incomingSpikes; + // TODO: outgoingSpikes; + pthread_mutex_t incomingSpikeLock; + // TODO: , outgoingSpikeLock; (including a condition for the writer to wakeup upon if a previously empyt queue has been filled) + pthread_t thread_read, thread_write; + + // configuration + double epochDuration; + double entireDuration; + double freq; // of outgoing noise per neuron + double voltage; // per outgoing (random) spike + long neurons; + double da_single_reward; +}; + +// seperate thread to read all spikes neccessary because reading and +// writing to these descriptors could block and thus cause a deadlock +void *read_spikes(Trainer *t); +void *write_spikes(Trainer *t); + +#endif // TRAINER_H |