#ifndef TRAINER_H #define TRAINER_H #include #include #include #include #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 *neuronFreq[2]; // stores if a surveilled neuron fired during the current or last epoch double dopamin_level; // synchronisation vars typedef boost::tuple SpikeEvent; // queue 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