summaryrefslogtreecommitdiff
path: root/code/trainer/reinforce_synapse.h
diff options
context:
space:
mode:
Diffstat (limited to 'code/trainer/reinforce_synapse.h')
-rw-r--r--code/trainer/reinforce_synapse.h55
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
contact: Jan Huwald // Impressum