Example program using LPTripletConnection.
This example is a clone of sim_background in which all functionality for weight decay was removed. Instead of using TripletConnection, this piece of code serves as and example program using LPTripletConnection instead which is an example for a synapse model with two state variables. In LPTripletConnection all weight updates are low-pass filtered. The delay introduced by this filtering should worsen the stabiltity situation as in comparison to what can be observed in sim_background.
58 double sparseness = 0.05;
63 bool wmatdump =
false;
64 bool loadbalance =
false;
68 double tau_chk = 100e-3;
69 double simtime = 3600.;
70 double stimtime = simtime;
71 double wmat_interval = 600.;
73 double ampa_nmda_ratio = 1.0;
82 string currentfile =
"";
94 bool noisyweights =
false;
95 bool switchweights =
false;
96 bool ei_plastic =
false;
101 double tau_decay = 3600.;
103 double tau_hom = 50.;
106 double offperiod = 30;
109 int n_strengthen = 0;
111 std::vector<Connection*> corr_connections;
117 const char * file_prefix =
"bg2";
125 po::options_description desc(
"Allowed options");
127 (
"help",
"produce help message")
128 (
"quiet",
"quiet mode")
129 (
"scaling",
"scaling mode")
130 (
"balance",
"activate load balance")
131 (
"load", po::value<std::string>(),
"input weight matrix")
132 (
"patfile", po::value<std::string>(),
"pattern file for StimulusGroup")
133 (
"prefile", po::value<std::string>(),
"pattern file for loading patterns")
134 (
"onperiod", po::value<double>(),
"mean stimulus on period")
135 (
"offperiod", po::value<double>(),
"mean stimulus off period")
136 (
"wmat",
"wmat dump mode")
137 (
"eta", po::value<double>(),
"learning rate")
138 (
"bgrate", po::value<double>(),
"PoissonGroup external firing rate")
139 (
"sparseness", po::value<double>(),
"overall network sparseness")
140 (
"scale", po::value<double>(),
"learning rate")
141 (
"tau_hom", po::value<double>(),
"homeostatic time constant")
142 (
"kappa", po::value<double>(),
"target rate")
143 (
"simtime", po::value<double>(),
"simulation time")
144 (
"dir", po::value<std::string>(),
"output dir")
145 (
"label", po::value<std::string>(),
"output label")
146 (
"wee", po::value<double>(),
"wee")
147 (
"wei", po::value<double>(),
"wei")
148 (
"wie", po::value<double>(),
"wie")
149 (
"wii", po::value<double>(),
"wii")
150 (
"wmax", po::value<double>(),
"wmax")
151 (
"ampa", po::value<double>(),
"ampa nmda ratio")
152 (
"strengthen", po::value<int>(),
"connections to strengthen by 10")
153 (
"ne", po::value<int>(),
"no of exc units")
154 (
"stimfile", po::value<std::string>(),
"stimulus ras file")
155 (
"wstim", po::value<double>(),
"weight of stimulus connections")
156 (
"stimtime", po::value<double>(),
"time of stimulus on")
157 (
"decay",
"decay triplet connections")
158 (
"corr",
"add correlated inputs")
159 (
"ampl", po::value<double>(),
"recall stim amplitude")
160 (
"psize", po::value<int>(),
"block size for correlated inputs")
161 (
"plen", po::value<int>(),
"number of blocks feed-forward")
162 (
"hsize", po::value<int>(),
"block size for correlated inputs (hebbian assembly)")
163 (
"hlen", po::value<int>(),
"number of blocks Hebbian")
164 (
"offset", po::value<int>(),
" offset for corr stim")
165 (
"recall",
"add correlated inputs to first patterns")
166 (
"stimfreq", po::value<double>(),
"CorrelatedPoissonGroup frequency default = 100")
167 (
"dconstant", po::value<double>(),
"decay time constant for decaying triplet connections")
168 (
"wdecay", po::value<double>(),
"wdecay for decay triplet connections")
169 (
"chk", po::value<double>(),
"checker time constant")
170 (
"adapt",
"adapting excitatory neurons")
171 (
"wall",
"enable monitoring of wall clock time")
172 (
"noisyweights",
"enables noisyweights for mean field checks")
173 (
"switchweights",
"switches first weights in each weight matrix")
174 (
"fast",
"turn off some of the monitors to run faster")
175 (
"eiplastic",
"make EI connection plastic")
178 po::variables_map vm;
179 po::store(po::parse_command_line(ac, av, desc), vm);
182 if (vm.count(
"help")) {
183 std::cout << desc <<
"\n";
187 if (vm.count(
"quiet")) {
191 if (vm.count(
"scaling")) {
195 if (vm.count(
"balance")) {
196 std::cout <<
"load balancing active" << std::endl;
200 if (vm.count(
"load")) {
201 std::cout <<
"load from matrix " 206 if (vm.count(
"patfile")) {
207 std::cout <<
"PatternFile is " 212 if (vm.count(
"prefile")) {
213 std::cout <<
"Preload patternfile is " 218 if (vm.count(
"wmat")) {
220 std::cout <<
"wmat dump mode" << std::endl;
223 if (vm.count(
"onperiod")) {
224 std::cout <<
"onperiod set to " 225 << vm[
"onperiod"].as<
double>() <<
".\n";
226 onperiod = vm[
"onperiod"].as<
double>();
229 if (vm.count(
"offperiod")) {
230 std::cout <<
"offperiod set to " 231 << vm[
"offperiod"].as<
double>() <<
".\n";
232 offperiod = vm[
"offperiod"].as<
double>();
235 if (vm.count(
"eta")) {
236 std::cout <<
"eta set to " 237 << vm[
"eta"].as<
double>() <<
".\n";
238 eta = vm[
"eta"].as<
double>();
241 if (vm.count(
"bgrate")) {
242 std::cout <<
"bgrate set to " 243 << vm[
"bgrate"].as<
double>() <<
".\n";
244 bg_rate = vm[
"bgrate"].as<
double>();
247 if (vm.count(
"sparseness")) {
248 std::cout <<
"sparseness set to " 249 << vm[
"sparseness"].as<
double>() <<
".\n";
250 sparseness = vm[
"sparseness"].as<
double>();
253 if (vm.count(
"scale")) {
254 std::cout <<
"scale set to " 255 << vm[
"scale"].as<
double>() <<
".\n";
256 scale = vm[
"scale"].as<
double>();
259 if (vm.count(
"tau_hom")) {
260 std::cout <<
"tau_hom set to " 261 << vm[
"tau_hom"].as<
double>() <<
".\n";
262 tau_hom = vm[
"tau_hom"].as<
double>();
265 if (vm.count(
"kappa")) {
266 std::cout <<
"kappa set to " 267 << vm[
"kappa"].as<
double>() <<
".\n";
268 kappa = vm[
"kappa"].as<
double>();
271 if (vm.count(
"simtime")) {
272 std::cout <<
"simtime set to " 273 << vm[
"simtime"].as<
double>() <<
".\n";
274 simtime = vm[
"simtime"].as<
double>();
278 if (vm.count(
"dir")) {
279 std::cout <<
"dir set to " 284 if (vm.count(
"label")) {
285 std::cout <<
"label set to " 290 if (vm.count(
"wee")) {
291 std::cout <<
"wee set to " 292 << vm[
"wee"].as<
double>() <<
".\n";
293 w_ee = vm[
"wee"].as<
double>();
296 if (vm.count(
"wei")) {
297 std::cout <<
"wei set to " 298 << vm[
"wei"].as<
double>() <<
".\n";
299 w_ei = vm[
"wei"].as<
double>();
302 if (vm.count(
"wie")) {
303 std::cout <<
"wie set to " 304 << vm[
"wie"].as<
double>() <<
".\n";
305 w_ie = vm[
"wie"].as<
double>();
308 if (vm.count(
"wii")) {
309 std::cout <<
"wii set to " 310 << vm[
"wii"].as<
double>() <<
".\n";
311 w_ii = vm[
"wii"].as<
double>();
314 if (vm.count(
"wmax")) {
315 std::cout <<
"wmax set to " 316 << vm[
"wmax"].as<
double>() <<
".\n";
317 wmax = vm[
"wmax"].as<
double>();
320 if (vm.count(
"ampa")) {
321 std::cout <<
"ampa set to " 322 << vm[
"ampa"].as<
double>() <<
".\n";
323 ampa_nmda_ratio = vm[
"ampa"].as<
double>();
326 if (vm.count(
"strengthen")) {
327 std::cout <<
"strengthen set to " 328 << vm[
"strengthen"].as<
int>() <<
".\n";
329 n_strengthen = vm[
"strengthen"].as<
int>();
332 if (vm.count(
"ne")) {
333 std::cout <<
"ne set to " 334 << vm[
"ne"].as<
int>() <<
".\n";
335 ne = vm[
"ne"].as<
int>();
339 if (vm.count(
"stimfile")) {
340 std::cout <<
"stimfile set to " 345 if (vm.count(
"wstim")) {
346 std::cout <<
"wstim set to " 347 << vm[
"wstim"].as<
double>() <<
".\n";
348 wstim = vm[
"wstim"].as<
double>();
351 if (vm.count(
"stimtime")) {
352 std::cout <<
"stimtime set to " 353 << vm[
"stimtime"].as<
double>() <<
".\n";
354 stimtime = vm[
"stimtime"].as<
double>();
357 if (vm.count(
"corr")) {
358 std::cout <<
"enabling corr " << std::endl;
362 if (vm.count(
"ampl")) {
363 std::cout <<
"ampl set to " 364 << vm[
"ampl"].as<
double>() <<
".\n";
365 ampl = vm[
"ampl"].as<
double>();
368 if (vm.count(
"psize")) {
369 std::cout <<
"psize set to " 370 << vm[
"psize"].as<
int>() <<
".\n";
371 psize = vm[
"psize"].as<
int>();
374 if (vm.count(
"plen")) {
375 std::cout <<
"plen set to " 376 << vm[
"plen"].as<
int>() <<
".\n";
377 plen = vm[
"plen"].as<
int>();
380 if (vm.count(
"hsize")) {
381 std::cout <<
"hsize set to " 382 << vm[
"hsize"].as<
int>() <<
".\n";
383 hsize = vm[
"hsize"].as<
int>();
386 if (vm.count(
"hlen")) {
387 std::cout <<
"hlen set to " 388 << vm[
"hlen"].as<
int>() <<
".\n";
389 hlen = vm[
"hlen"].as<
int>();
392 if (vm.count(
"offset")) {
393 std::cout <<
"offset set to " 394 << vm[
"offset"].as<
int>() <<
".\n";
395 offset = vm[
"offset"].as<
int>();
398 if (vm.count(
"recall")) {
399 std::cout <<
"enabling recall " << std::endl;
403 if (vm.count(
"stimfreq")) {
404 std::cout <<
"stimfreq set to " 405 << vm[
"stimfreq"].as<
double>() <<
".\n";
406 stimfreq = vm[
"stimfreq"].as<
double>();
409 if (vm.count(
"decay")) {
410 std::cout <<
"weight decay on " << std::endl;
414 if (vm.count(
"dconstant")) {
415 std::cout <<
"dconstant set to " 416 << vm[
"dconstant"].as<
double>() <<
".\n";
417 tau_decay = vm[
"dconstant"].as<
double>();
420 if (vm.count(
"wdecay")) {
421 std::cout <<
"wdecay set to " 422 << vm[
"wdecay"].as<
double>() <<
".\n";
423 wdecay = vm[
"wdecay"].as<
double>();
426 if (vm.count(
"chk")) {
427 std::cout <<
"chk set to " 428 << vm[
"chk"].as<
double>() <<
".\n";
429 tau_chk = vm[
"chk"].as<
double>();
432 if (vm.count(
"adapt")) {
433 std::cout <<
"adaptation on " << std::endl;
437 if (vm.count(
"wall")) {
438 std::cout <<
"real time wall clock monitoring enabled " << std::endl;
442 if (vm.count(
"noisyweights")) {
443 std::cout <<
"noisyweights on " << std::endl;
447 if (vm.count(
"switchweights")) {
448 std::cout <<
"switchweights on " << std::endl;
449 switchweights =
true;
452 if (vm.count(
"fast")) {
453 std::cout <<
"fast on " << std::endl;
457 if (vm.count(
"eiplastic")) {
458 std::cout <<
"eiplastic on " << std::endl;
462 catch(std::exception& e) {
463 std::cerr <<
"error: " << e.what() <<
"\n";
467 std::cerr <<
"Exception of unknown type!\n";
474 std::cout <<
"scaled by " << scale << std::endl;
477 double primetime = 3*tau_hom;
480 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s", dir.c_str(), file_prefix, eta, tau_hom, label.c_str());
483 auryn_init(ac, av, dir=
".",
"", logfile_prefix);
491 ((
AIFGroup*)neurons_e)->set_ampa_nmda_ratio(ampa_nmda_ratio);
492 ((
AIFGroup*)neurons_e)->dg_adapt1=1.0;
498 ((
IFGroup*)neurons_e)->set_ampa_nmda_ratio(ampa_nmda_ratio);
507 ((
IFGroup*)neurons_i)->set_ampa_nmda_ratio(ampa_nmda_ratio);
513 msg =
"Setting up I connections ...";
516 w_ie,sparseness,
GABA);
518 w_ii,sparseness,
GABA);
520 msg =
"Setting up E connections ...";
525 w_ei, sparseness,
GLUT);
527 if (infilename.empty()) {
530 tau_hom, eta, kappa, wmax,
GLUT);
535 std::stringstream oss;
536 oss <<
"Loading weight matrix from " << str;
540 tau_hom, eta, kappa, wmax,
GLUT);
546 if (infilename.empty()) {
549 tau_hom, eta, kappa, wmax,
GLUT);
553 con_ee->random_data(w_ee,w_ee/4);
554 for (
int i = 0 ; i < n_strengthen ; ++i ) {
555 con_ee->set_data(i,i*(wmax/n_strengthen));
562 std::stringstream oss;
563 oss <<
"Loading weight matrix from " << str;
566 str.c_str(),tau_hom,eta,kappa,wmax,
GLUT);
569 sprintf(strbuf,
"%s.e.nstate", infilename.c_str());
571 sprintf(strbuf,
"%s.i.nstate", infilename.c_str());
579 msg =
"Initializing traces ...";
581 con_ee->set_hom_trace(kappa);
587 msg =
"Setting up monitors ...";
591 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.weight", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
596 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.syn", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
598 for (
int i = 0 ; i < 5 ; ++i ) {
599 for (
int j = 0 ; j < 5 ; ++j ) {
600 std::vector<neuron_pair> sublist = con_ee->get_block(i*psize,(i+1)*psize,j*psize,(j+1)*psize);
601 wmon->add_to_list(sublist);
605 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.%c.ras", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank(),
'e');
612 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.%c.prate", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank(),
'e');
616 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.rt", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
633 if ( scaling && (errcode==0) ) {
634 std::stringstream oss;
635 oss <<
"Changing cell input ... ";
638 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.pat", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
642 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.scal", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
644 wmon_scal->add_to_list( con_ee->get_pre_partners(0) );
645 wmon_scal->add_to_list( con_ee->get_pre_partners(10) );
654 const double amplitude_fwd = 9.0*ampl;
655 const double amplitude_heb = 3.0*ampl;
661 double strength = 0.2;
665 std::stringstream oss;
666 oss <<
"Activating correlated input ... ";
670 con_ee->stdp_active =
true;
681 for (
int i = 0 ; i < plen ; ++i )
682 con_corr_e->
connect_block_random(w,sparseness,(i)*extsize,offset+(i+1)*extsize,(i)*psize,offset+(i+1)*psize);
684 corr_connections.push_back(con_corr_e);
688 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.%c.ras", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank(),
'c');
699 for (
int i = 0 ; i < hlen ; ++i )
700 con_corr_e2->
connect_block_random(w,sparseness,(i)*extsize,(i+1)*extsize,offset+(i)*hsize+plen*psize,offset+(i+1)*hsize+plen*psize);
702 corr_connections.push_back(con_corr_e2);
707 con_exte->
set_block(0,2500,0,plen*psize+hlen*hsize,0.0);
712 std::stringstream oss;
713 oss <<
"Activating recall input ... ";
724 for (
int i = 0 ; i < plen ; ++i )
725 con_corr_e->
connect_block_random(w,sparseness,(i)*extsize,offset+(i+1)*extsize,(i)*psize,offset+(i+1)*psize);
727 corr_connections.push_back(con_corr_e);
731 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.%c.ras", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank(),
'c');
742 for (
int i = 0 ; i < hlen ; ++i )
743 con_corr_e2->
connect_block_random(w,sparseness,(i)*extsize,(i+1)*extsize,offset+(i)*hsize+plen*psize,offset+(i+1)*hsize+plen*psize);
745 corr_connections.push_back(con_corr_e2);
755 if ( prefile !=
"" ) {
758 con_ee->load_patterns(prefile, wmax,
true,
false);
763 if ( patfile !=
"" ) {
765 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.stim", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
767 stimgroup->set_mean_on_period(onperiod);
768 stimgroup->set_mean_off_period(offperiod);
775 con_ee->stdp_active =
false;
776 sys->run(primetime,
true);
779 if ( corr || recall ) {
788 con_ee->stdp_active =
true;
791 if (!
sys->run(simtime,
true))
798 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.e.nstate", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
800 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.i.nstate", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
804 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.wmat", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
805 con_ee->write_to_file(strbuf);
807 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.ei.wmat", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
810 for (
int i = 0 ; i < corr_connections.size() ; ++i ) {
811 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.%d.wmat", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(), i,
sys->
mpi_rank());
812 corr_connections[i]->write_to_file(strbuf);
818 sprintf(strbuf,
"%s/%s_e%.2et%.2f%s.%d.lifetime", dir.c_str(), file_prefix, eta, tau_hom, label.c_str(),
sys->
mpi_rank());
819 std::ofstream killfile;
820 killfile.open(strbuf);
821 killfile <<
sys->
get_time()-primetime << std::endl;
void auryn_free()
Cleanly shuts down Auryn simulation environment.
Definition: auryn_global.cpp:107
Implements triplet STDP in which weight updates are low-pass filtered.
Definition: LPTripletConnection.h:40
void set_block(NeuronID lo_row, NeuronID hi_row, NeuronID lo_col, NeuronID hi_col, AurynWeight weight)
Sets all weights of existing connections in a block spanned by the first 4 parameters to the value gi...
Definition: SparseConnection.cpp:307
Standard Glutamatergic (excitatory) transmission.
Definition: auryn_definitions.h:139
virtual bool load_from_file(const char *filename)
Reads current states of SpikingGroup to human-readible textfile if implemented in derived class...
Definition: SpikingGroup.cpp:585
void random_mem(AurynState mean=-60e-3, AurynState sigma=5e-3)
Definition: NeuronGroup.cpp:81
ForwardMatrix * w
A pointer that points per default to the ComplexMatrix that stores the connectinos.
Definition: SparseConnection.h:147
unsigned int mpi_rank()
Returns current rank.
Definition: System.cpp:1009
Monitor class to record the system time in every timestep.
Definition: RealTimeMonitor.h:45
Abstract base class of all objects producing spikes.
Definition: SpikingGroup.h:67
AurynFloat AurynWeight
Unit of synaptic weights.
Definition: auryn_definitions.h:159
A Checker class that tracks population firing rate as a moving average and breaks a run if it goes ou...
Definition: RateChecker.h:59
The base class to create sparse random connections.
Definition: SparseConnection.h:66
Monitor class to record population firing rates.
Definition: PatternMonitor.h:47
Logger * logger
Global pointer to instance of Logger which needs to be initialized in every simulation main program...
Definition: auryn_global.cpp:36
void connect_block_random(AurynWeight weight, AurynDouble sparseness, NeuronID lo_row, NeuronID hi_row, NeuronID lo_col, NeuronID hi_col, bool skip_diag=false)
Underlying sparse fill method.
Definition: SparseConnection.cpp:360
The standard Monitor object to record spikes from a SpikingGroup and write them to a text file...
Definition: SpikeMonitor.h:52
void set_tau_mem(AurynFloat taum)
Sets the membrane time constant.
Definition: IFGroup.cpp:154
Saves the weight matrix of a given connection in regular time intervals.
Definition: WeightMatrixMonitor.h:41
void clear()
Clears matrix.
Definition: ComplexMatrix.h:460
void auryn_abort(int errcode)
Terminates Auryn simulation abnormally.
Definition: auryn_global.cpp:113
void allocate_manually(AurynLong expected_size)
Is used whenever memory has to be allocated manually. Automatically adjusts for number of ranks and f...
Definition: SparseConnection.cpp:192
System * sys
Global pointer to instance of System which needs to be initialized in every simulation main program...
Definition: auryn_global.cpp:37
A SpikingGroup that creates poissonian spikes with a given rate.
Definition: PoissonGroup.h:52
The Monitor records from selected synapses stored in a list. This is the default behavior.
Definition: WeightMonitor.h:47
A simple extension of IFGroup with spike triggered adaptation.
Definition: AIFGroup.h:37
Provides a poisson stimulus at random intervals in one or more predefined subsets of the group that a...
Definition: StimulusGroup.h:50
AurynDouble get_time()
Gets the current system time in [s].
Definition: System.cpp:226
void auryn_init(int ac, char *av[], string dir, string simulation_name, string logfile_prefix, LogMessageType filelog_level, LogMessageType consolelog_level)
Initalizes MPI and the Auryn simulation environment.
Definition: auryn_global.cpp:84
Stimulator class to inject timeseries of currents to patterns (subpopulations) of neurons...
Definition: PatternStimulator.h:44
Standard Gabaergic (inhibitory) transmission.
Definition: auryn_definitions.h:140
void msg(std::string text, LogMessageType type=NOTIFICATION, bool global=false, int line=-1, std::string srcfile="")
Definition: Logger.cpp:74
Abstract base class for all neuron groups.
Definition: NeuronGroup.h:45
virtual void finalize()
Finalizes connection after random or manual initialization of the weights.
Definition: SparseConnection.cpp:499
bool write_to_file(ForwardMatrix *m, string filename)
Writes rank specific weight matrix on the same rank to a file.
Definition: SparseConnection.cpp:690
Monitor class to record population firing rates.
Definition: PopulationRateMonitor.h:46
virtual bool write_to_file(const char *filename)
Writes current states of SpikingGroup to human-readible textfile if implemented in derived class...
Definition: SpikingGroup.cpp:549
Monitors the evolution of a single or a set of weights.
Definition: WeightMonitor.h:65
std::string string
Standard library string type which is imported into Auryn namespace.
Definition: auryn_definitions.h:156
unsigned int NeuronID
NeuronID is an unsigned integeger type used to index neurons in Auryn.
Definition: auryn_definitions.h:151
Implements the standard integrate and file model used in Auryn.
Definition: IFGroup.h:47
Provides a unity matrix like connectivity.
Definition: IdentityConnection.h:47