/*        N E U R A L N E     M R E @ E      */

#include "neuro.h"

#ifdef __cplusplus
extern "C"{
#endif 

/* Initialisation. Moved from the header file. */
extern float Reyni_alpha=(float)0.9;
extern int sequence_randomiser=0;
extern float fixed_weight=(float)1.0;
extern float rude_w_T=(float)2.0, rude_w_F=(float)2.0, rude_n_T=(float)1.2, rude_n_F=(float)1.2;
extern float fine_w_T=(float)1.5, fine_w_F=(float)1.5, fine_n_T=(float)1.1, fine_n_F=(float)1.1;
extern char node_output_type='l'; /* l means linear */
extern float node_output_e_exponent=5.0;
extern float treasureholdadd=0.0;
extern struct fuzzy_object *BIAS_fuzzy_object=NULL;


/* Kod simulacije neuralne mre`e koriste}i fuzzy varijable, sve te`ine ~vora predstavljaju fuzzy varijablu, svaka te`ina je zapravo klasa, a pointer *set ukazuje na ~vor s kojega se uzima ulaz. Operator *actual svakog ~vora (fuzzy_object) pokazuje na te`inu preko koje je stigla najve}a pobuda. Izlaz iz ~vora je pohranjen u varijabli notes. */
/* "T"* MA"T"(int number_of_elements) where "T" means type and can be 'KL'=koef_learn, 'Le'=Level, 'N'=neuron, 'BW'=backwinner, 'PBW'=p_backwinner, 'FSNN'=fuzzy_state_neural_network, 'BPCM'=BP_correction_memory or any of previous letters with (one or more) prefix 'p' =pointer on */
/* Pointer to reserved (allocated) space is returned! */
/* It deals with memory allocation (testmalloc) request for number_of_elements locations of type "T". In the case there is no available memory request is being repeated up to 101 times and if there is still lack of testfree memory unsucessfull end of process is caused (exit(1)). */
koef_learn* MAKL(long int number_of_elements)
	{
	  koef_learn *head;
	  int i=0;
	  do
	  	head=(koef_learn*)testmalloc((size_t)number_of_elements*sizeof(koef_learn));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,101);
  	  return(head);
  	 } /* ; */
Level* MALe(long int number_of_elements)
	{
	  Level *head;
	  int i=0;
	  do
	  	head=(Level*)testmalloc((size_t)number_of_elements*sizeof(Level));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,102);
  	  return(head);
  	 } /* ; */
neuron* MAN(long int number_of_elements)
	{
	  neuron *head;
	  int i=0;
	  do
	  	head=(neuron*)testmalloc((size_t)number_of_elements*sizeof(neuron));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,103);
  	  return(head);
  	 } /* ; */
backwinner* MABW(long int number_of_elements)
	{
	  backwinner *head;
	  int i=0;
	  do
	  	head=(backwinner*)testmalloc((size_t)number_of_elements*sizeof(backwinner));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,104);
  	  return(head);
  	 } /* ; */
p_backwinner* MAPBW(long int number_of_elements)
	{
	  p_backwinner *head;
	  int i=0;
	  do
	  	head=(p_backwinner*)testmalloc((size_t)number_of_elements*sizeof(p_backwinner));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,105);
  	  return(head);
  	 } /* ; */
fuzzy_state_neural_network* MAFSNN(long int number_of_elements)
	{
	  fuzzy_state_neural_network *head;
	  int i=0;
	  do
	  	head=(fuzzy_state_neural_network*)testmalloc((size_t)number_of_elements*sizeof(fuzzy_state_neural_network));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,106);
  	  return(head);
  	 } /* ; */
BP_correction_memory* MABPCM(long int number_of_elements)
	{
	  BP_correction_memory *head;
	  int i=0;
	  do
	  	head=(BP_correction_memory*)testmalloc((size_t)number_of_elements*sizeof(BP_correction_memory));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,107);
  	  return(head);
  	 } /* ; */
neuron_population* MANP(long int number_of_elements)
	{
	  neuron_population *head;
	  int i=0;
	  do
	  	head=(neuron_population*)testmalloc((size_t)number_of_elements*sizeof(neuron_population));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,108);
  	  return(head);
  	 } /* ; */
neural_subsystem* MANSS(long int number_of_elements)
	{
	  neural_subsystem *head;
	  int i=0;
	  do
	  	head=(neural_subsystem*)testmalloc((size_t)number_of_elements*sizeof(neural_subsystem));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,109);
  	  return(head);
  	 } /* ; */
neural_system* MANS(long int number_of_elements)
	{
	  neural_system *head;
	  int i=0;
	  do
	  	head=(neural_system*)testmalloc((size_t)number_of_elements*sizeof(neural_system));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,110);
  	  return(head);
  	 } /* ; */
neuron_type_descriptor* MANTD(long int number_of_elements)
	{
	  neuron_type_descriptor *head;
	  int i=0;
	  do
	  	head=(neuron_type_descriptor*)testmalloc((size_t)number_of_elements*sizeof(neuron_type_descriptor));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,111);
  	  return(head);
  	 } /* ; */
set_of_neuron_types* MASNT(long int number_of_elements)
	{
	  set_of_neuron_types *head;
	  int i=0;
	  do
	  	head=(set_of_neuron_types*)testmalloc((size_t)number_of_elements*sizeof(set_of_neuron_types));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,112);
  	  return(head);
  	 } /* ; */
nucleotide_base* MANB(long int number_of_elements)
	{
	  nucleotide_base *head;
	  int i=0;
	  do
	  	head=(nucleotide_base*)testmalloc((size_t)number_of_elements*sizeof(nucleotide_base));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,113);
  	  return(head);
  	 } /* ; */
gene* MAG(long int number_of_elements)
	{
	  gene *head;
	  int i=0;
	  do
	  	head=(gene*)testmalloc((size_t)number_of_elements*sizeof(gene));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,114);
  	  return(head);
  	 } /* ; */
chromosome* MACh(long int number_of_elements)
	{
	  chromosome *head;
	  int i=0;
	  do
	  	head=(chromosome*)testmalloc((size_t)number_of_elements*sizeof(chromosome));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
learning_algorithm* MALA(long int number_of_elements)
	{
	  learning_algorithm *head;
	  int i=0;
	  do
	  	head=(learning_algorithm*)testmalloc((size_t)number_of_elements*sizeof(learning_algorithm));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
neuron_learning_algorithm* MANLA(long int number_of_elements)
	{
	  neuron_learning_algorithm *head;
	  int i=0;
	  do
	  	head=(neuron_learning_algorithm*)testmalloc((size_t)number_of_elements*sizeof(neuron_learning_algorithm));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2* MAART2(long int number_of_elements)
	{
	  ART2 *head;
	  int i=0;
	  do
	  	head=(ART2*)testmalloc((size_t)number_of_elements*sizeof(ART2));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F1* MAART2_F1(long int number_of_elements)
	{
	  ART2_F1 *head;
	  int i=0;
	  do
	  	head=(ART2_F1*)testmalloc((size_t)number_of_elements*sizeof(ART2_F1));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F2* MAART2_F2(long int number_of_elements)
	{
	  ART2_F2 *head;
	  int i=0;
	  do
	  	head=(ART2_F2*)testmalloc((size_t)number_of_elements*sizeof(ART2_F2));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
connection* MACn(long int number_of_elements)
	{
	  connection *head;
	  int i=0;
	  do
	  	head=(connection*)testmalloc((size_t)number_of_elements*sizeof(connection));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct input_size* MAIS(long int number_of_elements)
	{
	  struct input_size *head;
	  int i=0;
	  do
	  	head=(struct input_size*)testmalloc((size_t)number_of_elements*sizeof(struct input_size));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct subsystem_tree* MASST(long int number_of_elements)
	 {
	  struct subsystem_tree *head;
	  int i=0;
	  do
	  	head=(struct subsystem_tree*)testmalloc((size_t)number_of_elements*sizeof(struct subsystem_tree));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

koef_learn** MApKL(long int number_of_elements)
	{
	  koef_learn **head;
	  int i=0;
	  do
	  	head=(koef_learn**)testmalloc((size_t)number_of_elements*sizeof(koef_learn*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,116);
  	  return(head);
  	 } /* ; */
Level** MApLe(long int number_of_elements)
	{
	  Level **head;
	  int i=0;
	  do
	  	head=(Level**)testmalloc((size_t)number_of_elements*sizeof(Level*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,117);
  	  return(head);
  	 } /* ; */
neuron** MApN(long int number_of_elements)
	{
	  neuron **head;
	  int i=0;
	  do
	  	head=(neuron**)testmalloc((size_t)number_of_elements*sizeof(neuron*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,118);
  	  return(head);
  	 } /* ; */
backwinner** MApBW(long int number_of_elements)
	{
	  backwinner **head;
	  int i=0;
	  do
	  	head=(backwinner**)testmalloc((size_t)number_of_elements*sizeof(backwinner*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,119);
  	  return(head);
  	 } /* ; */
p_backwinner** MApPBW(long int number_of_elements)
	{
	  p_backwinner **head;
	  int i=0;
	  do
	  	head=(p_backwinner**)testmalloc((size_t)number_of_elements*sizeof(p_backwinner*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,120);
  	  return(head);
  	 } /* ; */
fuzzy_state_neural_network** MApFSNN(long int number_of_elements)
	{
	  fuzzy_state_neural_network **head;
	  int i=0;
	  do
	  	head=(fuzzy_state_neural_network**)testmalloc((size_t)number_of_elements*sizeof(fuzzy_state_neural_network*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,121);
  	  return(head);
  	 } /* ; */
BP_correction_memory** MApBPCM(long int number_of_elements)
	{
	  BP_correction_memory **head;
	  int i=0;
	  do
	  	head=(BP_correction_memory**)testmalloc((size_t)number_of_elements*sizeof(BP_correction_memory*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,122);
  	  return(head);
  	 } /* ; */
neuron_population** MApNP(long int number_of_elements)
	{
	  neuron_population **head;
	  int i=0;
	  do
	  	head=(neuron_population**)testmalloc((size_t)number_of_elements*sizeof(neuron_population*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,123);
  	  return(head);
  	 } /* ; */
neural_subsystem** MApNSS(long int number_of_elements)
	{
	  neural_subsystem **head;
	  int i=0;
	  do
	  	head=(neural_subsystem**)testmalloc((size_t)number_of_elements*sizeof(neural_subsystem*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,124);
  	  return(head);
  	 } /* ; */
neural_system** MApNS(long int number_of_elements)
	{
	  neural_system **head;
	  int i=0;
	  do
	  	head=(neural_system**)testmalloc((size_t)number_of_elements*sizeof(neural_system*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,125);
  	  return(head);
  	 } /* ; */
neuron_type_descriptor** MApNTD(long int number_of_elements)
	{
	  neuron_type_descriptor **head;
	  int i=0;
	  do
	  	head=(neuron_type_descriptor**)testmalloc((size_t)number_of_elements*sizeof(neuron_type_descriptor*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,126);
  	  return(head);
  	 } /* ; */
set_of_neuron_types** MApSNT(long int number_of_elements)
	{
	  set_of_neuron_types **head;
	  int i=0;
	  do
	  	head=(set_of_neuron_types**)testmalloc((size_t)number_of_elements*sizeof(set_of_neuron_types*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,127);
  	  return(head);
  	 } /* ; */
nucleotide_base** MApNB(long int number_of_elements)
	{
	  nucleotide_base **head;
	  int i=0;
	  do
	  	head=(nucleotide_base**)testmalloc((size_t)number_of_elements*sizeof(nucleotide_base*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,128);
  	  return(head);
  	 } /* ; */
gene** MApG(long int number_of_elements)
	{
	  gene **head;
	  int i=0;
	  do
	  	head=(gene**)testmalloc((size_t)number_of_elements*sizeof(gene*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,129);
  	  return(head);
  	 } /* ; */
chromosome** MApCh(long int number_of_elements)
	{
	  chromosome **head;
	  int i=0;
	  do
	  	head=(chromosome**)testmalloc((size_t)number_of_elements*sizeof(chromosome*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,130);
  	  return(head);
  	 } /* ; */
learning_algorithm** MApLA(long int number_of_elements)
	{
	  learning_algorithm **head;
	  int i=0;
	  do
	  	head=(learning_algorithm**)testmalloc((size_t)number_of_elements*sizeof(learning_algorithm*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
neuron_learning_algorithm** MApNLA(long int number_of_elements)
	{
	  neuron_learning_algorithm **head;
	  int i=0;
	  do
	  	head=(neuron_learning_algorithm**)testmalloc((size_t)number_of_elements*sizeof(neuron_learning_algorithm*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2** MApART2(long int number_of_elements)
	{
	  ART2 **head;
	  int i=0;
	  do
	  	head=(ART2**)testmalloc((size_t)number_of_elements*sizeof(ART2*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F1** MApART2_F1(long int number_of_elements)
	{
	  ART2_F1 **head;
	  int i=0;
	  do
	  	head=(ART2_F1**)testmalloc((size_t)number_of_elements*sizeof(ART2_F1*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F2** MApART2_F2(long int number_of_elements)
	{
	  ART2_F2 **head;
	  int i=0;
	  do
	  	head=(ART2_F2**)testmalloc((size_t)number_of_elements*sizeof(ART2_F2*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
connection** MApCn(long int number_of_elements)
	{
	  connection **head;
	  int i=0;
	  do
	  	head=(connection**)testmalloc((size_t)number_of_elements*sizeof(connection*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct input_size** MApIS(long int number_of_elements)
	{
	  struct input_size **head;
	  int i=0;
	  do
	  	head=(struct input_size**)testmalloc((size_t)number_of_elements*sizeof(struct input_size*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct subsystem_tree** MApSST(long int number_of_elements)
	 {
	  struct subsystem_tree **head;
	  int i=0;
	  do
	  	head=(struct subsystem_tree**)testmalloc((size_t)number_of_elements*sizeof(struct subsystem_tree*));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

koef_learn*** MAppKL(long int number_of_elements)
	{
	  koef_learn ***head;
	  int i=0;
	  do
	  	head=(koef_learn***)testmalloc((size_t)number_of_elements*sizeof(koef_learn**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,131);
  	  return(head);
  	 } /* ; */
Level*** MAppLe(long int number_of_elements)
	{
	  Level ***head;
	  int i=0;
	  do
	  	head=(Level***)testmalloc((size_t)number_of_elements*sizeof(Level**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,132);
  	  return(head);
  	 } /* ; */
neuron*** MAppN(long int number_of_elements)
	{
	  neuron ***head;
	  int i=0;
	  do
	  	head=(neuron***)testmalloc((size_t)number_of_elements*sizeof(neuron**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,133);
  	  return(head);
  	 } /* ; */
backwinner*** MAppBW(long int number_of_elements)
	{
	  backwinner ***head;
	  int i=0;
	  do
	  	head=(backwinner***)testmalloc((size_t)number_of_elements*sizeof(backwinner**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,134);
  	  return(head);
  	 } /* ; */
p_backwinner*** MAppPBW(long int number_of_elements)
	{
	  p_backwinner ***head;
	  int i=0;
	  do
	  	head=(p_backwinner***)testmalloc((size_t)number_of_elements*sizeof(p_backwinner**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,135);
  	  return(head);
  	 } /* ; */
fuzzy_state_neural_network*** MAppFSNN(long int number_of_elements)
	{
	  fuzzy_state_neural_network ***head;
	  int i=0;
	  do
	  	head=(fuzzy_state_neural_network***)testmalloc((size_t)number_of_elements*sizeof(fuzzy_state_neural_network**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,136);
  	  return(head);
  	 } /* ; */
BP_correction_memory*** MAppBPCM(long int number_of_elements)
	{
	  BP_correction_memory ***head;
	  int i=0;
	  do
	  	head=(BP_correction_memory***)testmalloc((size_t)number_of_elements*sizeof(BP_correction_memory**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,137);
  	  return(head);
  	 } /* ; */
neuron_population*** MAppNP(long int number_of_elements)
	{
	  neuron_population ***head;
	  int i=0;
	  do
	  	head=(neuron_population***)testmalloc((size_t)number_of_elements*sizeof(neuron_population**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,138);
  	  return(head);
  	 } /* ; */
neural_subsystem*** MAppNSS(long int number_of_elements)
	{
	  neural_subsystem ***head;
	  int i=0;
	  do
	  	head=(neural_subsystem***)testmalloc((size_t)number_of_elements*sizeof(neural_subsystem**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,139);
  	  return(head);
  	 } /* ; */
neural_system*** MAppNS(long int number_of_elements)
	{
	  neural_system ***head;
	  int i=0;
	  do
	  	head=(neural_system***)testmalloc((size_t)number_of_elements*sizeof(neural_system**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,140);
  	  return(head);
  	 } /* ; */
neuron_type_descriptor*** MAppNTD(long int number_of_elements)
	{
	  neuron_type_descriptor ***head;
	  int i=0;
	  do
	  	head=(neuron_type_descriptor***)testmalloc((size_t)number_of_elements*sizeof(neuron_type_descriptor**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,141);
  	  return(head);
  	 } /* ; */
set_of_neuron_types*** MAppSNT(long int number_of_elements)
	{
	  set_of_neuron_types ***head;
	  int i=0;
	  do
	  	head=(set_of_neuron_types***)testmalloc((size_t)number_of_elements*sizeof(set_of_neuron_types**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,142);
  	  return(head);
  	 } /* ; */
nucleotide_base*** MAppNB(long int number_of_elements)
	{
	  nucleotide_base ***head;
	  int i=0;
	  do
	  	head=(nucleotide_base***)testmalloc((size_t)number_of_elements*sizeof(nucleotide_base**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,143);
  	  return(head);
  	 } /* ; */
gene*** MAppG(long int number_of_elements)
	{
	  gene ***head;
	  int i=0;
	  do
	  	head=(gene***)testmalloc((size_t)number_of_elements*sizeof(gene**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,144);
  	  return(head);
  	 } /* ; */
chromosome*** MAppCh(long int number_of_elements)
	{
	  chromosome ***head;
	  int i=0;
	  do
	  	head=(chromosome***)testmalloc((size_t)number_of_elements*sizeof(chromosome**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,145);
  	  return(head);
  	 } /* ; */
learning_algorithm*** MAppLA(long int number_of_elements)
	{
	  learning_algorithm ***head;
	  int i=0;
	  do
	  	head=(learning_algorithm***)testmalloc((size_t)number_of_elements*sizeof(learning_algorithm**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
neuron_learning_algorithm*** MAppNLA(long int number_of_elements)
	{
	  neuron_learning_algorithm ***head;
	  int i=0;
	  do
	  	head=(neuron_learning_algorithm***)testmalloc((size_t)number_of_elements*sizeof(neuron_learning_algorithm**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2*** MAppART2(long int number_of_elements)
	{
	  ART2 ***head;
	  int i=0;
	  do
	  	head=(ART2***)testmalloc((size_t)number_of_elements*sizeof(ART2**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F1*** MAppART2_F1(long int number_of_elements)
	{
	  ART2_F1 ***head;
	  int i=0;
	  do
	  	head=(ART2_F1***)testmalloc((size_t)number_of_elements*sizeof(ART2_F1**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F2*** MAppART2_F2(long int number_of_elements)
	{
	  ART2_F2 ***head;
	  int i=0;
	  do
	  	head=(ART2_F2***)testmalloc((size_t)number_of_elements*sizeof(ART2_F2**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
connection*** MAppCn(long int number_of_elements)
	{
	  connection ***head;
	  int i=0;
	  do
	  	head=(connection***)testmalloc((size_t)number_of_elements*sizeof(connection**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct input_size*** MAppIS(long int number_of_elements)
	{
	  struct input_size ***head;
	  int i=0;
	  do
	  	head=(struct input_size***)testmalloc((size_t)number_of_elements*sizeof(struct input_size**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct subsystem_tree*** MAppSST(long int number_of_elements)
	 {
	  struct subsystem_tree ***head;
	  int i=0;
	  do
	  	head=(struct subsystem_tree***)testmalloc((size_t)number_of_elements*sizeof(struct subsystem_tree**));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

koef_learn**** MApppKL(long int number_of_elements)
	{
	  koef_learn ****head;
	  int i=0;
	  do
	  	head=(koef_learn****)testmalloc((size_t)number_of_elements*sizeof(koef_learn***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,146);
  	  return(head);
  	 } /* ; */
Level**** MApppLe(long int number_of_elements)
	{
	  Level ****head;
	  int i=0;
	  do
	  	head=(Level****)testmalloc((size_t)number_of_elements*sizeof(Level***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,147);
  	  return(head);
  	 } /* ; */
neuron**** MApppN(long int number_of_elements)
	{
	  neuron ****head;
	  int i=0;
	  do
	  	head=(neuron****)testmalloc((size_t)number_of_elements*sizeof(neuron***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,148);
  	  return(head);
  	 } /* ; */
backwinner**** MApppBW(long int number_of_elements)
	{
	  backwinner ****head;
	  int i=0;
	  do
	  	head=(backwinner****)testmalloc((size_t)number_of_elements*sizeof(backwinner***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,149);
  	  return(head);
  	 } /* ; */
p_backwinner**** MApppPBW(long int number_of_elements)
	{
	  p_backwinner ****head;
	  int i=0;
	  do
	  	head=(p_backwinner****)testmalloc((size_t)number_of_elements*sizeof(p_backwinner***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,150);
  	  return(head);
  	 } /* ; */
fuzzy_state_neural_network**** MApppFSNN(long int number_of_elements)
	{
	  fuzzy_state_neural_network ****head;
	  int i=0;
	  do
	  	head=(fuzzy_state_neural_network****)testmalloc((size_t)number_of_elements*sizeof(fuzzy_state_neural_network***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,151);
  	  return(head);
  	 } /* ; */
BP_correction_memory**** MApppBPCM(long int number_of_elements)
	{
	  BP_correction_memory ****head;
	  int i=0;
	  do
	  	head=(BP_correction_memory****)testmalloc((size_t)number_of_elements*sizeof(BP_correction_memory***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,152);
  	  return(head);
  	 } /* ; */
neuron_population**** MApppNP(long int number_of_elements)
	{
	  neuron_population ****head;
	  int i=0;
	  do
	  	head=(neuron_population****)testmalloc((size_t)number_of_elements*sizeof(neuron_population***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,153);
  	  return(head);
  	 } /* ; */
neural_subsystem**** MApppNSS(long int number_of_elements)
	{
	  neural_subsystem ****head;
	  int i=0;
	  do
	  	head=(neural_subsystem****)testmalloc((size_t)number_of_elements*sizeof(neural_subsystem***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,154);
  	  return(head);
  	 } /* ; */
neural_system**** MApppNS(long int number_of_elements)
	{
	  neural_system ****head;
	  int i=0;
	  do
	  	head=(neural_system****)testmalloc((size_t)number_of_elements*sizeof(neural_system***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,155);
  	  return(head);
  	 } /* ; */
neuron_type_descriptor**** MApppNTD(long int number_of_elements)
	{
	  neuron_type_descriptor ****head;
	  int i=0;
	  do
	  	head=(neuron_type_descriptor****)testmalloc((size_t)number_of_elements*sizeof(neuron_type_descriptor***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,156);
  	  return(head);
  	 } /* ; */
set_of_neuron_types**** MApppSNT(long int number_of_elements)
	{
	  set_of_neuron_types ****head;
	  int i=0;
	  do
	  	head=(set_of_neuron_types****)testmalloc((size_t)number_of_elements*sizeof(set_of_neuron_types***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,157);
  	  return(head);
  	 } /* ; */
nucleotide_base**** MApppNB(long int number_of_elements)
	{
	  nucleotide_base ****head;
	  int i=0;
	  do
	  	head=(nucleotide_base****)testmalloc((size_t)number_of_elements*sizeof(nucleotide_base***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,158);
  	  return(head);
  	 } /* ; */
gene**** MApppG(long int number_of_elements)
	{
	  gene ****head;
	  int i=0;
	  do
	  	head=(gene****)testmalloc((size_t)number_of_elements*sizeof(gene***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,159);
  	  return(head);
  	 } /* ; */
chromosome**** MApppCh(long int number_of_elements)
	{
	  chromosome ****head;
	  int i=0;
	  do
	  	head=(chromosome****)testmalloc((size_t)number_of_elements*sizeof(chromosome***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,160);
  	  return(head);
  	 } /* ; */
learning_algorithm**** MApppLA(long int number_of_elements)
	{
	  learning_algorithm ****head;
	  int i=0;
	  do
	  	head=(learning_algorithm****)testmalloc((size_t)number_of_elements*sizeof(learning_algorithm***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
neuron_learning_algorithm**** MApppNLA(long int number_of_elements)
	{
	  neuron_learning_algorithm ****head;
	  int i=0;
	  do
	  	head=(neuron_learning_algorithm****)testmalloc((size_t)number_of_elements*sizeof(neuron_learning_algorithm***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2**** MApppART2(long int number_of_elements)
	{
	  ART2 ****head;
	  int i=0;
	  do
	  	head=(ART2****)testmalloc((size_t)number_of_elements*sizeof(ART2***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F1**** MApppART2_F1(long int number_of_elements)
	{
	  ART2_F1 ****head;
	  int i=0;
	  do
	  	head=(ART2_F1****)testmalloc((size_t)number_of_elements*sizeof(ART2_F1***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
ART2_F2**** MApppART2_F2(long int number_of_elements)
	{
	  ART2_F2 ****head;
	  int i=0;
	  do
	  	head=(ART2_F2****)testmalloc((size_t)number_of_elements*sizeof(ART2_F2***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */
connection**** MApppCn(long int number_of_elements)
	{
	  connection ****head;
	  int i=0;
	  do
	  	head=(connection****)testmalloc((size_t)number_of_elements*sizeof(connection***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct input_size**** MApppIS(long int number_of_elements)
	{
	  struct input_size ****head;
	  int i=0;
	  do
	  	head=(struct input_size****)testmalloc((size_t)number_of_elements*sizeof(struct input_size***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */

struct subsystem_tree**** MApppSST(long int number_of_elements)
	 {
	  struct subsystem_tree ****head;
	  int i=0;
	  do
	  	head=(struct subsystem_tree****)testmalloc((size_t)number_of_elements*sizeof(struct subsystem_tree***));
	  while((head==0)&&(++i<101));
  	  if((number_of_elements>0)&&(head==0)) exit_handling(1,115);
  	  return(head);
  	 } /* ; */


/* *fill_node() puni ~vor inicijalnim te`inama i pointerima na prethodni sloj (odnosno izvoru pobude) pomo}u funkcije *fill_weight() koja puni te`ine i pointere */
characteristic *fill_weight(characteristic *link, float *weights)
      { characteristic *head;
	head=MACl((long int)1);
	head->name=MAC((long int)2);
	*(head->name+0)='w';
	*(head->name+1)=' ';
	head->membership= *weights;
	head->ahead=link;
	head->follow=0;
	return(head);
       }/* ; */

fuzzy_object *fill_node(int nmbr_weights, float *weights)
	  { int counter;
	    fuzzy_object*head;
	    head=MAFO((long int)1);
	    head->actual=0;
	    head->number_of_characteristics=nmbr_weights;
	    head->first=fill_weight(head->actual, weights++);
	    head->actual=head->first;
	    for(counter=1; counternumber_of_characteristics; counter++)
	       { head->last=fill_weight(head->actual,weights++);
		 head->actual->follow=head->last;
		 head->actual=head->last;
		};
	    return(head);
	   }/* ; */

/* *fill_Level() puni svaki sloj s te`inama iz weights vektora */
Level *fill_Level(int Level_Nr, int nmbr_of_weights, int nmbr_of_nodes, float *weights, Level *ahead)
      { int counter;
	Level *head;
	head=MALe((long int)1);
	head->nodes=MApFO((long int)(unsigned)nmbr_of_nodes);
 	head->Level_number=Level_Nr;
	head->number_of_nodes=nmbr_of_nodes;
	head->ahead=ahead;
	for(counter=0; counternumber_of_nodes; counter++)
	   { (*(head->nodes+counter))=fill_node(nmbr_of_weights,weights);
	     weights+=nmbr_of_weights;
	    };
	head->follow=0;
	return(head);
       }/* ; */

/* net_output() pohranjuje izlaz iz mre`e u fuzzy skup s zadanim imenom i imenima klasa, a pointer *set svake klase ukazuje na njen ulaz; tako|er upisuje pointer na izlaz u neuron.output */
fuzzy_object*net_output(neuron *net_head, char *names)
	  {
	    fuzzy_object*head;
	    float *memberships;
	    int br;
	    memberships=MAF((long int)(int)net_head->last_Level->number_of_nodes);
	    for(br=0; brlast_Level->number_of_nodes; *(memberships+(br++))=0.0);
	    head=set_fill(net_head->last_Level->number_of_nodes, names, memberships);
	    testfree((char*)memberships);
	    for(head->actual=head->first, br=0; head->actual!=0; head->actual=head->actual->follow, br++)
	       head->actual->set= *(net_head->last_Level->nodes+br);
	    net_head->output=head;
	    return(head);
	   }/* ; */

/* fill_net() upravlja generiranjem mre`e na osnovu zadanih: *name, *nmbr_of_nodes, nmbr_of_net_input, *weights, *input */
neuron *fill_net(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, int nmbr_of_net_input, char* output_names, float *weights, float *input)
    {
      neuron *head;
      int counter=1, counter1, counter2;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
      head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level(counter, nmbr_of_net_input, *nmbr_of_nodes, weights, head->actual_Level);
      head->actual_Level=head->first_Level;
      for(counter1=0; counter1<*nmbr_of_nodes; counter1++)
	 for(counter2=0, (*(head->actual_Level->nodes+counter1))->actual=(*(head->actual_Level->nodes+counter1))->first; (counter2actual_Level->nodes+counter1))->actual!=0); counter2++, (*(head->actual_Level->nodes+counter1))->actual=(*(head->actual_Level->nodes+counter1))->actual->follow, input++)
	    (*(head->actual_Level->nodes+counter1))->actual->set=(link_set)input;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
      head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto() sama generira: *number_of_nodes, *weights, *output_names */
neuron *fill_net_auto( char *name, int number_of_Levels, int nmbr_of_net_input, int number_of_net_output, float *input)
    {
      int counter, c1=0, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)(int)number_of_Levels);
      for(counter=1, counter2=(int)(nmbr_of_net_input*(nmbr_of_net_input+(int)((((float)1/number_of_Levels)*((int)number_of_net_output-(int)nmbr_of_net_input))))); counter0) ? (float)1.0/(*(number_of_nodes+counter-1)) : (float)1.0/nmbr_of_net_input;
	   if ((int)(counter)>0)
	      for(counter1=0; counter1<((*(number_of_nodes+(counter-1)))*(*(number_of_nodes+counter))); counter1++)
		 (*(weights+(c1++)))=mem;
	   else
	      for(counter1=0; counter1<(nmbr_of_net_input*(*(number_of_nodes))); counter1++)
		 *(weights+(c1++))=mem;
	  };
      return(fill_net(name, number_of_Levels, number_of_nodes, nmbr_of_net_input, output_names, weights, input));
     }/* ; */

/* *fill_net_auto_defLev() je kao *fill_net_auto() samo sto korisnik sljedno definira broj cvorova po slojevima, osim prvog i posljednjeg sloja */
neuron *fill_net_auto_defLev( char *name, int number_of_Levels, int nmbr_of_net_input, int number_of_net_output, float *input, int *nr_of_nodes)
    {
      int counter, c1=0, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)(int)number_of_Levels);
      counter2=nmbr_of_net_input+number_of_net_output*(*(nr_of_nodes+number_of_Levels-3));
      for(counter=0; counter<(int)(number_of_Levels)-2;counter++)
	  counter2+=(counter>0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*nmbr_of_net_input;
	  weights=MAF((long int)counter2);
	  output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counter0) ? (float)1.0/(*(number_of_nodes+counter-1)) : (float)1.0/nmbr_of_net_input;
	   if ((int)(counter)>0)
	      for(counter1=0; counter1<((*(number_of_nodes+(counter-1)))*(*(number_of_nodes+counter))); counter1++)
		 (*(weights+(c1++)))=mem;
	   else
	      for(counter1=0; counter1<(nmbr_of_net_input*(*(number_of_nodes))); counter1++)
		 *(weights+(c1++))=mem;
	  };
      return(fill_net(name, number_of_Levels, number_of_nodes, nmbr_of_net_input, output_names, weights, input));
     }/* ; */

/* *fill_Level1_overlaping() ista je kao *fill_Level(), samo sto je ulaz u cvor pripadni pixel i njegova overlap okolina, te samo puni cvorove prvog sloja */
Level *fill_Level1_overlaping(int number_of_nodes, float *input, int overlap, int dimension1, int dimension2)
        {
          int c1, c2, cel, co1, co1d, co1u, co2, co2d, co2u, coel;
          Level *head;
          head=MALe((long int)1);
          head->number_of_nodes=number_of_nodes;
          head->nodes=MApFO((long int)(int)head->number_of_nodes);
          head->Level_number=1;
          head->ahead=0;
          head->follow=0;
          for(c1=0; c1nodes+cel)=MAFO((long int)1);
                      coel=cel;
                      (*(head->nodes+cel))->last=MACl((long int)1);
                      (*(head->nodes+cel))->first=(*(head->nodes+cel))->last;
                      (*(head->nodes+cel))->last->ahead=0;
                      (*(head->nodes+cel))->last->name=MAC((long int)1);
                      (*(head->nodes+cel))->last->membership=1.0;
                      (*(head->nodes+cel))->actual=(*(head->nodes+cel))->last;
                      (*(head->nodes+cel))->last->follow=0;
                      (*(head->nodes+cel))->last->set=(fuzzy_object*)(input+coel);
                      co1d=(c1>(int)(overlap)-1)? c1-overlap: 0;
                      co1u=((int)(overlap)<(int)(dimension1)-c1)? c1+overlap: dimension1;
                      co2d=((int)(c2)>(int)(overlap)-1)? c2-overlap: 0;
                      co2u=((int)(overlap)<(int)(dimension2)-c2)? c2+overlap: dimension2;
                      for(co1=co1d; co1nodes+cel))->last=MACl((long int)1);
                                      (*(head->nodes+cel))->last->ahead=(*(head->nodes+cel))->actual;
                                      (*(head->nodes+cel))->actual->follow=(*(head->nodes+cel))->last;
                                      (*(head->nodes+cel))->last->name=MAC((long int)1);
                                      (*(head->nodes+cel))->last->membership=1.0;
                                      (*(head->nodes+cel))->actual=(*(head->nodes+cel))->last;
                                      (*(head->nodes+cel))->last->follow=0;
                                      (*(head->nodes+cel))->last->set=(fuzzy_object*)(input+coel);
                                     };		
                      fuzzy_object_normalisation(*(head->nodes+cel));
                     };
          return(head);
         } /* ; */

/* fill_net_overlaping()  ista je kao *fill_net(), samo sto je ulaz u cvor pripadni pixel i njegova overlap okolina */
neuron *fill_net_overlaping(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, int nmbr_of_net_input, char* output_names, float *weights, float *input, int overlap, int dimension1, int dimension2)
    {
      neuron *head;
      int counter=1, counter1, counter2;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
      head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_overlaping(nmbr_of_net_input, input, overlap, dimension1, dimension2);
      head->actual_Level=head->first_Level;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
      head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto_overlaping()  ista je kao *fill_net_auto(), samo sto je ulaz u cvor pripadni pixel i njegova overlap okolina */
neuron *fill_net_auto_overlaping( char *name, int number_of_Levels, int number_of_net_output, float *input, int overlap, int dimension1, int dimension2)
    {
      int counter, c1=0, counter1, counter2, *number_of_nodes, nmbr_of_net_input=dimension1 * dimension2;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)(int)number_of_Levels);
      for(counter=1, counter2=(int)(nmbr_of_net_input*(nmbr_of_net_input+(int)((((float)1/number_of_Levels)*((int)number_of_net_output-(int)nmbr_of_net_input))))); counter0) ? (float)1.0/(*(number_of_nodes+counter-1)) : (float)1.0/nmbr_of_net_input;
	   if ((int)(counter)>0)
	      for(counter1=0; counter1<((*(number_of_nodes+(counter-1)))*(*(number_of_nodes+counter))); counter1++)
		 (*(weights+(c1++)))=mem;
	   else
	      for(counter1=0; counter1<(nmbr_of_net_input*(*(number_of_nodes))); counter1++)
		 *(weights+(c1++))=mem;
	  };
      return(fill_net_overlaping(name, number_of_Levels, number_of_nodes, nmbr_of_net_input, output_names, weights, input, overlap, dimension1, dimension2));
     }/* ; */

/* *fill_net_auto_defLev_overlaping()  ista je kao *fill_net_auto_defLev(), samo sto je ulaz u cvor pripadni pixel i njegova overlap okolina */
neuron *fill_net_auto_defLev_overlaping( char *name, int number_of_Levels, int number_of_net_output, float *input, int *nr_of_nodes, int overlap, int dimension1, int dimension2)
    {
      int counter, c1=0, counter1, counter2, *number_of_nodes, nmbr_of_net_input=dimension1 * dimension2;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)(int)number_of_Levels);
      counter2=nmbr_of_net_input+number_of_net_output*(*(nr_of_nodes+number_of_Levels-3));
      for(counter=0; counter<(int)(number_of_Levels)-2;counter++)
	  	counter2+=((int)(counter)>0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*nmbr_of_net_input;
	  weights=MAF((long int)counter2);
	 output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counter0) ? (float)1.0/(*(number_of_nodes+counter-1)) : (float)1.0/nmbr_of_net_input;
	   if ((int)(counter)>0)
	      for(counter1=0; counter1<((*(number_of_nodes+(counter-1)))*(*(number_of_nodes+counter))); counter1++)
		 (*(weights+(c1++)))=mem;
	   else
	      for(counter1=0; counter1<(nmbr_of_net_input*(*(number_of_nodes))); counter1++)
		 *(weights+(c1++))=mem;
	  };
      return(fill_net_overlaping(name, number_of_Levels, number_of_nodes, nmbr_of_net_input, output_names, weights, input, overlap, dimension1, dimension2));
     }/* ; */

/* *fill_weight_for_fuzzy_input() puni te`ine ~vorova za fuzzy ulaz tako da svaka te`ina odgovara jednoj klasi ulaznog fuzzy skupa */
characteristic *fill_weight_for_fuzzy_input(characteristic *link, float weight)
      {
	characteristic *head;
	head=MACl((long int)1);
	head->name=MAC((long int)20);
	head->membership=weight;
	head->ahead=link;
	head->follow=0;
	return(head);
       }/* ; */

/* *fill_node_for_fuzzy_input() puni ~vor prvog sloja kod fuzzy ulaza tako da svaki ~vor odgovara pripadnom fuzzy skupu na ulazu */
fuzzy_object*fill_node_for_fuzzy_input(fuzzy_object*fuzzy_input)
	  {
	    float weight;
	    int counter;
	    fuzzy_object*head;
	    head=MAFO((long int)1);
	    head->actual=0;
	    for(fuzzy_input->actual=fuzzy_input->first, head->number_of_characteristics=0; fuzzy_input->actual!=0; fuzzy_input->actual=fuzzy_input->actual->follow)
		head->number_of_characteristics++;
	    weight=(float)1.0/head->number_of_characteristics;
	    head->first=fill_weight_for_fuzzy_input(head->actual, weight);
	    head->actual=head->first;
	    head->actual->follow=0;
	    for(counter=1; counternumber_of_characteristics; counter++)
	       { head->last=fill_weight_for_fuzzy_input(head->actual, weight);
		 head->actual->follow=head->last;
		 head->actual=head->last;
		};
	    return(head);
	   }/* ; */

/* *fill_Level1_fuzzy_input() sli~na je funkciji *fill_Level() samo {to vodi ra~una da je to prvi sloj s fuzzy ulazom u kojem je mogu}e da se za svaki ~vor postavlja razli~iti broj te`ina */
Level *fill_Level1_fuzzy_input(int Level_No, int number_of_nodes, link_set *fuzzy_input, Level *ahead)
      {
	int counter;
	Level *head;
	head=MALe((long int)1);
	head->nodes=MApFO((long int)number_of_nodes);
	head->Level_number=Level_No;
	head->number_of_nodes=number_of_nodes;
	head->ahead=ahead;
	for(counter=0; counternumber_of_nodes; counter++)
	   (*(head->nodes+counter))=fill_node_for_fuzzy_input(*(fuzzy_input+counter));
	head->follow=0;
	return(head);
       }/* ; */

/* *fill_net_fuzzy_input() ista je kao *fill_net() samo {to je ulaz u mre`u skup fuzzy skupova, *weights ne sadr`i te`ine prvog sluja mre`e, (*(number_of_nodes+0)) mora biti jednak broju fuzzy skupova na ulazu */
neuron *fill_net_fuzzy_input(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, char* output_names, float *weights, link_set *fuzzy_input)
    {
      neuron *head;
      int counter=1, counter1, counter2, nmbr_of_net_input= *nmbr_of_nodes;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
     head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_fuzzy_input(counter, nmbr_of_net_input, fuzzy_input, head->actual_Level);
      head->actual_Level=head->first_Level;
      for(counter1=0; counter1<*nmbr_of_nodes; counter1++)
	 for((*(fuzzy_input+counter1))->actual=(*(fuzzy_input+counter1))->first, (*(head->actual_Level->nodes+counter1))->actual=(*(head->actual_Level->nodes+counter1))->first; (*(fuzzy_input+counter1))->actual!=0;  (*(fuzzy_input+counter1))->actual=(*(fuzzy_input+counter1))->actual->follow, (*(head->actual_Level->nodes+counter1))->actual=(*(head->actual_Level->nodes+counter1))->actual->follow)
	     (*(head->actual_Level->nodes+counter1))->actual->set=(fuzzy_object*)(&((*(fuzzy_input+counter1))->actual->membership));
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
       head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto_fuzzy_input() je ista kao *fill_net_auto() samo {to je ulaz u mre`u skup fuzzy skupova */
neuron *fill_net_auto_fuzzy_input( char *name, int number_of_Levels, int nmbr_of_fuzzy_objects_for_input, int number_of_net_output, fuzzy_object* *fuzzy_input)
    {
      int counter, c1, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)number_of_Levels);
      *number_of_nodes=nmbr_of_fuzzy_objects_for_input;
      for(counter=1, counter2=0 ; counter0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*nmbr_of_fuzzy_objects_for_input;
	  weights=MAF((long int)counter2);
	 output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counternumber_of_nodes=number_of_nodes;
          head->nodes=MApFO((long int)(int) head->number_of_nodes);
          head->Level_number=1;
          head->ahead=0;
          head->follow=0;
          for(c1=0; c1nodes+cel)=MAFO((long int)1);
                      co1d=((int)(c1)>(int)(overlap)-1)? c1-overlap: 0;
                      co1u=((int)(overlap)<(int)(dimension1)-c1)? c1+overlap: dimension1;
                      co2d=((int)(c2)>(int)(overlap)-1)? c2-overlap: 0;
                      co2u=((int)(overlap)<(int)(dimension2)-c2)? c2+overlap: dimension2;
                      for(co1=co1d; co1actual=(*(fuzzy_input+coel))->first; (*(fuzzy_input+coel))->actual!=0; (*(fuzzy_input+coel))->actual=(*(fuzzy_input+coel))->actual->follow)
                                       {
                                         (*(head->nodes+cel))->last=MACl((long int)1);
                                         if((co1==co1d)&&(co2==co2d))
                                            {
                                              (*(head->nodes+cel))->first=(*(head->nodes+cel))->last;
                                              (*(head->nodes+cel))->last->ahead=0;
                                             }
                                         else
                                            {
                                              (*(head->nodes+cel))->last->ahead=(*(head->nodes+cel))->actual;
                                              (*(head->nodes+cel))->actual->follow=(*(head->nodes+cel))->last;
                                             };
                                         (*(head->nodes+cel))->last->name=MAC((long int)1);
                                         (*(head->nodes+cel))->last->membership=1.0;
                                         (*(head->nodes+cel))->actual=(*(head->nodes+cel))->last;
                                         (*(head->nodes+cel))->last->follow=0;
                                         (*(head->nodes+cel))->last->set=(fuzzy_object*)(&((*(fuzzy_input+coel))->actual->membership));
                                        };
                                 };		
                      fuzzy_object_normalisation(*(head->nodes+cel));
                     };
          return(head);
         } /* ; */

/* *fill_net_fuzzy_input_overlaping() ista je kao *fill_net_fuzzy_input() samo {to je ulaz u cvor prvog sloja pripadni pixel i njegova overlap okolina */
neuron *fill_net_fuzzy_input_overlaping(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, char* output_names, float *weights, link_set *fuzzy_input, int overlap, int dimension1, int dimension2)
    {
      neuron *head;
      int counter=1, counter1, counter2, nmbr_of_net_input= *nmbr_of_nodes;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
      head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_fuzzy_input_overlaping(nmbr_of_net_input, fuzzy_input, overlap, dimension1, dimension2);
      head->actual_Level=head->first_Level;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
       head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto_fuzzy_input_overlaping() je ista kao *fill_net_auto_fuzzy_input() samo {to je ulaz u cvor prvog sloja pripadni pixel i njegova overlap okolina */
neuron *fill_net_auto_fuzzy_input_overlaping( char *name, int number_of_Levels, int number_of_net_output, fuzzy_object* *fuzzy_input, int overlap, int dimension1, int dimension2)
    {
      int counter, c1, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)number_of_Levels);
     *number_of_nodes=dimension1* dimension2;
      for(counter=1, counter2=0 ; counter0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*(*number_of_nodes);
      weights=MAF((long int)counter2);
      output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counternodes+counter)=MAFO((long int)1);
	    for(counter=0; counternodes+counter))->number_of_characteristics=nmbr_of_0weights;
	    for(counter=0; counteractual=(*(fuzzy_input+counter))->first;

	    weight=(float)1./nmbr_of_0weights;
	    for(counter=0; counternodes+0))->last=MACl((long int)1);
	         (*(head->nodes+0))->last->name=MAC((long int)20);
		 	(*(head->nodes+0))->last->membership=weight;
		 if ((int)(counter) > 0)
		    { (*(head->nodes+0))->last->ahead=(*(head->nodes+0))->actual;
		      (*(head->nodes+0))->actual->follow=(*(head->nodes+0))->last;
		     }
		 else
		    { (*(head->nodes+0))->first=(*(head->nodes+0))->last;
		      (*(head->nodes+0))->last->ahead=0;
		     };
		 (*(head->nodes+0))->last->follow=0;
		 (*(head->nodes+0))->actual=(*(head->nodes+0))->last;
		 (*(head->nodes+0))->last->set=(fuzzy_object*)(&((*(fuzzy_input+counter))->actual->membership));
		};
	    c1=1;
	    do
	      { for(counter=0; counteractual=(*(fuzzy_input+counter))->actual->follow;
		     (*(head->nodes+c1))->last=MACl((long int)1);
		     (*(head->nodes+c1))->last->name=MAC((long int)20);
		     (*(head->nodes+c1))->last->membership=weight;
		     (*(head->nodes+c1))->last->follow=0;
		     if((int)(counter)>0)
		       { (*(head->nodes+c1))->last->ahead=(*(head->nodes+c1))->actual;
			 (*(head->nodes+c1))->actual->follow=(*(head->nodes+c1))->last;}
		     else
		           { (*(head->nodes+c1))->last->ahead=0;
		              (*(head->nodes+c1))->first= (*(head->nodes+c1))->last; };
		     (*(head->nodes+c1))->last->set=(fuzzy_object*)(&((*(fuzzy_input+counter))->actual->membership));
		     (*(head->nodes+c1))->actual=(*(head->nodes+c1))->last;
		    };
		c1++;
	    } while((int)(c1)nodes=MApFO((long int)number_of_nodes);
	head->Level_number=Level_No;
	head->number_of_nodes=number_of_nodes;
	head->ahead=ahead;
	fill_nodes_for_fuzzy_input_characteristic2node(head,fuzzy_input,number_of_nodes, nmbr_of_0weights);
	head->follow=0;
	return(head);
       }/* ; */

/* *fill_net_fuzzy_input_characteristic2node() ista je kao *fill_net_fuzzy_input() samo {to se ~vorovima prvog sloja mre`e pridru`uju istovrsne osobine fuzzy skupovana ulazu. Nu`an uvjet je da su fuzzy skupovi na ulazu identi~ne gra|e - da su osobine (klase) poredane unutar fuzzy skupa (liste) s identi~nim redoslijedom. Parametar nmbr_of_0weights odgovara broju osobina (klasa) svakog ulaznog fuzzy skupa */
neuron *fill_net_fuzzy_input_characteristic2node(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, char* output_names, float *weights, link_set *fuzzy_input, int nmbr_of_0weights)
    {
      neuron *head;
      int counter=1, counter1, counter2, nmbr_of_net_input= *nmbr_of_nodes;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
     head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_fuzzy_input_characteristic2node(counter, nmbr_of_net_input, fuzzy_input, head->actual_Level, nmbr_of_0weights);
      head->actual_Level=head->first_Level;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
       head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto_fuzzy_input_characteristic2node() ista je kao *fill_net_auto_fuzzy_input() samo {to se ~vorovima prvog sloja mre`e pridru`uju istovrsne osobine fuzzy skupovana ulazu. Nu`an uvjet je da su fuzzy skupovi na ulazu identi~ne gra|e - da su osobine (klase) poredane unutar fuzzy skupa (liste) s identi~nim redoslijedom */
neuron *fill_net_auto_fuzzy_input_characteristic2node( char *name, int number_of_Levels, int nmbr_of_fuzzy_objects_for_input, int number_of_net_output, fuzzy_object* *fuzzy_input)
    {
      int counter, c1, counter1, counter2, *number_of_nodes, nmbr_of_0weights;
      char *output_names;
      float mem, *weights;
      nmbr_of_0weights=nmbr_of_fuzzy_objects_for_input;
      number_of_nodes=MAI((long int)number_of_Levels);
      for((*fuzzy_input)->actual=(*fuzzy_input)->first, *number_of_nodes=0; (*fuzzy_input)->actual!=0; (*fuzzy_input)->actual=(*fuzzy_input)->actual->follow)
      (*number_of_nodes)++;
      for(counter=1, counter2=0 ; counteractual=(*fuzzy_input)->first, *number_of_nodes=0; (*fuzzy_input)->actual!=0; (*fuzzy_input)->actual=(*fuzzy_input)->actual->follow)
      (*number_of_nodes)++;
      counter2=number_of_net_output*(*(nr_of_nodes+number_of_Levels-3));
      for(counter=0; counter<(int)(number_of_Levels)-2;counter++)
	  counter2+=((int)(counter)>0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*nmbr_of_fuzzy_objects_for_input;
        weights=MAF((long int)counter2);
        output_names=MAC((long int)(int)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counternumber_of_nodes=number_of_nodes;
          head->nodes=MApFO((long int)(int) head->number_of_nodes);
          head->Level_number=1;
          head->ahead=0;
          head->follow=0;
          for(c1=0, cel=0; c1first; act_characteristic!=0; act_characteristic=act_characteristic->follow)
                        {
                            *(head->nodes+cel)=MAFO((long int)1);
                            coel=c1*dimension2+c2;
                            (*(fuzzy_input+coel))->actual=(act_characteristic==(*fuzzy_input)->first)?(*(fuzzy_input+coel))->first: (*(fuzzy_input+coel))->actual->follow;
                            (*(head->nodes+cel))->last=MACl((long int)1);
                            (*(head->nodes+cel))->first=(*(head->nodes+cel))->last;
                            (*(head->nodes+cel))->last->ahead=0;
                            (*(head->nodes+cel))->last->name=MAC((long int)1);
                            (*(head->nodes+cel))->last->membership=1.0;
                            (*(head->nodes+cel))->actual=(*(head->nodes+cel))->last;
                            (*(head->nodes+cel))->last->follow=0;
                            (*(head->nodes+cel))->last->set=(fuzzy_object*)(&((*(fuzzy_input+coel))->actual->membership));
                          co1d=((int)(c1)>(int)(overlap)-1)? c1-overlap: 0;
                          co1u=((int)(overlap)<(int)(dimension1)-c1)? c1+overlap: dimension1;
                          co2d=((int)(c2)>(int)(overlap)-1)? c2-overlap: 0;
                          co2u=((int)(overlap)<(int)(dimension2)-c2)? c2+overlap: dimension2;
                          for(co1=co1d; co1actual=(act_characteristic==(*fuzzy_input)->first)?(*(fuzzy_input+coel))->first: (*(fuzzy_input+coel))->actual->follow;
                                          (*(head->nodes+cel))->last=MACl((long int)1);
                                          (*(head->nodes+cel))->last->ahead=(*(head->nodes+cel))->actual;
                                          (*(head->nodes+cel))->actual->follow=(*(head->nodes+cel))->last;
                                          (*(head->nodes+cel))->last->name=MAC((long int)1);
                                          (*(head->nodes+cel))->last->membership=1.0;
                                          (*(head->nodes+cel))->actual=(*(head->nodes+cel))->last;
                                          (*(head->nodes+cel))->last->follow=0;
                                          (*(head->nodes+cel))->last->set=(fuzzy_object*)(&((*(fuzzy_input+coel))->actual->membership));
                                         };
                          fuzzy_object_normalisation(*(head->nodes+cel++));
                         };
                   };
          return(head);
         } /* ; */

/* *fill_net_fuzzy_input_characteristic2node_overlaping() ista je kao *fill_net_fuzzy_input_characteristic2node() samo {to su ulaz u cvor istovrsne klase pripadnog pixela i njegove overlap okoline */
neuron *fill_net_fuzzy_input_characteristic2node_overlaping(char *name, int nmbr_of_Levels, int *nmbr_of_nodes, char* output_names, float *weights, link_set *fuzzy_input, int overlap, int dimension1, int dimension2)
    {
      neuron *head;
      int counter=1, counter1, counter2;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
     head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_fuzzy_input_characteristic2node_overlaping(*nmbr_of_nodes, fuzzy_input, overlap, dimension1, dimension2);
      head->actual_Level=head->first_Level;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
       head->output=net_output(head, output_names);
      return(head);
     }/* ; */

/* *fill_net_auto_fuzzy_input_characteristic2node_overlaping() ista je kao *fill_net_auto_fuzzy_input_characteristic2node() samo {to su ulaz u cvor istovrsne klase pripadnog pixela i njegove overlap okoline */
neuron *fill_net_auto_fuzzy_input_characteristic2node_overlaping( char *name, int number_of_Levels, int number_of_net_output, fuzzy_object* *fuzzy_input, int overlap, int dimension1, int dimension2)
    {
      int counter, c1, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)number_of_Levels);
      for((*fuzzy_input)->actual=(*fuzzy_input)->first, *number_of_nodes=0; (*fuzzy_input)->actual!=0; (*fuzzy_input)->actual=(*fuzzy_input)->actual->follow)
          (*number_of_nodes)++;
       (*number_of_nodes)*=dimension1 * dimension2;
      for(counter=1, counter2=0 ; counteractual=(*fuzzy_input)->first, *number_of_nodes=0; (*fuzzy_input)->actual!=0; (*fuzzy_input)->actual=(*fuzzy_input)->actual->follow)
      (*number_of_nodes)++;
      (*number_of_nodes)*=dimension1 * dimension2;
      counter2=number_of_net_output*(*(nr_of_nodes+number_of_Levels-3));
      for(counter=0; counter<(int)(number_of_Levels)-2;counter++)
	  counter2+=((int)(counter)>0)?(*(nr_of_nodes+counter-1))*(*(nr_of_nodes+counter)):(*(nr_of_nodes+counter))*(*number_of_nodes);
      weights=MAF((long int)counter2);
     output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counterfirst;
	   while(new_characteristic != 0)
	     { act_characteristic=new_characteristic;
	       new_characteristic=act_characteristic->follow;
	       if(act_characteristic->name!=0) testfree((char*) act_characteristic->name);
	       testfree((char*) act_characteristic);
	     };
       testfree((char*) head);
      }/* ; */

/* delete_Level() je funkcija za brisanje sloja pohranjene mre`e kod brisanja mre`e. U slu}aju kada se iz mre`e `eli samo izbaciti neki sloj, treba taj sloj prije brisanja premostiti (preusmjeriti pointere te`ina slijede}eg sloja)! */
void delete_Level(Level *head)
     {
       int counter;
       for(counter=0; counter < head->number_of_nodes; counter++)
	    delete_node((*(head->nodes+counter)));
       testfree((char*)(float*)head->nodes);
       testfree((char*)head);
      }/* ; */

/* delete_neuron() je funkcija za brisanje pohranjene mre`e */
void delete_neuron(neuron *head)
     { for(head->actual_Level=head->first_Level; head->actual_Level!=head->last_Level; head->actual_Level=head->actual_Level->follow)
	    delete_Level(head->actual_Level);
       delete_Level(head->last_Level);
       delete_node(head->output);
       if(head->name!=0) testfree((char*) head->name);
       testfree((char*) head);
      }/* ; */

/* *construct_backwinner() konstruira niz s elementima tipa backwinner i pointerom na njen po~etak i kraj tipa p_backwinner */
p_backwinner *construct_backwinner(neuron *net_head)
		  {
		    int counter;
		    p_backwinner *p_head;
		    backwinner *head, *head_ahead;
		    p_head=MAPBW((long int)1);
		    head=MABW((long int)1);
		    head->ahead=0;
		    head->follow=0;
		    p_head->first=head;
		    for(counter=1; counternumber_of_Levels; counter++)
		       { 
		         head_ahead=head;
		         head=MABW((long int)1);
	     	        head_ahead->follow=head;
   	 	        head->ahead=head_ahead;
   	 	        head->follow=0;
		       };
		    p_head->last=head;
		    return(p_head);
		   }/* ; */

/* fill_backwinner() puni listu pointerima na klase (te`ine) preko kojih je propagirala najve}a pobuda s ulaza na izlaz mre`e */
void fill_backwinner(p_backwinner *head, neuron *net_head)
     {
       backwinner *actual;
       head->last->winner=net_head->output->actual->set;
       head->last->weight=head->last->winner->actual;
       actual=head->last->ahead;
       while(actual)
	    { actual->winner=actual->follow->weight->set;
	      actual->weight=actual->winner->actual;
	      actual=actual->ahead;
	     };
      }/* ; */

/* treasurehold_set() enable setting of treasurehold level  */
void treasurehold_set(float new_value)
       {
           extern float treasureholdadd;
           treasureholdadd=new_value;
        } /* ; */

/* node_output_e_exponent_set() enable setting of node_output_e_exponent value  */
void node_output_e_exponent_set(float new_value)
       {
           extern float node_output_e_exponent;
           node_output_e_exponent=new_value;
        } /* ; */

/* node_out_type() define type of node output */
void node_out_type( char t)
       {
           extern char node_output_type;
           node_output_type=t;
         } /* ; */

/* node_output() omogu}ava nelinearizaciju izlaza iz ~vora i postavljanje praga osjeta, ovisno o sloju u kojem se ~vor nalazi */
float node_output(float value)
      {
                extern float treasureholdadd, node_output_e_exponent;
                extern char node_output_type;
                float noutput, treasurehold ;
                treasurehold = (float)0.0 + treasureholdadd;
                if(value1.0) noutput=1.0; */
                 return(noutput);
       }/* ; */

/* cycle() izvr{ava jedan ciklus rada mre`e */
void cycle(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       float sum;
       net_head->actual_Level=net_head->first_Level;
       sum=0.0;
       for(br=0; bractual_Level->number_of_nodes; br++)
	  { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	    (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
	    (*(net_head->actual_Level->nodes+br))->actual=(*(net_head->actual_Level->nodes+br))->first;
	    do
	      { (*(net_head->actual_Level->nodes+br))->m.notes+=(*((float*)(act_characteristic->set)))*act_characteristic->membership;
		if((*((float*)((*(net_head->actual_Level->nodes+br))->actual->set))) < ((*((float*)(act_characteristic->set)))))
		  (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		act_characteristic=act_characteristic->follow;
	       } while(act_characteristic!=0);
	       (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);
	       sum+=(*(net_head->actual_Level->nodes+br))->m.notes;
	   };
       if(sum<0.01)
         for(br=0; bractual_Level->number_of_nodes; br++)
                (*(net_head->actual_Level->nodes+br))->m.notes+=(float)1./net_head->actual_Level->number_of_nodes;
          else
            for(br=0; bractual_Level->number_of_nodes; br++)
                  (*(net_head->actual_Level->nodes+br))->m.notes*=1/sum;
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    sum=0.0;
	for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	         (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{  (*(net_head->actual_Level->nodes+br))->m.notes += (act_characteristic->set->m.notes * act_characteristic->membership);
		    if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
	            if(net_head->actual_Level->follow!=0)
                                (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);

	            sum+=(*(net_head->actual_Level->nodes+br))->m.notes;
	     };
                  if(sum<0.01)
                    for(br=0; bractual_Level->number_of_nodes; br++)
                          (*(net_head->actual_Level->nodes+br))->m.notes+=(float)1.0/net_head->actual_Level->number_of_nodes;
                    else
                      for(br=0; bractual_Level->number_of_nodes; br++)
                             (*(net_head->actual_Level->nodes+br))->m.notes*=1/sum;
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
	fuzzy_object_normalisation(net_head->output);   /* normalizacija izlaza */
      }/* ; */

/* cycle_correlation() je slicna funkciji cycle() samo sto se svaki ulaz u tezinu nekog cvora 1. sloja mnozi s ulazom pripadnog elementa, tako da za specijalni slucaj tezina dobijamo korelaciju tog elementa; funkcija ima smisla samo za ili ne-fuzzy ulaz ili characteristic2node fuzzy i to u oba slucaja samo ako je mreza generirana s overlaping */
/* uz nju se za ucenje koristi net_learn_correlation ili net_learn_limited_correlation */
void cycle_correlation(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       float sum;
       net_head->actual_Level=net_head->first_Level;
       sum=0.0;
       for(br=0; bractual_Level->number_of_nodes; br++)
	  { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	    (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
	    (*(net_head->actual_Level->nodes+br))->actual=(*(net_head->actual_Level->nodes+br))->first;
	    do
	      { (*(net_head->actual_Level->nodes+br))->m.notes+=(*(net_head->actual_Level->nodes+br))->first->membership*(*((float*)(act_characteristic->set)))*act_characteristic->membership;
		if((*((float*)((*(net_head->actual_Level->nodes+br))->actual->set))) < ((*((float*)(act_characteristic->set)))))
		  (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		act_characteristic=act_characteristic->follow;
	       } while(act_characteristic!=0);
	       (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);
	       sum+=(*(net_head->actual_Level->nodes+br))->m.notes;
	   };
       if(sum<0.01)
         for(br=0; bractual_Level->number_of_nodes; br++)
                (*(net_head->actual_Level->nodes+br))->m.notes+=(float)1./net_head->actual_Level->number_of_nodes;
          else
            for(br=0; bractual_Level->number_of_nodes; br++)
                  (*(net_head->actual_Level->nodes+br))->m.notes*=1/sum;
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    sum=0.0;
	for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	         (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{  (*(net_head->actual_Level->nodes+br))->m.notes += (act_characteristic->set->m.notes * act_characteristic->membership);
		    if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
	            if(net_head->actual_Level->follow!=0)
                                (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);

	            sum+=(*(net_head->actual_Level->nodes+br))->m.notes;
	     };
                  if(sum<0.01)
                    for(br=0; bractual_Level->number_of_nodes; br++)
                          (*(net_head->actual_Level->nodes+br))->m.notes+=(float)1.0/net_head->actual_Level->number_of_nodes;
                    else
                      for(br=0; bractual_Level->number_of_nodes; br++)
                             (*(net_head->actual_Level->nodes+br))->m.notes*=1/sum;
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
	fuzzy_object_normalisation(net_head->output);   /* normalizacija izlaza */
      }/* ; */

/* set_rude() setting rude coefficients */
void set_rude( float rwT, float rwF, float rnT, float rnF)
       {
         extern float rude_w_T, rude_w_F, rude_n_T, rude_n_F;
         rude_w_T = rwT;
         rude_w_F = rwF;
         rude_n_T = rnT;
         rude_n_F = rnF;
       } /* ; */

/* set_fine() setting fine coefficients */
void set_fine( float fwT, float fwF, float fnT, float fnF)
       {
         extern float fine_w_T, fine_w_F, fine_n_T, fine_n_F;
         fine_w_T = fwT;
         fine_w_F = fwF;
         fine_n_T = fnT;
         fine_n_F = fnF;
       } /* ; */
    
/* rude_koef_learn() je funkcija koja puni koeficijente za ucenje visokim vrijednostima, a oni se prvenstveno upotrebljavaju kod prvog koraka ucenja */
void rude_koef_learn(koef_learn *k_l)
       {
         k_l->winner_T=rude_w_T;
         k_l->winner_F=rude_w_F;
         k_l->node_T=rude_n_T;
         k_l->node_F=rude_n_F;
        } /* ; */

/* fine_koef_learn() je funkcija koja puni koeficijente za ucenje niskim vrijednostima, a oni se prvenstveno upotrebljavaju kod drugog koraka ucenja */
void fine_koef_learn(koef_learn *k_l)
       {
         k_l->winner_T=fine_w_T;
         k_l->winner_F= fine_w_F;
         k_l->node_T=fine_n_T;
         k_l->node_F=fine_n_F;
        } /* ; */

/* F_normalisation() se poziva u slucaju pogresnog odgovora i djeluje kao prevencija za slucaj kada su sve tezine osim pobjednicke 0 */
void F_normalisation(fuzzy_object*head)
     {
       characteristic* act_characteristic;
       for(act_characteristic=head->first; act_characteristic!=0; act_characteristic=act_characteristic->follow)
 
          if(act_characteristic->membership<(float)0.0001) act_characteristic->membership=(float)0.0001;
      } /* ; */

/* node_learn() je funkcija koja se poziva u net_learn, a svrha joj je u~enje (ispravljanje te`ina) danog ~vora ovisno o vrsti dobijenog odgovora (to~an ili kriv) */
void node_learn(fuzzy_object*head, enum Bool true_output, koef_learn *k_l)
     {
       if (true_output==T)
	 head->actual->membership>0.0? head->actual->membership*k_l->node_T: 0.0001*k_l->node_T; /* pobjedni~ku te`inu uve~ajemo */
       else
	 { 
           head->actual->membership/= k_l->node_F; /* pobjedni~ku te`inu umanjujemo */
           F_normalisation(head);
          };  
       fuzzy_object_normalisation(head);        /* postavljaju}i sumu svih te`ina na 1.0 djelujemo i na ostale te`ine prema tom ~voru koje su izgubile */
      }/* ; */

/* node_winner_learn() je funkcija koja se poziva u net_learn, a svrha joj je u~enje (ispravljanje te`ina) danog ~vora, koji se nalazi na putu pobjedni~ke propagacije najve}eg izlaza, ovisno o vrsti dobijenog odgovora (to~an ili kriv) */
void node_winner_learn(backwinner *head, enum Bool true_output, koef_learn *k_l)
     {
       if (true_output==T)
	head->weight->membership >0.0? head->weight->membership* k_l->winner_T: 0.0001* k_l->winner_T; /* pobjedni~ku te`inu uve~ajemo */
       else
	 {
           head->weight->membership /= k_l->winner_F; /* pobjedni~ku te`inu umanjujemo */
           F_normalisation(head->winner);
	 };
       fuzzy_object_normalisation(head->winner);     /* postavljaju}i sumu svih te`ina na 1.0 djelujemo i na ostale te`ine prema tom ~voru koje su izgubile */
      }/* ; */

/* net_learn() je funkcija za u~enje mre`e, a *true_name je vektor u koji je zapisano ime klase (osobine) u izlaznom fuzzy skupu (net_head->output); glavna ispravka se vr{i nad te`inama na koje ukazuje struktura backwinner, a manje nad te`inama svakog sloja */
void net_learn(neuron *net_head, char *true_name, p_backwinner *head_p_backwinner, koef_learn *k_l)
     {
       int c1;
       enum Bool true_output;
       backwinner *actual_backwinner;
       fill_backwinner(head_p_backwinner, net_head);
       true_output=check_name(net_head->output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	  } while(true_output==F);
      } /* ; */

/* net_learn_correlation() je slicna funkciji net_learn() samo sto  poziva cycle_correlation() mjesto cycle() */
void net_learn_correlation(neuron *net_head, char *true_name, p_backwinner *head_p_backwinner, koef_learn *k_l)
     {
       int c1;
       enum Bool true_output;
       backwinner *actual_backwinner;
       fill_backwinner(head_p_backwinner, net_head);
       true_output=check_name(net_head->output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle_correlation(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	  } while(true_output==F);
      } /* ; */

/* net_learn_limited() je funkcija za u~enje mre`e slicna net_learn(), s jedinom razlikom sto se ucenje nastavlja i ako je odgovor tocan sve dok je clanstvo u tom odgovoru < limit, limit je realan broj izmedu 0.0 i 1.0 */
void net_learn_limited(neuron *net_head, char *true_name, p_backwinner *head_p_backwinner, koef_learn *k_l, float limit)
     {
       int c1;
       enum Bool true_output, lim=F;
       backwinner *actual_backwinner;
       fill_backwinner(head_p_backwinner, net_head);
       true_output=check_name(net_head->output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	   
	   if(true_output==T)
	   
	                                  lim=(net_head->output->actual->membership > limit)? F: T;
	  } while(true_output==F || lim==F);
      } /* ; */

/* net_learn_limited_correlation() je slicna funkciji net_learn_limited() samo sto  poziva cycle_correlation() mjesto cycle() */
void net_learn_limited_correlation(neuron *net_head, char *true_name, p_backwinner *head_p_backwinner, koef_learn *k_l, float limit)
     {
       int c1;
       enum Bool true_output, lim=F;
       backwinner *actual_backwinner;
       fill_backwinner(head_p_backwinner, net_head);
       true_output=check_name(net_head->output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle_correlation(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	   
	   if(true_output==T)
	   
	                                  lim=(net_head->output->actual->membership > limit)? F: T;
	  } while(true_output==F || lim==F);
      } /* ; */

/* net_learn_iterationlimit() slicna je net_learn() samo sto je broj iteracija ogranicen */
void net_learn_iterationlimit(neuron *net_head, char *true_name, p_backwinner *head_p_backwinner, koef_learn *k_l, int iterationlimit)
     {
       int c1, iteraction=0;
       enum Bool true_output;
       backwinner *actual_backwinner;
       fill_backwinner(head_p_backwinner, net_head);
       true_output=check_name(net_head->output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	  } while((true_output==F)&&(iteraction++output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle_correlation(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	  } while((true_output==F)&&(iteraction++output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	   
	   if(true_output==T)
	   
	                                  lim=(net_head->output->actual->membership > limit)? F: T;
	  } while((true_output==F || lim==F)&&(iteraction++output->actual->name, true_name);
       do
	 { for(net_head->actual_Level=net_head->first_Level; net_head->actual_Level!=0; net_head->actual_Level=net_head->actual_Level->follow)
	      for(c1=0; c1actual_Level->number_of_nodes; c1++)
		 node_learn((*(net_head->actual_Level->nodes+c1)), true_output, k_l);
	   actual_backwinner=head_p_backwinner->first;
	   do
	     { node_winner_learn(actual_backwinner, true_output, k_l);
	       actual_backwinner=actual_backwinner->follow;
	      } while(actual_backwinner!=0);
	   cycle_correlation(net_head);
	   fill_backwinner(head_p_backwinner, net_head);
	   true_output=check_name(net_head->output->actual->name, true_name);
	   
	   if(true_output==T)
	   
	                                  lim=(net_head->output->actual->membership > limit)? F: T;
	  } while((true_output==F || lim==F)&&(iteraction++number_of_characteristics=0;
	    head->last=(characteristic*)&(fuzzy_input->membership);
	    head->actual=0;
	    head->first=0;
	    head->m.notes=0.0;
	    return(head);
	   }/* ; */

/* *fill_Level1_fuzzy_input2node() is similar to *fill_Level1_fuzzy_input() with difference that the first layer just copy membership of each characteristic into node (its m.notes) that means each input's characteristic is being mapped onto its node */
Level *fill_Level1_fuzzy_input2node(int Level_No, int number_of_nodes, int nmbr_of_net_input, link_set *fuzzy_input, Level *ahead)
      {
	int counter, c1;
	Level *head;
	head=MALe((long int)1);
	head->nodes=MApFO((long int)number_of_nodes);
	head->Level_number=Level_No;
	head->number_of_nodes=number_of_nodes;
	head->ahead=ahead;
	for(counter=0, c1=0; counteractual=(*(fuzzy_input+counter))->first; (*(fuzzy_input+counter))->actual!=0; (*(fuzzy_input+counter))->actual=(*(fuzzy_input+counter))->actual->follow)
	         (*(head->nodes+c1++))=fill_node_for_fuzzy_input2node((*(fuzzy_input+counter))->actual);
	head->follow=0;
	return(head);
       }/* ; */

/* *fill_net_fuzzy_input2node() is similar to *fill_net_fuzzy_input() with difference that the first layer just copy membership of each characteristic into node (its m.notes) that means each input's characteristic is being mapped onto its node */
neuron *fill_net_fuzzy_input2node(char *name, int nmbr_of_Levels, int nmbr_of_net_input, int *nmbr_of_nodes, char* output_names, float *weights, link_set *fuzzy_input)
    {
      neuron *head;
      int counter=1, counter1, counter2;
      head=MAN((long int)1);
      head->number_of_Levels=nmbr_of_Levels;
      head->actual_Level=0;
     head->name=MAC((long int)100);
      head->name=read_name(head->name,name);
      head->first_Level=fill_Level1_fuzzy_input2node(counter, *nmbr_of_nodes, nmbr_of_net_input, fuzzy_input, head->actual_Level);
      head->actual_Level=head->first_Level;
      for(counter=0; counter<(int)(head->number_of_Levels)-1; counter++)
	 { head->last_Level=fill_Level((counter+2), *(nmbr_of_nodes+counter), *(nmbr_of_nodes+counter+1), weights, head->actual_Level);
	   for(counter1=0; counter1<*(nmbr_of_nodes+counter+1); counter1++)
	      for(counter2=0, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->first; (counter2<*(nmbr_of_nodes+counter))&&((*(head->last_Level->nodes+counter1))->actual!=0); counter2++, (*(head->last_Level->nodes+counter1))->actual=(*(head->last_Level->nodes+counter1))->actual->follow)
		 (*(head->last_Level->nodes+counter1))->actual->set=(*(head->actual_Level->nodes+counter2));
	   weights+=(*(nmbr_of_nodes+counter+1))*(*(nmbr_of_nodes+counter));
	   head->actual_Level->follow=head->last_Level;
	   head->actual_Level=head->last_Level;
	  };
      head->output=net_output(head, output_names);
      testfree((char*)weights);
      return(head);
     }/* ; */

/* *fill_net_auto_def_Lev_fuzzy_input2node() is similar to *fill_net_auto_def_Lev_fuzzy_input() with difference that the first layer just copy membership of each characteristic into node (its m.notes) that means each input's characteristic is being mapped onto its node */
neuron *fill_net_auto_def_Lev_fuzzy_input2node( char *name, int number_of_Levels, int nmbr_of_fuzzy_objects_for_input, int number_of_net_output, fuzzy_object **fuzzy_input, int *nr_of_nodes)
    {
      int counter, c1, counter1, counter2, *number_of_nodes;
      char *output_names;
      float mem, *weights;
      number_of_nodes=MAI((long int)number_of_Levels);
      *number_of_nodes=0;
      for(counter=0; counteractual=(*(fuzzy_input+counter))->first; (*(fuzzy_input+counter))->actual!=0; (*(fuzzy_input+counter))->actual=(*(fuzzy_input+counter))->actual->follow)
               (*number_of_nodes)++;
      counter2=number_of_net_output*(*(nr_of_nodes+number_of_Levels-3))+(*(nr_of_nodes+number_of_Levels-3))*(*number_of_nodes);
      weights=MAF((long int)counter2);
     output_names=MAC((long int)(unsigned)(7+2*number_of_net_output));
      *(output_names)='O';
      *(output_names+1)='U';
      *(output_names+2)='T';
      *(output_names+3)='P';
      *(output_names+4)='U';
      *(output_names+5)='T';
      *(output_names+6)=' ';
      for(counter=0; counternumber_of_objects;
	      head=MApFO((long int)nr_objects);
	      for(i=0, k=0; inumber_of_objects; j++)
	              *(head+k++)=*((*(input+i))->objects+j);
	      return(head);
	     } /* ; */

/* **fuzzy_input_for_fuzzy_state_neural_network() forms state fuzzy set and then organises pointers on all fuzzy objects from fuzzy sets (input+statre) into vector*/
/* number_of_fuzzy_sets_in_input is only number of fuzzy sets pointed by input, while state fuzzy set is being added later in function */
fuzzy_object **fuzzy_input_for_fuzzy_state_neural_network(fuzzy_set **input, int number_of_fuzzy_sets_in_input, int number_of_states, int characteristics_per_state)
	    {
	      int s, c, *nmbr_characteristics;
	      char *f_set_name, **names;
	      float **memberships;
	      f_set_name=MAC((long int)6);
	      names=MApC((long int)number_of_states);
	      memberships=MApF(number_of_states);
	      nmbr_characteristics=MAI((long int)number_of_states);
	      *(f_set_name+0)='S';
	      *(f_set_name+1)='T';
	      *(f_set_name+2)='A';
	      *(f_set_name+3)='T';
	      *(f_set_name+4)='E';
	      *(f_set_name+5)=' ';
	      for(s=0; snumber_of_states=number_of_states;
		              head->characteristics_per_state=number_of_characteristics_per_state;
		              head->states=MApFO((long int)(int)head->number_of_states);
		              input_objects=fuzzy_input_for_fuzzy_state_neural_network(input, number_of_fuzzy_sets_in_input, head->number_of_states, head->characteristics_per_state);
		              for(i=0, nr_input_objects=0; i<(int)(number_of_fuzzy_sets_in_input)+1; i++)
		              	nr_input_objects+=(*(input+i))->number_of_objects;
		              for(i=0; inumber_of_states; i++)
		                  *(head->states+head->number_of_states-i-1)=*(input_objects+nr_input_objects-i-1);
		              nr_nodes=MAI((long int)1);
		              *nr_nodes=head->number_of_states*head->characteristics_per_state;
		              head->network=fill_net_auto_def_Lev_fuzzy_input2node(name, 3, nr_input_objects, number_of_net_output, input_objects, nr_nodes);
		              for(i=0; i<*nr_nodes; i++)
  		                  {
  		                    (*(head->network->first_Level->nodes+head->network->first_Level->number_of_nodes-i-1))->last=(characteristic*)&((*(head->network->first_Level->follow->nodes+head->network->first_Level->follow->number_of_nodes-i-1))->m.notes);
  		                    *(head->states+*nr_nodes-i-1)=*(head->network->first_Level->nodes+head->network->first_Level->number_of_nodes-i-1);
  		                    };
  		              delete_fuzzy_set(*(input+number_of_fuzzy_sets_in_input));
  		              testfree((char*)input_objects);
  		              testfree((char*)nr_nodes);
  		              return(head);
  		             } /* ; */

/* delete_fuzzy_state_neural_network() deletes structure fuzzy_state_neural_network with all its elements (including neural network) */
void delete_fuzzy_state_neural_network(fuzzy_state_neural_network *head)
      {
        delete_neuron(head->network);
        testfree((char*)head->states);
        testfree((char*)head);
       } /* ; */

/* state_normalisation() makes sum of all nodes presenting characteristics of the same state is equall 1.0 */
void state_normalisation(fuzzy_state_neural_network *head)
     {
       int i,j;
       float sum;
       for(i=0, j=0, sum=0.0; inetwork->first_Level->follow->number_of_nodes; i++)
	 {
	   sum+=(*(head->network->first_Level->follow->nodes+i))->m.notes;
	   if(++j==head->characteristics_per_state)
	     {
	       for(j=0; jcharacteristics_per_state; j++)
		 (*(head->network->first_Level->follow->nodes+i-j))->m.notes=(sum>(float)0.0)? (*(head->network->first_Level->follow->nodes+i-j))->m.notes/sum: (float)1.0/head->characteristics_per_state;
	       sum=0.0;
	       j=0;
	     };
	 };
     } /* ; */

/* state_reset() reset all nodes presenting characteristics of states on 0.0 */
void state_reset(fuzzy_state_neural_network *head)
     {
       int i;
       for(i=0; inetwork->first_Level->follow->number_of_nodes; i++)
       	(*(head->network->first_Level->follow->nodes+i))->m.notes=0.0;
     } /* ; */

/* cycle_input2node() izvr{ava jedan ciklus rada mre`e */
void cycle_input2node(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       net_head->actual_Level=net_head->first_Level;
       for(br=0; bractual_Level->number_of_nodes; br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=*((float*)((*(net_head->actual_Level->nodes+br))->last));
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    
                 for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	         (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{  (*(net_head->actual_Level->nodes+br))->m.notes += (act_characteristic->set->m.notes * act_characteristic->membership);
		    if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
		  /*	            if(net_head->actual_Level->follow!=0) */
                  (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);
	     };
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
        fuzzy_object_normalisation(net_head->output);  /* normalizacija izlaza */
      }/* ; */

      
/* cycle_fsnn_without_feedback() izvr{ava jedan ciklus rada mre`e FSNN gdje se ne ucitava s ulaza koji pokazuju na drugi sloj mreze, tj. eliminira se povratna veza */
void cycle_fsnn_without_feedback(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       net_head->actual_Level=net_head->first_Level;
       for(br=0; bractual_Level->number_of_nodes-net_head->actual_Level->follow->number_of_nodes; br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=*((float*)((*(net_head->actual_Level->nodes+br))->last));
       for(br=net_head->actual_Level->number_of_nodes-net_head->actual_Level->follow->number_of_nodes; bractual_Level->number_of_nodes; br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    
                 for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
	         (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{  (*(net_head->actual_Level->nodes+br))->m.notes += (act_characteristic->set->m.notes * act_characteristic->membership);
		    if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
		  /* if(net_head->actual_Level->follow!=0) */
                                (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->m.notes);
	     };
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
        fuzzy_object_normalisation(net_head->output);  /* normalizacija izlaza */
      }/* ; */
      

/* cycle_input2node_Max() is the same as cycle_input2node() except instead of sum in calculation of node output Maximum input is proceeded into function "node_output()" */
void cycle_input2node_Max(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       net_head->actual_Level=net_head->first_Level;
       for(br=0; bractual_Level->number_of_nodes; br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=*((float*)((*(net_head->actual_Level->nodes+br))->last));
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    
                 for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{
		    if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
		  /*	            if(net_head->actual_Level->follow!=0) */
                  (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->actual->set->m.notes*(*(net_head->actual_Level->nodes+br))->actual->membership);
	     };
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
       /* fuzzy_object_normalisation(net_head->output);  */ /* normalizacija izlaza */
      }/* ; */

      
/* cycle_fsnn_without_feedback_Max() is the same as cycle_fsnn_without_feedback() except instead of sum in calculation of node output Maximum input is proceeded into function "node_output()" */
void cycle_fsnn_without_feedback_Max(neuron *net_head)
     {
       characteristic *act_characteristic;
       int br;
       net_head->actual_Level=net_head->first_Level;
       for(br=0; bractual_Level->number_of_nodes-(int)(net_head->actual_Level->follow->number_of_nodes); br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=*((float*)((*(net_head->actual_Level->nodes+br))->last));
       for(br=net_head->actual_Level->number_of_nodes-net_head->actual_Level->follow->number_of_nodes; bractual_Level->number_of_nodes; br++)
           (*(net_head->actual_Level->nodes+br))->m.notes=0.0;
       net_head->actual_Level=net_head->actual_Level->follow;
       do
          {    
                 for(br=0; bractual_Level->number_of_nodes; br++)
	      { act_characteristic=(*(net_head->actual_Level->nodes+br))->first;
 	         (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
	          do
		{  if((*(net_head->actual_Level->nodes+br))->actual->set->m.notesset->m.notes)
		      (*(net_head->actual_Level->nodes+br))->actual=act_characteristic;
		    act_characteristic=act_characteristic->follow;
		} while(act_characteristic!=0);
		  /* if(net_head->actual_Level->follow!=0) */
                                (*(net_head->actual_Level->nodes+br))->m.notes=node_output((*(net_head->actual_Level->nodes+br))->actual->set->m.notes*(*(net_head->actual_Level->nodes+br))->actual->membership);
	     };
      	   net_head->actual_Level=net_head->actual_Level->follow;
	  } while(net_head->actual_Level!=0);
       act_characteristic=net_head->output->first;
       net_head->output->actual=act_characteristic;
       do
	 { act_characteristic->membership=act_characteristic->set->m.notes;
	   if(net_head->output->actual->set->m.notesmembership)
	     net_head->output->actual=act_characteristic;
	   act_characteristic=act_characteristic->follow;
	  } while(act_characteristic!=0);
        fuzzy_object_normalisation(net_head->output);  /* normalizacija izlaza */
      }/* ; */
      

/* reset_BP_correction_memory_input2node() only resets weight corrections for each weight on 0.0 without affecting anything else. */
void reset_BP_correction_memory_input2node(BP_correction_memory *head)
       {
         int i,j;
         for(i=0; i<(int)(head->network->number_of_Levels)-1; i++)
              for(j=0; j<*(head->number_of_weights_per_Level+i); j++)
                   *(*(head->weight_correction+i)+j)=0.0;
        } /* ; */

/* *BP_correction_memory_setup_input2node() forms and fills structure BP_correction_memory and setting correction weights on 0.0. "*nn" is pointer on neural network BP algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
BP_correction_memory *BP_correction_memory_setup_input2node(neuron *nn, float learning_rate)
		     {
		       Level *act_Level;
		       int i, j, k;
		       BP_correction_memory *head;
		       head=MABPCM((long int)1);
		       head->learning_rate=learning_rate;
		       head->network=nn;
		       head->weight_pointer=MAppCl((long int)(int)(head->network->number_of_Levels-1));
		       head->weight_correction=MApF((int)(head->network->number_of_Levels-1));
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->network->number_of_Levels-1));
		       for(i=0, act_Level=head->network->first_Level->follow; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		            };
		        return(head);
		       } /* ; */

/* delete_BP_correction_memory_input2node() deletes BP_correction_memory pointed by "*head" but not neuron pointed by its element 'neuron* network'. "*head" is pointer on structure BP_correction_memory to be deleted. */
void delete_BP_correction_memory_input2node(BP_correction_memory *head)
       {
         int i;
         for(i=0; i<(int)(head->network->number_of_Levels)-1; i++)
             {
               testfree((char*)(*(head->weight_correction+i)));
               testfree((char*)(*(head->weight_pointer+i)));
              };
         testfree((char*)head->weight_correction);
         testfree((char*)head->weight_pointer);
         testfree((char*)head->number_of_weights_per_Level);
         testfree((char*)head);
        } /* ; */

/* node_output_derivation() calculate (usually non-linear) function, gotten as the first derivation of node output (usually non-linear) function, inported as variable "value", for use in BP algorithm based learning. */
float node_output_derivation(float value)
       {
         extern float treasureholdadd, node_output_e_exponent;
         extern char node_output_type;
         float output, treasurehold=treasureholdadd;
         switch(node_output_type)
                  {
                    case 'l': output=1.0; /* (value<=treasurehold)? 0.5*treasurehold: (value>1.0)? 1.0: value; */
			      /* in fact condition should be (value==0.0)? but because of non-existency of 0.0 in floating point arithmetic and shape of node output function previous condition fit better (node_output(treasurehold)=treasurehold */
		              break;
                    case 'e': if(value>=(float)1.0) value=(float)0.999999;
		              output=/* (value<=treasurehold)? 0.5*treasurehold: */  node_output_e_exponent*value*(1.0-value);
			      /* in fact condition should be (value==0.0)? but because of non-existency of 0.0 in floating point arithmetic and shape of node output function previous condition fit better (node_output(treasurehold)>OR=treasurehold */
		              break;
                    case 'E': if(value>=(float)1.0) value=(float)0.999999;
		              output=/* (value<=treasurehold)? 0.5*treasurehold: */ -(node_output_e_exponent/(float)2.0)*(value*value-(float)1.0);
			      /* in fact condition should be (value==0.0)? but because of non-existency of 0.0 in floating point arithmetic and shape of node output function previous condition fit better (node_output(treasurehold)>OR=treasurehold */
		              break;
		              break;
                    case 't': if(value>=(float)1.0) value=(float)0.999999;
		              output=(value<=treasurehold)? (float)0.5*treasurehold: (float)((float)0.5*M_PI*((float)1.0-value));
			      /* in fact condition should be (value==0.0)? but because of non-existency of 0.0 in floating point arithmetic and shape of node output function previous condition fit better (node_output(treasurehold)>OR=treasurehold */
		              break; 
                    case 'T': if(value>=(float)1.0) value=(float)0.999999;
		              output=(value<=treasurehold)? (float)0.5*treasurehold: (float)(M_PI*((float)1.0-value));
			      /* in fact condition should be (value==0.0)? but because of non-existency of 0.0 in floating point arithmetic and shape of node output function previous condition fit better (node_output(treasurehold)>OR=treasurehold */
		              break; 
                    default:  output=value;
		              break;
                   } /* ; */
         return(output);
        }/* ; */

/* BP_learn_cycle_input2node() calculates weight corrections for neural network pointed inside structure BP_correction_memory pointed by "*memory" according vector of expected answers. Network output is red from last Level's node's m.notes rather than from output fuzzy set. "*memory" is pointer on BP_correction_memory consists pointer on neural network and used to store weight corrections (by incrementing previous weight correction for each weight), "*expected_output" is pointer on expected value of each node output (equivalent to output fuzzy set each characteristic membership) in the same order as characteristics in output fuzzy set (as last Level nodes). */
/* NOTE: BP_learn_cycle_input2node() doesn't correct weights. To do so one needs to call function BP_weight_correction_input2node() after this. */
/* Used BackPropagation algorithm is from IEEE "Neural Networks Theoretical Foundations and Analysis", pp.211-221, article "Backpropagation Through Time: What It Does and How to Do It" by P.J. Werbos */
void BP_learn_cycle_input2node(BP_correction_memory *memory, float *expected_output)
      {
        int i, j, k;
        float **neti, *new_state_value;
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        /* in this case neural network has 3 Levels: 1st is input and previous state, 2nd is actual state, 3rd is output. "*new_state_value" vector memorises calculated values of actual state vector according BP algorithm. Actual state values are later repleced with ones stored in "*new_state_value" vector so error in weight calculation doesn't propagate into next step (next "cycle_input2node"). */
        neti=MApF((int)(memory->network->number_of_Levels-1));
        new_state_value=MAF((long int)(int)memory->network->first_Level->follow->number_of_nodes);
        for(i=0, memory->network->actual_Level=memory->network->first_Level->follow; i<(int)(memory->network->number_of_Levels)-1; i++, memory->network->actual_Level=memory->network->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->network->actual_Level->number_of_nodes);
        memory->network->actual_Level=memory->network->last_Level;
        j=memory->network->number_of_Levels-2;
        for(i=0; inetwork->actual_Level->number_of_nodes; i++)
            *(*(neti+j)+i)=node_output_derivation((*(memory->network->actual_Level->nodes+i))->m.notes)*((*(memory->network->actual_Level->nodes+i))->m.notes-(*(expected_output+i)));
        j--;
        memory->network->actual_Level=memory->network->actual_Level->ahead;
        do
          {
            for(i=0; inetwork->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knetwork->actual_Level->follow->number_of_nodes; k++)
                      {
                        for((*(memory->network->actual_Level->follow->nodes+k))->actual=(*(memory->network->actual_Level->follow->nodes+k))->first; (*(memory->network->actual_Level->follow->nodes+k))->actual->set!=*(memory->network->actual_Level->nodes+i); (*(memory->network->actual_Level->follow->nodes+k))->actual=(*(memory->network->actual_Level->follow->nodes+k))->actual->follow);
                        *(*(neti+j)+i)+=(*(memory->network->actual_Level->follow->nodes+k))->actual->membership*(*(*(neti+j+1)+k));
                       };
                  if(memory->network->actual_Level==memory->network->first_Level->follow) *(new_state_value+i)=*(*(neti+j)+i);
                  *(*(neti+j)+i)*=node_output_derivation((*(memory->network->actual_Level->nodes+i))->m.notes);
                 };
            j--;
            memory->network->actual_Level=memory->network->actual_Level->ahead;
           }
        while(memory->network->actual_Level!=memory->network->first_Level);
        for(j=0, memory->network->actual_Level=memory->network->first_Level->follow; j<(int)(memory->network->number_of_Levels)-1; j++, memory->network->actual_Level=memory->network->actual_Level->follow)
            for(i=0, k=0; inetwork->actual_Level->number_of_nodes; i++)
                for((*(memory->network->actual_Level->nodes+i))->actual=(*(memory->network->actual_Level->nodes+i))->first; (*(memory->network->actual_Level->nodes+i))->actual!=0; (*(memory->network->actual_Level->nodes+i))->actual=(*(memory->network->actual_Level->nodes+i))->actual->follow)
                    (*(*(memory->weight_correction+j)+k++))+=*(*(neti+j)+i)*(*(memory->network->actual_Level->nodes+i))->actual->set->m.notes;
	for(j=0; jnetwork->first_Level->follow->number_of_nodes; j++)
            (*(memory->network->first_Level->follow->nodes+j))->m.notes=node_output(*(new_state_value+j));
    for(i=0, memory->network->actual_Level=memory->network->first_Level->follow; i<(int)(memory->network->number_of_Levels)-1; i++, memory->network->actual_Level=memory->network->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    testfree((char*)new_state_value);
   } /* ; */

/* BP_learn_cycle_fsnn_without_feedback() is similar to BP_learn_cycle_input2node() with the difference inputs correspond previous state (pointing to second Level's nodes) are not taken in calculation. */
/* NOTE: BP_learn_cycle_fsnn_without_feedback() doesn't correct weights. To do so one needs to call function BP_weight_correction_input2node() after this. */
/* Used BackPropagation algorithm is from IEEE "Neural Networks Theoretical Foundations and Analysis", pp.211-221, article "Backpropagation Through Time: What It Does and How to Do It" by P.J. Werbos */
void BP_learn_cycle_fsnn_without_feedback(BP_correction_memory *memory, float *expected_output)
      {
        int i, j, k, l;
        float **neti;
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        /* in this case neural network has 3 Levels: 1st is input and previous state, 2nd is actual state, 3rd is output. "*new_state_value" vector memorises calculated values of actual state vector according BP algorithm. Actual state values are later repleced with ones stored in "*new_state_value" vector so error in weight calculation doesn't propagate into next step (next "cycle_input2node"). */
        neti=MApF((int)(memory->network->number_of_Levels-1));
        for(i=0, memory->network->actual_Level=memory->network->first_Level->follow; i<(int)(memory->network->number_of_Levels)-1; i++, memory->network->actual_Level=memory->network->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->network->actual_Level->number_of_nodes);
        memory->network->actual_Level=memory->network->last_Level;
        j=memory->network->number_of_Levels-2;
        for(i=0; inetwork->actual_Level->number_of_nodes; i++)
            *(*(neti+j)+i)=node_output_derivation((*(memory->network->actual_Level->nodes+i))->m.notes)*((*(memory->network->actual_Level->nodes+i))->m.notes-(*(expected_output+i)));
        j--;
        memory->network->actual_Level=memory->network->actual_Level->ahead;
        do
          {
            for(i=0; inetwork->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knetwork->actual_Level->follow->number_of_nodes; k++)
                      {
                        for((*(memory->network->actual_Level->follow->nodes+k))->actual=(*(memory->network->actual_Level->follow->nodes+k))->first; (*(memory->network->actual_Level->follow->nodes+k))->actual->set!=*(memory->network->actual_Level->nodes+i); (*(memory->network->actual_Level->follow->nodes+k))->actual=(*(memory->network->actual_Level->follow->nodes+k))->actual->follow);
                        *(*(neti+j)+i)+=(*(memory->network->actual_Level->follow->nodes+k))->actual->membership*(*(*(neti+j+1)+k));
                       };
                  *(*(neti+j)+i)*=node_output_derivation((*(memory->network->actual_Level->nodes+i))->m.notes);
                 };
            j--;
            memory->network->actual_Level=memory->network->actual_Level->ahead;
           }
        while(memory->network->actual_Level!=memory->network->first_Level);
        for(j=0, memory->network->actual_Level=memory->network->first_Level->follow; j<(int)(memory->network->number_of_Levels)-1; j++, memory->network->actual_Level=memory->network->actual_Level->follow)
            for(i=0, k=0; inetwork->actual_Level->number_of_nodes; i++)
                for(l=1, (*(memory->network->actual_Level->nodes+i))->actual=(*(memory->network->actual_Level->nodes+i))->first; (*(memory->network->actual_Level->nodes+i))->actual!=0; (*(memory->network->actual_Level->nodes+i))->actual=(*(memory->network->actual_Level->nodes+i))->actual->follow, l++)
                    if((memory->network->actual_Level==memory->network->first_Level->follow)&&(l>memory->network->first_Level->number_of_nodes-memory->network->first_Level->follow->number_of_nodes))
                    	(*(*(memory->weight_correction+j)+k++))+=0.0;
                    else
                    (*(*(memory->weight_correction+j)+k++))+=*(*(neti+j)+i)*(*(memory->network->actual_Level->nodes+i))->actual->set->m.notes;
    for(i=0, memory->network->actual_Level=memory->network->first_Level->follow; i<(int)(memory->network->number_of_Levels)-1; i++, memory->network->actual_Level=memory->network->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
   } /* ; */

/* BP_weight_correction_input2node() changes weight of neural network pointed in structure "*memory" according structure BP_correction_memory, pointed by "*memory", elements learning_rate and weight corrections stored in element weight_correction. "*memory" points on structure BP_correction_memory consists information of neural network whose weights will be updated as well as information of weights update and learning coefficient (learning_rate). */
/* NOTE: BP_weight_correction_input2node() doesn't reset weights correction on 0.0. To perform that one needs to call function reset_BP_correction_memory_input2node() after this function. */
void BP_weight_correction_input2node(BP_correction_memory *memory)
       {
         int i, j;
         for(i=0; i<(int)(memory->network->number_of_Levels)-1; i++)
             for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
	           (*(*(memory->weight_pointer+i)+j))->membership=(memory->learning_rate*(*(*(memory->weight_correction+i)+j))>(*(*(memory->weight_pointer+i)+j))->membership)+1.? (float)-1.:(memory->learning_rate*(*(*(memory->weight_correction+i)+j))<(*(*(memory->weight_pointer+i)+j))->membership-1.0)? (float)1.0:(*(*(memory->weight_pointer+i)+j))->membership-memory->learning_rate*(*(*(memory->weight_correction+i)+j));
        } /* ; */

/* float abs_sum_BP_weight_corrections() calculate absolute sum (sum of absolute values) of all weight corrections */
float abs_sum_BP_weight_corrections(BP_correction_memory *memory)
       {
         int i, j;
         double sum=0.0;
         for(i=0; i<(int)(memory->network->number_of_Levels)-1; i++)
             for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
	  sum+=sqrt((double)((*(*(memory->weight_correction+i)+j))*(*(*(memory->weight_correction+i)+j))));
         return((float)sum);
        } /* ; */

/* functions for setting up NEURON TYPE DESCRIPTORs */

/* setting up highest_difference_from_neighborns descriptor */
/* neuron_type_descriptor* setup_highest_difference_from_neighborns_descriptor() sets up neuron_type_descriptor for highest_difference_from_neighborns class of neurones */
neuron_type_descriptor* setup_highest_difference_from_neighborns_descriptor()
			                     {
			                       neuron_type_descriptor* highest_difference_from_neighborns;
			                       highest_difference_from_neighborns=MANTD((long int)1);
			                       highest_difference_from_neighborns->name=MAC((long int)39);
			                       *(highest_difference_from_neighborns->name+0)='t';
			                       *(highest_difference_from_neighborns->name+1)='h';
			                       *(highest_difference_from_neighborns->name+2)='e';
			                       *(highest_difference_from_neighborns->name+3)='_';
			                       *(highest_difference_from_neighborns->name+4)='h';
			                       *(highest_difference_from_neighborns->name+5)='i';
			                       *(highest_difference_from_neighborns->name+6)='g';
			                       *(highest_difference_from_neighborns->name+7)='h';
			                       *(highest_difference_from_neighborns->name+8)='e';
			                       *(highest_difference_from_neighborns->name+9)='s';
			                       *(highest_difference_from_neighborns->name+10)='t';
			                       *(highest_difference_from_neighborns->name+11)='_';
			                       *(highest_difference_from_neighborns->name+12)='d';
			                       *(highest_difference_from_neighborns->name+13)='i';
			                       *(highest_difference_from_neighborns->name+14)='f';
			                       *(highest_difference_from_neighborns->name+15)='f';
			                       *(highest_difference_from_neighborns->name+16)='e';
			                       *(highest_difference_from_neighborns->name+17)='r';
			                       *(highest_difference_from_neighborns->name+18)='e';
			                       *(highest_difference_from_neighborns->name+19)='n';
			                       *(highest_difference_from_neighborns->name+20)='c';
			                       *(highest_difference_from_neighborns->name+21)='e';
			                       *(highest_difference_from_neighborns->name+22)='_';
			                       *(highest_difference_from_neighborns->name+23)='f';
			                       *(highest_difference_from_neighborns->name+24)='r';
			                       *(highest_difference_from_neighborns->name+25)='o';
			                       *(highest_difference_from_neighborns->name+26)='m';
			                       *(highest_difference_from_neighborns->name+27)='_';
			                       *(highest_difference_from_neighborns->name+28)='n';
			                       *(highest_difference_from_neighborns->name+29)='e';
			                       *(highest_difference_from_neighborns->name+30)='i';
			                       *(highest_difference_from_neighborns->name+31)='g';
			                       *(highest_difference_from_neighborns->name+32)='h';
			                       *(highest_difference_from_neighborns->name+33)='b';
			                       *(highest_difference_from_neighborns->name+34)='o';
			                       *(highest_difference_from_neighborns->name+35)='r';
			                       *(highest_difference_from_neighborns->name+36)='n';
			                       *(highest_difference_from_neighborns->name+37)='s';
			                       *(highest_difference_from_neighborns->name+38)=' ';
			                       highest_difference_from_neighborns->number_of_Levels=2;
			                       highest_difference_from_neighborns->inputs_per_first_Level_node=1+8;
			                       highest_difference_from_neighborns->nodes_per_Level=MAI((long int)highest_difference_from_neighborns->number_of_Levels);
			                       *(highest_difference_from_neighborns->nodes_per_Level+0)=8;
			                       *(highest_difference_from_neighborns->nodes_per_Level+1)=1;
			                       highest_difference_from_neighborns->recurrence=F;
			                       highest_difference_from_neighborns->number_of_recurrent_connected_layers=0;
			                       highest_difference_from_neighborns->source=0;
			                       highest_difference_from_neighborns->destination=0;
			                       highest_difference_from_neighborns->number_of_functions_for_creating_neuron=1;
			                       highest_difference_from_neighborns->create_neuron=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(highest_difference_from_neighborns->create_neuron==0) exit_handling(4,1); 
			                       *(highest_difference_from_neighborns->create_neuron+0)=create_highest_difference_from_neighborns;
			                       highest_difference_from_neighborns->create_neuron_population=create_neuron_population;
			                       highest_difference_from_neighborns->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       highest_difference_from_neighborns->number_linear_output_functions=1;
			                       highest_difference_from_neighborns->node_linear_output=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_linear_output_functions*sizeof(void*));
			                       if(highest_difference_from_neighborns->node_linear_output==0) exit_handling(4,2);
			                       *(highest_difference_from_neighborns->node_linear_output)=even_minus_odd;
			                       highest_difference_from_neighborns->number_of_node_output_functions=5;
			                       highest_difference_from_neighborns->node_output=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_of_node_output_functions*sizeof(void*));
			                       if(highest_difference_from_neighborns->node_output==0) exit_handling(4,3);
			                       *(highest_difference_from_neighborns->node_output+0)=exp_node_output;
			                       *(highest_difference_from_neighborns->node_output+1)=exp_positive_node_output;
			                       *(highest_difference_from_neighborns->node_output+2)=tgh_node_output;
			                       *(highest_difference_from_neighborns->node_output+3)=treasureholded_node_output;
			                       *(highest_difference_from_neighborns->node_output+4)=unchanged_linear_node_output;
			                       highest_difference_from_neighborns->node_output_derivation=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_of_node_output_functions*sizeof(void*));
			                       if(highest_difference_from_neighborns->node_output_derivation==0) exit_handling(4,4);
			                       *(highest_difference_from_neighborns->node_output_derivation+0)=exp_node_output_derivation;
			                       *(highest_difference_from_neighborns->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(highest_difference_from_neighborns->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(highest_difference_from_neighborns->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       *(highest_difference_from_neighborns->node_output_derivation+4)=unchanged_linear_node_output_derivation;
			                       highest_difference_from_neighborns->number_of_firing_functions=1;
			                       highest_difference_from_neighborns->firing_neuron=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_of_firing_functions*sizeof(void*));
			                       if(highest_difference_from_neighborns->firing_neuron==0) exit_handling(4,5);
			                       *(highest_difference_from_neighborns->firing_neuron)=firing_highest_difference_from_neighborns;
			                       highest_difference_from_neighborns->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       highest_difference_from_neighborns->create_learning_algorithm=(void**)testmalloc((size_t)highest_difference_from_neighborns->number_of_learning_algorithms*sizeof(void*));
			                       if(highest_difference_from_neighborns->create_learning_algorithm==0) exit_handling(4,6);
			                       *(highest_difference_from_neighborns->create_learning_algorithm+0)=BP_HDFN_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(highest_difference_from_neighborns);
			                      } /* ; */

/* setting up corner_extractor descriptor */
/* neuron_type_descriptor* setup_corner_extractor_descriptor() sets up neuron_type_descriptor for corner_extractor class of neurones */
neuron_type_descriptor* setup_corner_extractor_descriptor()
			                     {
			                       neuron_type_descriptor* corner_extractor;
			                       corner_extractor=MANTD((long int)1);
			                       corner_extractor->name=MAC((long int)17);
			                       *(corner_extractor->name+0)='c';
			                       *(corner_extractor->name+1)='o';
			                       *(corner_extractor->name+2)='r';
			                       *(corner_extractor->name+3)='n';
			                       *(corner_extractor->name+4)='e';
			                       *(corner_extractor->name+5)='r';
			                       *(corner_extractor->name+6)='_';
			                       *(corner_extractor->name+7)='e';
			                       *(corner_extractor->name+8)='x';
			                       *(corner_extractor->name+9)='t';
			                       *(corner_extractor->name+10)='r';
			                       *(corner_extractor->name+11)='a';
			                       *(corner_extractor->name+12)='c';
			                       *(corner_extractor->name+13)='t';
			                       *(corner_extractor->name+14)='o';
			                       *(corner_extractor->name+15)='r';
			                       *(corner_extractor->name+16)=' ';
			                       corner_extractor->number_of_Levels=3;
			                       corner_extractor->inputs_per_first_Level_node=1+8;
			                       corner_extractor->nodes_per_Level=MAI((long int)corner_extractor->number_of_Levels);
			                       *(corner_extractor->nodes_per_Level+0)=8;
			                       *(corner_extractor->nodes_per_Level+1)=2;
			                       *(corner_extractor->nodes_per_Level+2)=1;
			                       corner_extractor->recurrence=F;
			                       corner_extractor->number_of_recurrent_connected_layers=0;
			                       corner_extractor->source=0;
			                       corner_extractor->destination=0;
			                       corner_extractor->number_of_functions_for_creating_neuron=1;
			                       corner_extractor->create_neuron=(void**)testmalloc((size_t)corner_extractor->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(corner_extractor->create_neuron==0) exit_handling(5,1);
			                       *(corner_extractor->create_neuron)=create_corner_extractor;
			                       corner_extractor->create_neuron_population=create_neuron_population;
			                       corner_extractor->prepare_input=preparing_corner_extractor_neuron_population_neuron_inputs_through_window;
			                       corner_extractor->number_linear_output_functions=4;
			                       corner_extractor->node_linear_output=(void**)testmalloc((size_t)corner_extractor->number_linear_output_functions*sizeof(void*));
			                       if(corner_extractor->node_linear_output==0) exit_handling(5,2);
			                       *(corner_extractor->node_linear_output)=sum_of_2multiplications_with_maximum_of_3;
			                       *(corner_extractor->node_linear_output+1)=sum_of_roots_of_2multiplications_with_maximum_of_3;
			                       *(corner_extractor->node_linear_output+2)=arithmetic_mean_of_roots_of_2multiplications_with_maximum_of_3;
			                       *(corner_extractor->node_linear_output+3)=highest_arithmetic_mean_of_2_with_maximum_of_3;
			                       corner_extractor->number_of_node_output_functions=5;
			                       corner_extractor->node_output=(void**)testmalloc((size_t)corner_extractor->number_of_node_output_functions*sizeof(void*));
			                       if(corner_extractor->node_output==0) exit_handling(5,3);
			                       *(corner_extractor->node_output+0)=exp_node_output;
			                       *(corner_extractor->node_output+1)=exp_positive_node_output;
			                       *(corner_extractor->node_output+2)=tgh_node_output;
			                       *(corner_extractor->node_output+3)=treasureholded_node_output;
			                       *(corner_extractor->node_output+4)=unchanged_linear_node_output;
			                       corner_extractor->node_output_derivation=(void**)testmalloc((size_t)corner_extractor->number_of_node_output_functions*sizeof(void*));
			                       if(corner_extractor->node_output_derivation==0) exit_handling(5,4);
			                       *(corner_extractor->node_output_derivation+0)=exp_node_output_derivation;
			                       *(corner_extractor->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(corner_extractor->node_output_derivation+1)=tgh_node_output_derivation;
			                       *(corner_extractor->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(corner_extractor->node_output_derivation+1)=unchanged_linear_node_output_derivation;
			                       corner_extractor->number_of_firing_functions=1;
			                       corner_extractor->firing_neuron=(void**)testmalloc((size_t)corner_extractor->number_of_firing_functions*sizeof(void*));
			                       if(corner_extractor->firing_neuron==0) exit_handling(5,5);
			                       *(corner_extractor->firing_neuron+0)=firing_corner_extractor;
			                       corner_extractor->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       corner_extractor->create_learning_algorithm=(void**)testmalloc((size_t)corner_extractor->number_of_learning_algorithms*sizeof(void*));
			                       if(corner_extractor->create_learning_algorithm==0) exit_handling(5,6);
			                       *(corner_extractor->create_learning_algorithm+0)=BP_CE_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(corner_extractor);
			                      } /* ; */

/* setting up sort2 descriptor */
/* neuron_type_descriptor* setup_sort2_descriptor() sets up neuron_type_descriptor for sort2 class of neurones */
neuron_type_descriptor* setup_sort2_descriptor()
			                     {
			                       neuron_type_descriptor* sort2;
			                       sort2=MANTD((long int)1);
			                       sort2->name=MAC((long int)6);
			                       *(sort2->name+0)='s';
			                       *(sort2->name+1)='o';
			                       *(sort2->name+2)='r';
			                       *(sort2->name+3)='t';
			                       *(sort2->name+4)='2';
			                       *(sort2->name+5)=' ';
			                       sort2->number_of_Levels=2;
			                       sort2->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       sort2->nodes_per_Level=MAI((long int)sort2->number_of_Levels);
			                       *(sort2->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(sort2->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are in the 1st Level */
			                       sort2->recurrence=F;
			                       sort2->number_of_recurrent_connected_layers=0;
			                       sort2->source=0;
			                       sort2->destination=0;
			                       sort2->number_of_functions_for_creating_neuron=1;
			                       sort2->create_neuron=(void**)testmalloc((size_t)sort2->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(sort2->create_neuron==0) exit_handling(11,1);
			                       *(sort2->create_neuron)=create_sort2;
			                       sort2->create_neuron_population=create_neuron_population;
			                       sort2->prepare_input=0;
			                       sort2->number_linear_output_functions=2;
			                       sort2->node_linear_output=(void**)testmalloc((size_t)sort2->number_linear_output_functions*sizeof(void*));
			                       if(sort2->node_linear_output==0) exit_handling(11,2);
			                       *(sort2->node_linear_output)=sort2_first_Level;
			                       *(sort2->node_linear_output+1)=sort2_second_Level;
			                       sort2->number_of_node_output_functions=1;
			                       sort2->node_output=(void**)testmalloc((size_t)sort2->number_of_node_output_functions*sizeof(void*));
			                       if(sort2->node_output==0) exit_handling(11,3);
			                       *(sort2->node_output+0)=unchanged_linear_node_output;
			                       sort2->node_output_derivation=(void**)testmalloc((size_t)sort2->number_of_node_output_functions*sizeof(void*));
			                       if(sort2->node_output_derivation==0) exit_handling(11,4);
			                       *(sort2->node_output_derivation+0)=unchanged_linear_node_output_derivation;;
			                       sort2->number_of_firing_functions=1;
			                       sort2->firing_neuron=(void**)testmalloc((size_t)sort2->number_of_firing_functions*sizeof(void*));
			                       if(sort2->firing_neuron==0) exit_handling(11,5);
			                       *(sort2->firing_neuron)=firing_sort2;
			                       sort2->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       sort2->create_learning_algorithm=(void**)testmalloc((size_t)sort2->number_of_learning_algorithms*sizeof(void*));
			                       if(sort2->create_learning_algorithm==0) exit_handling(11,6);
			                       *(sort2->create_learning_algorithm)=BP_sort2_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(sort2);
			                      } /* ; */

/* setting up number_of_corner_extractor descriptor */
/* neuron_type_descriptor* setup_number_of_corner_extractor_descriptor() sets up neuron_type_descriptor for number_of_corner_extractor class of neurones */
neuron_type_descriptor* setup_number_of_corner_extractor_descriptor()
			                     {
			                       neuron_type_descriptor* number_of_corner_extractor;
			                       number_of_corner_extractor=MANTD((long int)1);
			                       number_of_corner_extractor->name=MAC((long int)17);
			                       *(number_of_corner_extractor->name+0)='n';
			                       *(number_of_corner_extractor->name+1)='u';
			                       *(number_of_corner_extractor->name+2)='m';
			                       *(number_of_corner_extractor->name+3)='b';
			                       *(number_of_corner_extractor->name+4)='e';
			                       *(number_of_corner_extractor->name+5)='r';
			                       *(number_of_corner_extractor->name+6)='_';
			                       *(number_of_corner_extractor->name+7)='o';
			                       *(number_of_corner_extractor->name+8)='f';
			                       *(number_of_corner_extractor->name+9)='_';
			                       *(number_of_corner_extractor->name+10)='c';
			                       *(number_of_corner_extractor->name+11)='o';
			                       *(number_of_corner_extractor->name+12)='r';
			                       *(number_of_corner_extractor->name+13)='n';
			                       *(number_of_corner_extractor->name+14)='e';
			                       *(number_of_corner_extractor->name+15)='r';
			                       *(number_of_corner_extractor->name+16)='_';
			                       *(number_of_corner_extractor->name+17)='e';
			                       *(number_of_corner_extractor->name+18)='x';
			                       *(number_of_corner_extractor->name+19)='t';
			                       *(number_of_corner_extractor->name+20)='r';
			                       *(number_of_corner_extractor->name+21)='a';
			                       *(number_of_corner_extractor->name+22)='c';
			                       *(number_of_corner_extractor->name+23)='t';
			                       *(number_of_corner_extractor->name+24)='o';
			                       *(number_of_corner_extractor->name+25)='r';
			                       *(number_of_corner_extractor->name+26)=' ';
			                       number_of_corner_extractor->number_of_Levels=1;
			                       number_of_corner_extractor->inputs_per_first_Level_node=0; /* means all inputs are associated with the 1st Level node */
			                       number_of_corner_extractor->nodes_per_Level=MAI((long int)number_of_corner_extractor->number_of_Levels);
			                       *(number_of_corner_extractor->nodes_per_Level+0)=1;
			                       number_of_corner_extractor->recurrence=F;
			                       number_of_corner_extractor->number_of_recurrent_connected_layers=0;
			                       number_of_corner_extractor->source=0;
			                       number_of_corner_extractor->destination=0;
			                       number_of_corner_extractor->number_of_functions_for_creating_neuron=1;
			                       number_of_corner_extractor->create_neuron=(void**)testmalloc((size_t)number_of_corner_extractor->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(number_of_corner_extractor->create_neuron==0) exit_handling(17,1);
			                       *(number_of_corner_extractor->create_neuron)=create_number_of_corner_extractor;
			                       number_of_corner_extractor->create_neuron_population=create_neuron_population;
			                       number_of_corner_extractor->prepare_input=preparing_number_of_corner_extractor_neuron_population_neuron_inputs; /* Enables usage of common create neuron population function. For each neuron input fuzzy set is created (point on input fuzzy set's fuzzy objects) with its name consisting (NOT pointing on) the number of corners possibility of is to be extracted */
			                       /* input should be prepared by preprocessing throught "sort"NN */
			                       number_of_corner_extractor->number_linear_output_functions=1;
			                       number_of_corner_extractor->node_linear_output=(void**)testmalloc((size_t)number_of_corner_extractor->number_linear_output_functions*sizeof(void*));
			                       if(number_of_corner_extractor->node_linear_output==0) exit_handling(17,2);
			                       *(number_of_corner_extractor->node_linear_output+0)=product_of_first_n_with_complements_of_rest;
			                       number_of_corner_extractor->number_of_node_output_functions=5;
			                       number_of_corner_extractor->node_output=(void**)testmalloc((size_t)number_of_corner_extractor->number_of_node_output_functions*sizeof(void*));
			                       if(number_of_corner_extractor->node_output==0) exit_handling(17,3);
			                       *(number_of_corner_extractor->node_output+0)=exp_node_output;
			                       *(number_of_corner_extractor->node_output+1)=exp_positive_node_output;
			                       *(number_of_corner_extractor->node_output+2)=tgh_node_output;
			                       *(number_of_corner_extractor->node_output+3)=treasureholded_node_output;
			                       *(number_of_corner_extractor->node_output+4)=unchanged_linear_node_output_derivation;
			                       number_of_corner_extractor->node_output_derivation=(void**)testmalloc((size_t)number_of_corner_extractor->number_of_node_output_functions*sizeof(void*));
			                       if(number_of_corner_extractor->node_output_derivation==0) exit_handling(17,4);
			                       *(number_of_corner_extractor->node_output_derivation+0)=exp_node_output_derivation;
			                       *(number_of_corner_extractor->node_output_derivation+1)=exp_positive_node_output_derivation;
			                        *(number_of_corner_extractor->node_output_derivation+1)=tgh_node_output_derivation;
			                       *(number_of_corner_extractor->node_output_derivation+2)=treasureholded_node_output_derivation;
			                        *(number_of_corner_extractor->node_output_derivation+1)=treasureholded_node_output_derivation;
			                        number_of_corner_extractor->number_of_firing_functions=1;
			                       number_of_corner_extractor->firing_neuron=(void**)testmalloc((size_t)number_of_corner_extractor->number_of_firing_functions*sizeof(void*));
			                       if(number_of_corner_extractor->firing_neuron==0) exit_handling(17,5);
			                       *(number_of_corner_extractor->firing_neuron+0)=firing_number_of_corner_extractor;
			                       number_of_corner_extractor->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       number_of_corner_extractor->create_learning_algorithm=(void**)testmalloc((size_t)number_of_corner_extractor->number_of_learning_algorithms*sizeof(void*));
			                       if(number_of_corner_extractor->create_learning_algorithm==0) exit_handling(17,6);
			                       *(number_of_corner_extractor->create_learning_algorithm+0)=BP_NCE_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(number_of_corner_extractor);
			                      } /* ; */

/* setting up area separator descriptor */
/* neuron_type_descriptor* setup_area_separator_descriptor() sets up neuron_type_descriptor for area separator class of neurones */
neuron_type_descriptor* setup_area_separator_descriptor()
			                     {
			                       neuron_type_descriptor* area_separator;
			                       area_separator=MANTD((long int)1);
			                       area_separator->name=MAC((long int)15);
			                       *(area_separator->name+0)='a';
			                       *(area_separator->name+1)='r';
			                       *(area_separator->name+2)='e';
			                       *(area_separator->name+3)='a';
			                       *(area_separator->name+4)='_';
			                       *(area_separator->name+5)='s';
			                       *(area_separator->name+6)='e';
			                       *(area_separator->name+7)='p';
			                       *(area_separator->name+8)='a';
			                       *(area_separator->name+9)='r';
			                       *(area_separator->name+10)='a';
			                       *(area_separator->name+11)='t';
			                       *(area_separator->name+12)='o';
			                       *(area_separator->name+13)='r';
			                       *(area_separator->name+14)=' ';
			                       area_separator->number_of_Levels=2;
			                       area_separator->inputs_per_first_Level_node=1+8; /* means its associated input and outputs of its neighbouring nodes (8 of them) */
			                       area_separator->nodes_per_Level=MAI((long int)area_separator->number_of_Levels);
			                       *(area_separator->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(area_separator->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are in the 1st Level */
			                       area_separator->recurrence=F;
			                       area_separator->number_of_recurrent_connected_layers=0;
			                       area_separator->source=0;
			                       area_separator->destination=0;
			                       area_separator->number_of_functions_for_creating_neuron=1;
			                       area_separator->create_neuron=(void**)testmalloc((size_t)area_separator->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(area_separator->create_neuron==0) exit_handling(19,1);
			                       *(area_separator->create_neuron)=create_area_separator;
			                       area_separator->create_neuron_population=create_neuron_population;
			                       area_separator->prepare_input=preparing_area_separator_neuron_population_neuron_inputs;
			                       area_separator->number_linear_output_functions=2;
			                       area_separator->node_linear_output=(void**)testmalloc((size_t)area_separator->number_linear_output_functions*sizeof(void*));
			                       if(area_separator->node_linear_output==0) exit_handling(19,2);
			                       *(area_separator->node_linear_output+0)=area_separator_all_Levels;
			                       *(area_separator->node_linear_output+1)=area_without_edges_separator_all_Levels;
			                       area_separator->number_of_node_output_functions=5;
			                       area_separator->node_output=(void**)testmalloc((size_t)area_separator->number_of_node_output_functions*sizeof(void*));
			                       if(area_separator->node_output==0) exit_handling(19,3);
			                       *(area_separator->node_output+0)=unchanged_linear_node_output;
			                       *(area_separator->node_output+1)=exp_node_output;
			                       *(area_separator->node_output+2)=exp_positive_node_output;
			                       *(area_separator->node_output+3)=tgh_node_output;
			                       *(area_separator->node_output+4)=treasureholded_node_output;
			                       area_separator->node_output_derivation=(void**)testmalloc((size_t)area_separator->number_of_node_output_functions*sizeof(void*));
			                       if(area_separator->node_output_derivation==0) exit_handling(19,4);
			                       *(area_separator->node_output_derivation+0)=unchanged_linear_node_output_derivation;
			                       *(area_separator->node_output_derivation+1)=exp_node_output_derivation;
			                       *(area_separator->node_output_derivation+2)=exp_positive_node_output_derivation;
			                       *(area_separator->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(area_separator->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       area_separator->number_of_firing_functions=2;
			                       area_separator->firing_neuron=(void**)testmalloc((size_t)area_separator->number_of_firing_functions*sizeof(void*));
			                       if(area_separator->firing_neuron==0) exit_handling(19,5);
			                       *(area_separator->firing_neuron+0)=firing_area_separator;
			                       *(area_separator->firing_neuron+1)=firing_area_without_edges_separator;
			                       area_separator->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       area_separator->create_learning_algorithm=(void**)testmalloc((size_t)area_separator->number_of_learning_algorithms*sizeof(void*));
			                       if(area_separator->create_learning_algorithm==0) exit_handling(19,6);
			                       *(area_separator->create_learning_algorithm+0)=BP_AS_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(area_separator);
			                      } /* ; */

/* setting up area without edges separator descriptor */
/* neuron_type_descriptor* setup_area_without_edges_separator_descriptor() sets up neuron_type_descriptor for area without edges separator class of neurones */
/* area without edges separator is similar to area separator with difference pixel on the picture edge have no pair in nodes in the 2nd Level and output and in that way dimension of the 2nd Level and the output is shorter by 2 in each dimension. Everything else is the same. */
neuron_type_descriptor* setup_area_without_edges_separator_descriptor()
			                     {
			                       neuron_type_descriptor* area_without_edges_separator;
			                       area_without_edges_separator=MANTD((long int)1);
			                       area_without_edges_separator->name=MAC((long int)29);
			                       *(area_without_edges_separator->name+0)='a';
			                       *(area_without_edges_separator->name+1)='r';
			                       *(area_without_edges_separator->name+2)='e';
			                       *(area_without_edges_separator->name+3)='a';
			                       *(area_without_edges_separator->name+4)='_';
			                       *(area_without_edges_separator->name+5)='w';
			                       *(area_without_edges_separator->name+6)='i';
			                       *(area_without_edges_separator->name+7)='t';
			                       *(area_without_edges_separator->name+8)='h';
			                       *(area_without_edges_separator->name+9)='o';
			                       *(area_without_edges_separator->name+10)='u';
			                       *(area_without_edges_separator->name+11)='t';
			                       *(area_without_edges_separator->name+12)='_';
			                       *(area_without_edges_separator->name+13)='e';
			                       *(area_without_edges_separator->name+14)='d';
			                       *(area_without_edges_separator->name+15)='g';
			                       *(area_without_edges_separator->name+16)='e';
			                       *(area_without_edges_separator->name+17)='s';
			                       *(area_without_edges_separator->name+18)='_';
			                       *(area_without_edges_separator->name+19)='s';
			                       *(area_without_edges_separator->name+20)='e';
			                       *(area_without_edges_separator->name+21)='p';
			                       *(area_without_edges_separator->name+22)='a';
			                       *(area_without_edges_separator->name+23)='r';
			                       *(area_without_edges_separator->name+24)='a';
			                       *(area_without_edges_separator->name+25)='t';
			                       *(area_without_edges_separator->name+26)='o';
			                       *(area_without_edges_separator->name+27)='r';
			                       *(area_without_edges_separator->name+28)=' ';
			                       area_without_edges_separator->number_of_Levels=2;
			                       area_without_edges_separator->inputs_per_first_Level_node=1+8; /* means its associated input and outputs of its neighbouring nodes (8 of them) */
			                       area_without_edges_separator->nodes_per_Level=MAI((long int)area_without_edges_separator->number_of_Levels);
			                       *(area_without_edges_separator->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(area_without_edges_separator->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are in the 1st Level */
			                       area_without_edges_separator->recurrence=F;
			                       area_without_edges_separator->number_of_recurrent_connected_layers=0;
			                       area_without_edges_separator->source=0;
			                       area_without_edges_separator->destination=0;
			                       area_without_edges_separator->number_of_functions_for_creating_neuron=1;
			                       area_without_edges_separator->create_neuron=(void**)testmalloc((size_t)area_without_edges_separator->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(area_without_edges_separator->create_neuron==0) exit_handling(19,1);
			                       *(area_without_edges_separator->create_neuron)=create_area_without_edges_separator;
			                       area_without_edges_separator->create_neuron_population=create_neuron_population;
			                       area_without_edges_separator->prepare_input=preparing_area_separator_neuron_population_neuron_inputs;
			                       area_without_edges_separator->number_linear_output_functions=1;
			                       area_without_edges_separator->node_linear_output=(void**)testmalloc((size_t)area_without_edges_separator->number_linear_output_functions*sizeof(void*));
			                       if(area_without_edges_separator->node_linear_output==0) exit_handling(19,2);
			                       *(area_without_edges_separator->node_linear_output)=area_without_edges_separator_all_Levels;
			                       area_without_edges_separator->number_of_node_output_functions=5;
			                       area_without_edges_separator->node_output=(void**)testmalloc((size_t)area_without_edges_separator->number_of_node_output_functions*sizeof(void*));
			                       if(area_without_edges_separator->node_output==0) exit_handling(19,3);
			                       *(area_without_edges_separator->node_output+0)=unchanged_linear_node_output;
			                       *(area_without_edges_separator->node_output+1)=exp_node_output;
			                       *(area_without_edges_separator->node_output+2)=exp_positive_node_output;
			                       *(area_without_edges_separator->node_output+3)=tgh_node_output;
			                       *(area_without_edges_separator->node_output+4)=treasureholded_node_output;
			                       area_without_edges_separator->node_output_derivation=(void**)testmalloc((size_t)area_without_edges_separator->number_of_node_output_functions*sizeof(void*));
			                       if(area_without_edges_separator->node_output_derivation==0) exit_handling(19,4);
			                       *(area_without_edges_separator->node_output_derivation+0)=unchanged_linear_node_output_derivation;
			                       *(area_without_edges_separator->node_output_derivation+1)=exp_node_output_derivation;
			                       *(area_without_edges_separator->node_output_derivation+2)=exp_positive_node_output_derivation;
			                       *(area_without_edges_separator->node_output_derivation+3)=tgh_node_output_derivation;
			                       *(area_without_edges_separator->node_output_derivation+4)=treasureholded_node_output_derivation;
			                       area_without_edges_separator->number_of_firing_functions=1;
			                       area_without_edges_separator->firing_neuron=(void**)testmalloc((size_t)area_without_edges_separator->number_of_firing_functions*sizeof(void*));
			                       if(area_without_edges_separator->firing_neuron==0) exit_handling(19,5);
			                       *(area_without_edges_separator->firing_neuron)=firing_area_without_edges_separator;
			                       area_without_edges_separator->number_of_learning_algorithms=1; /* this type of neuron is not expected/proposed to learn */
			                       area_without_edges_separator->create_learning_algorithm=(void**)testmalloc((size_t)area_without_edges_separator->number_of_learning_algorithms*sizeof(void*));
			                       if(area_without_edges_separator->create_learning_algorithm==0) exit_handling(19,6);
			                       *(area_without_edges_separator->create_learning_algorithm)=BP_AS_without_learning_algorithm_setup; /* this type of neuron is not expected/proposed to learn */
			                       return(area_without_edges_separator);
			                      } /* ; */


/* setting up FCNN_2L descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_descriptor() sets up neuron_type_descriptor for FCNN_2L (Fully Connected Neural Network with 2 Layers) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L;
			                       FCNN_2L=MANTD((long int)1);
			                       FCNN_2L->name=MAC((long int)37);
			                       *(FCNN_2L->name+0)='F';
			                       *(FCNN_2L->name+1)='C';
			                       *(FCNN_2L->name+2)='N';
			                       *(FCNN_2L->name+3)='N';
			                       *(FCNN_2L->name+4)='_';
			                       *(FCNN_2L->name+5)='2';
			                       *(FCNN_2L->name+6)='L';
			                       *(FCNN_2L->name+7)='(';
			                       *(FCNN_2L->name+8)='F';
			                       *(FCNN_2L->name+9)='u';
			                       *(FCNN_2L->name+10)='l';
			                       *(FCNN_2L->name+11)='l';
			                       *(FCNN_2L->name+12)='y';
			                       *(FCNN_2L->name+13)='_';
			                       *(FCNN_2L->name+14)='C';
			                       *(FCNN_2L->name+15)='o';
			                       *(FCNN_2L->name+16)='n';
			                       *(FCNN_2L->name+17)='n';
			                       *(FCNN_2L->name+18)='e';
			                       *(FCNN_2L->name+19)='c';
			                       *(FCNN_2L->name+20)='t';
			                       *(FCNN_2L->name+21)='e';
			                       *(FCNN_2L->name+22)='d';
			                       *(FCNN_2L->name+23)='_';
			                       *(FCNN_2L->name+24)='N';
			                       *(FCNN_2L->name+25)='N';
			                       *(FCNN_2L->name+26)='_';
			                       *(FCNN_2L->name+27)='2';
			                       *(FCNN_2L->name+28)='_';
			                       *(FCNN_2L->name+29)='L';
			                       *(FCNN_2L->name+30)='a';
			                       *(FCNN_2L->name+31)='y';
			                       *(FCNN_2L->name+32)='e';
			                       *(FCNN_2L->name+33)='r';
			                       *(FCNN_2L->name+34)='s';
			                       *(FCNN_2L->name+35)=')';
			                       *(FCNN_2L->name+36)=' ';
			                       FCNN_2L->number_of_Levels=2;
			                       FCNN_2L->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L->nodes_per_Level=MAI((long int)FCNN_2L->number_of_Levels);
			                       *(FCNN_2L->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L->recurrence=F;
			                       FCNN_2L->number_of_recurrent_connected_layers=0;
			                       FCNN_2L->source=0;
			                       FCNN_2L->destination=0;
			                       FCNN_2L->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L->create_neuron=(void**)testmalloc((size_t)FCNN_2L->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L->create_neuron==0) exit_handling(24,1); 
			                       *(FCNN_2L->create_neuron+0)=create_FCNN_2L;
			                       FCNN_2L->create_neuron_population=create_neuron_population;
			                       FCNN_2L->prepare_input=0;
			                       FCNN_2L->number_linear_output_functions=4;
			                       FCNN_2L->node_linear_output=(void**)testmalloc((size_t)FCNN_2L->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L->node_linear_output==0) exit_handling(24,2);
			                       *(FCNN_2L->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_2L->node_linear_output+3)=RBF_exp;
			                       FCNN_2L->number_of_node_output_functions=4;
			                       FCNN_2L->node_output=(void**)testmalloc((size_t)FCNN_2L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L->node_output==0) exit_handling(24,3);
			                       *(FCNN_2L->node_output+0)=exp_node_output;
			                       *(FCNN_2L->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L->node_output_derivation==0) exit_handling(24,4);
			                       *(FCNN_2L->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L->number_of_firing_functions=1;
			                       FCNN_2L->firing_neuron=(void**)testmalloc((size_t)FCNN_2L->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L->firing_neuron==0) exit_handling(24,5);
			                       *(FCNN_2L->firing_neuron)=firing_standard_neuron;
			                       FCNN_2L->number_of_learning_algorithms=3;
			                       FCNN_2L->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L->create_learning_algorithm==0) exit_handling(24,6);
			                       *(FCNN_2L->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_2L->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_2L);
			                      } /* ; */

/* setting up FCNN_3L descriptor */
/* neuron_type_descriptor* setup_FCNN_3L_descriptor() sets up neuron_type_descriptor for FCNN_3L (Fully Connected Neural Network with 3 Layers) class of neurones */
neuron_type_descriptor* setup_FCNN_3L_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_3L;
			                       FCNN_3L=MANTD((long int)1);
			                       FCNN_3L->name=MAC((long int)37);
			                       *(FCNN_3L->name+0)='F';
			                       *(FCNN_3L->name+1)='C';
			                       *(FCNN_3L->name+2)='N';
			                       *(FCNN_3L->name+3)='N';
			                       *(FCNN_3L->name+4)='_';
			                       *(FCNN_3L->name+5)='3';
			                       *(FCNN_3L->name+6)='L';
			                       *(FCNN_3L->name+7)='(';
			                       *(FCNN_3L->name+8)='F';
			                       *(FCNN_3L->name+9)='u';
			                       *(FCNN_3L->name+10)='l';
			                       *(FCNN_3L->name+11)='l';
			                       *(FCNN_3L->name+12)='y';
			                       *(FCNN_3L->name+13)='_';
			                       *(FCNN_3L->name+14)='C';
			                       *(FCNN_3L->name+15)='o';
			                       *(FCNN_3L->name+16)='n';
			                       *(FCNN_3L->name+17)='n';
			                       *(FCNN_3L->name+18)='e';
			                       *(FCNN_3L->name+19)='c';
			                       *(FCNN_3L->name+20)='t';
			                       *(FCNN_3L->name+21)='e';
			                       *(FCNN_3L->name+22)='d';
			                       *(FCNN_3L->name+23)='_';
			                       *(FCNN_3L->name+24)='N';
			                       *(FCNN_3L->name+25)='N';
			                       *(FCNN_3L->name+26)='_';
			                       *(FCNN_3L->name+27)='3';
			                       *(FCNN_3L->name+28)='_';
			                       *(FCNN_3L->name+29)='L';
			                       *(FCNN_3L->name+30)='a';
			                       *(FCNN_3L->name+31)='y';
			                       *(FCNN_3L->name+32)='e';
			                       *(FCNN_3L->name+33)='r';
			                       *(FCNN_3L->name+34)='s';
			                       *(FCNN_3L->name+35)=')';
			                       *(FCNN_3L->name+36)=' ';
			                       FCNN_3L->number_of_Levels=3;
			                       FCNN_3L->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_3L->nodes_per_Level=MAI((long int)FCNN_3L->number_of_Levels);
			                       *(FCNN_3L->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_3L->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_3L->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       FCNN_3L->recurrence=F;
			                       FCNN_3L->number_of_recurrent_connected_layers=0;
			                       FCNN_3L->source=0;
			                       FCNN_3L->destination=0;
			                       FCNN_3L->number_of_functions_for_creating_neuron=1;
			                       FCNN_3L->create_neuron=(void**)testmalloc((size_t)FCNN_3L->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_3L->create_neuron==0) exit_handling(25,1); 
			                       *(FCNN_3L->create_neuron+0)=create_FCNN_3L;
			                       FCNN_3L->create_neuron_population=create_neuron_population;
			                       FCNN_3L->prepare_input=0;
			                       FCNN_3L->number_linear_output_functions=4;
			                       FCNN_3L->node_linear_output=(void**)testmalloc((size_t)FCNN_3L->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_3L->node_linear_output==0) exit_handling(25,2);
			                       *(FCNN_3L->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_3L->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_3L->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_3L->node_linear_output+3)=RBF_exp;
				                       FCNN_3L->number_of_node_output_functions=4;
			                       FCNN_3L->node_output=(void**)testmalloc((size_t)FCNN_3L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L->node_output==0) exit_handling(25,3);
			                       *(FCNN_3L->node_output+0)=exp_node_output;
			                       *(FCNN_3L->node_output+1)=exp_positive_node_output;
			                       *(FCNN_3L->node_output+2)=treasureholded_node_output;
			                       *(FCNN_3L->node_output+3)=unchanged_linear_node_output;
			                       FCNN_3L->node_output_derivation=(void**)testmalloc((size_t)FCNN_3L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L->node_output_derivation==0) exit_handling(25,4);
			                       *(FCNN_3L->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_3L->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_3L->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_3L->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_3L->number_of_firing_functions=1;
			                       FCNN_3L->firing_neuron=(void**)testmalloc((size_t)FCNN_3L->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_3L->firing_neuron==0) exit_handling(25,5);
			                       *(FCNN_3L->firing_neuron)=firing_standard_neuron;
			                       FCNN_3L->number_of_learning_algorithms=3;
			                       FCNN_3L->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_3L->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_3L->create_learning_algorithm==0) exit_handling(25,6);
			                       *(FCNN_3L->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_3L->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_3L->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_3L);
			                      } /* ; */

/* setting up FCNN_4L descriptor */
/* neuron_type_descriptor* setup_FCNN_4L_descriptor() sets up neuron_type_descriptor for FCNN_4L (Fully Connected Neural Network with 4 Layers) class of neurones */
neuron_type_descriptor* setup_FCNN_4L_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_4L;
			                       FCNN_4L=MANTD((long int)1);
			                       FCNN_4L->name=MAC((long int)37);
			                       *(FCNN_4L->name+0)='F';
			                       *(FCNN_4L->name+1)='C';
			                       *(FCNN_4L->name+2)='N';
			                       *(FCNN_4L->name+3)='N';
			                       *(FCNN_4L->name+4)='_';
			                       *(FCNN_4L->name+5)='4';
			                       *(FCNN_4L->name+6)='L';
			                       *(FCNN_4L->name+7)='(';
			                       *(FCNN_4L->name+8)='F';
			                       *(FCNN_4L->name+9)='u';
			                       *(FCNN_4L->name+10)='l';
			                       *(FCNN_4L->name+11)='l';
			                       *(FCNN_4L->name+12)='y';
			                       *(FCNN_4L->name+13)='_';
			                       *(FCNN_4L->name+14)='C';
			                       *(FCNN_4L->name+15)='o';
			                       *(FCNN_4L->name+16)='n';
			                       *(FCNN_4L->name+17)='n';
			                       *(FCNN_4L->name+18)='e';
			                       *(FCNN_4L->name+19)='c';
			                       *(FCNN_4L->name+20)='t';
			                       *(FCNN_4L->name+21)='e';
			                       *(FCNN_4L->name+22)='d';
			                       *(FCNN_4L->name+23)='_';
			                       *(FCNN_4L->name+24)='N';
			                       *(FCNN_4L->name+25)='N';
			                       *(FCNN_4L->name+26)='_';
			                       *(FCNN_4L->name+27)='4';
			                       *(FCNN_4L->name+28)='_';
			                       *(FCNN_4L->name+29)='L';
			                       *(FCNN_4L->name+30)='a';
			                       *(FCNN_4L->name+31)='y';
			                       *(FCNN_4L->name+32)='e';
			                       *(FCNN_4L->name+33)='r';
			                       *(FCNN_4L->name+34)='s';
			                       *(FCNN_4L->name+35)=')';
			                       *(FCNN_4L->name+36)=' ';
			                       FCNN_4L->number_of_Levels=4;
			                       FCNN_4L->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_4L->nodes_per_Level=MAI((long int)FCNN_4L->number_of_Levels);
			                       *(FCNN_4L->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_4L->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_4L->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       *(FCNN_4L->nodes_per_Level+3)=0; /* means there is the same number of nodes in the 4th Level as there are inputs */
			                       FCNN_4L->recurrence=F;
			                       FCNN_4L->number_of_recurrent_connected_layers=0;
			                       FCNN_4L->source=0;
			                       FCNN_4L->destination=0;
			                       FCNN_4L->number_of_functions_for_creating_neuron=1;
			                       FCNN_4L->create_neuron=(void**)testmalloc((size_t)FCNN_4L->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_4L->create_neuron==0) exit_handling(26,1); 
			                       *(FCNN_4L->create_neuron+0)=create_FCNN_4L;
			                       FCNN_4L->create_neuron_population=create_neuron_population;
			                       FCNN_4L->prepare_input=0;
			                       FCNN_4L->number_linear_output_functions=4;
			                       FCNN_4L->node_linear_output=(void**)testmalloc((size_t)FCNN_4L->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_4L->node_linear_output==0) exit_handling(26,2);
			                       *(FCNN_4L->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_4L->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_4L->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_4L->node_linear_output+3)=RBF_exp;
			                       FCNN_4L->number_of_node_output_functions=4;
			                       FCNN_4L->node_output=(void**)testmalloc((size_t)FCNN_4L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L->node_output==0) exit_handling(26,3);
			                       *(FCNN_4L->node_output+0)=exp_node_output;
			                       *(FCNN_4L->node_output+1)=exp_positive_node_output;
			                       *(FCNN_4L->node_output+2)=treasureholded_node_output;
			                       *(FCNN_4L->node_output+3)=unchanged_linear_node_output;
			                       FCNN_4L->node_output_derivation=(void**)testmalloc((size_t)FCNN_4L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L->node_output_derivation==0) exit_handling(26,4);
			                       *(FCNN_4L->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_4L->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_4L->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_4L->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_4L->number_of_firing_functions=1;
			                       FCNN_4L->firing_neuron=(void**)testmalloc((size_t)FCNN_4L->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_4L->firing_neuron==0) exit_handling(26,5);
			                       *(FCNN_4L->firing_neuron)=firing_standard_neuron;
			                       FCNN_4L->number_of_learning_algorithms=3;
			                       FCNN_4L->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_4L->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_4L->create_learning_algorithm==0) exit_handling(26,6);
			                       *(FCNN_4L->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_4L->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_4L->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_4L);
			                      } /* ; */

/* setting up FCNN_5L descriptor */
/* neuron_type_descriptor* setup_FCNN_5L_descriptor() sets up neuron_type_descriptor for FCNN_5L (Fully Connected Neural Network with 5 Layers) class of neurones */
neuron_type_descriptor* setup_FCNN_5L_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_5L;
			                       FCNN_5L=MANTD((long int)1);
			                       FCNN_5L->name=MAC((long int)37);
			                       *(FCNN_5L->name+0)='F';
			                       *(FCNN_5L->name+1)='C';
			                       *(FCNN_5L->name+2)='N';
			                       *(FCNN_5L->name+3)='N';
			                       *(FCNN_5L->name+4)='_';
			                       *(FCNN_5L->name+5)='5';
			                       *(FCNN_5L->name+6)='L';
			                       *(FCNN_5L->name+7)='(';
			                       *(FCNN_5L->name+8)='F';
			                       *(FCNN_5L->name+9)='u';
			                       *(FCNN_5L->name+10)='l';
			                       *(FCNN_5L->name+11)='l';
			                       *(FCNN_5L->name+12)='y';
			                       *(FCNN_5L->name+13)='_';
			                       *(FCNN_5L->name+14)='C';
			                       *(FCNN_5L->name+15)='o';
			                       *(FCNN_5L->name+16)='n';
			                       *(FCNN_5L->name+17)='n';
			                       *(FCNN_5L->name+18)='e';
			                       *(FCNN_5L->name+19)='c';
			                       *(FCNN_5L->name+20)='t';
			                       *(FCNN_5L->name+21)='e';
			                       *(FCNN_5L->name+22)='d';
			                       *(FCNN_5L->name+23)='_';
			                       *(FCNN_5L->name+24)='N';
			                       *(FCNN_5L->name+25)='N';
			                       *(FCNN_5L->name+26)='_';
			                       *(FCNN_5L->name+27)='5';
			                       *(FCNN_5L->name+28)='_';
			                       *(FCNN_5L->name+29)='L';
			                       *(FCNN_5L->name+30)='a';
			                       *(FCNN_5L->name+31)='y';
			                       *(FCNN_5L->name+32)='e';
			                       *(FCNN_5L->name+33)='r';
			                       *(FCNN_5L->name+34)='s';
			                       *(FCNN_5L->name+35)=')';
			                       *(FCNN_5L->name+36)=' ';
			                       FCNN_5L->number_of_Levels=5;
			                       FCNN_5L->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_5L->nodes_per_Level=MAI((long int)FCNN_5L->number_of_Levels);
			                       *(FCNN_5L->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_5L->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_5L->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       *(FCNN_5L->nodes_per_Level+3)=0; /* means there is the same number of nodes in the 4th Level as there are inputs */
			                       *(FCNN_5L->nodes_per_Level+4)=0; /* means there is the same number of nodes in the 5th Level as there are inputs */
			                       FCNN_5L->recurrence=F;
			                       FCNN_5L->number_of_recurrent_connected_layers=0;
			                       FCNN_5L->source=0;
			                       FCNN_5L->destination=0;
			                       FCNN_5L->number_of_functions_for_creating_neuron=1;
			                       FCNN_5L->create_neuron=(void**)testmalloc((size_t)FCNN_5L->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_5L->create_neuron==0) exit_handling(27,1); 
			                       *(FCNN_5L->create_neuron+0)=create_FCNN_5L;
			                       FCNN_5L->create_neuron_population=create_neuron_population;
			                       FCNN_5L->prepare_input=0;
			                       FCNN_5L->number_linear_output_functions=4;
			                       FCNN_5L->node_linear_output=(void**)testmalloc((size_t)FCNN_5L->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_5L->node_linear_output==0) exit_handling(27,2);
			                       *(FCNN_5L->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_5L->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_5L->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_5L->node_linear_output+3)=RBF_exp;
			                       FCNN_5L->number_of_node_output_functions=4;
			                       FCNN_5L->node_output=(void**)testmalloc((size_t)FCNN_5L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L->node_output==0) exit_handling(27,3);
			                       *(FCNN_5L->node_output+0)=exp_node_output;
			                       *(FCNN_5L->node_output+1)=exp_positive_node_output;
			                       *(FCNN_5L->node_output+2)=treasureholded_node_output;
			                       *(FCNN_5L->node_output+3)=unchanged_linear_node_output;
			                       FCNN_5L->node_output_derivation=(void**)testmalloc((size_t)FCNN_5L->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L->node_output_derivation==0) exit_handling(27,4);
			                       *(FCNN_5L->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_5L->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_5L->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_5L->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_5L->number_of_firing_functions=1;
			                       FCNN_5L->firing_neuron=(void**)testmalloc((size_t)FCNN_5L->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_5L->firing_neuron==0) exit_handling(27,5);
			                       *(FCNN_5L->firing_neuron)=firing_standard_neuron;
			                       FCNN_5L->number_of_learning_algorithms=3;
			                       FCNN_5L->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_5L->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_5L->create_learning_algorithm==0) exit_handling(27,6);
			                       *(FCNN_5L->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_5L->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_5L->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_5L);
			                      } /* ; */


/* setting up FCNN_2L_W descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_descriptor() sets up neuron_type_descriptor for FCNN_2L_W (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W;
			                       FCNN_2L_W=MANTD((long int)1);
			                       FCNN_2L_W->name=MAC((long int)70);
			                       *(FCNN_2L_W->name+0)='F';
			                       *(FCNN_2L_W->name+1)='C';
			                       *(FCNN_2L_W->name+2)='N';
			                       *(FCNN_2L_W->name+3)='N';
			                       *(FCNN_2L_W->name+4)='_';
			                       *(FCNN_2L_W->name+5)='2';
			                       *(FCNN_2L_W->name+6)='L';
			                       *(FCNN_2L_W->name+7)='_';
			                       *(FCNN_2L_W->name+8)='W';
			                       *(FCNN_2L_W->name+9)='(';
			                       *(FCNN_2L_W->name+10)='F';
			                       *(FCNN_2L_W->name+11)='u';
			                       *(FCNN_2L_W->name+12)='l';
			                       *(FCNN_2L_W->name+13)='l';
			                       *(FCNN_2L_W->name+14)='y';
			                       *(FCNN_2L_W->name+15)='_';
			                       *(FCNN_2L_W->name+16)='C';
			                       *(FCNN_2L_W->name+17)='o';
			                       *(FCNN_2L_W->name+18)='n';
			                       *(FCNN_2L_W->name+19)='n';
			                       *(FCNN_2L_W->name+20)='e';
			                       *(FCNN_2L_W->name+21)='c';
			                       *(FCNN_2L_W->name+22)='t';
			                       *(FCNN_2L_W->name+23)='e';
			                       *(FCNN_2L_W->name+24)='d';
			                       *(FCNN_2L_W->name+25)='_';
			                       *(FCNN_2L_W->name+26)='N';
			                       *(FCNN_2L_W->name+27)='N';
			                       *(FCNN_2L_W->name+28)='_';
			                       *(FCNN_2L_W->name+29)='2';
			                       *(FCNN_2L_W->name+30)='_';
			                       *(FCNN_2L_W->name+31)='L';
			                       *(FCNN_2L_W->name+32)='a';
			                       *(FCNN_2L_W->name+33)='y';
			                       *(FCNN_2L_W->name+34)='e';
			                       *(FCNN_2L_W->name+35)='r';
			                       *(FCNN_2L_W->name+36)='s';
			                       *(FCNN_2L_W->name+37)='_';
			                       *(FCNN_2L_W->name+38)='r';
			                       *(FCNN_2L_W->name+39)='e';
			                       *(FCNN_2L_W->name+40)='c';
			                       *(FCNN_2L_W->name+41)='e';
			                       *(FCNN_2L_W->name+42)='i';
			                       *(FCNN_2L_W->name+43)='v';
			                       *(FCNN_2L_W->name+44)='i';
			                       *(FCNN_2L_W->name+45)='n';
			                       *(FCNN_2L_W->name+46)='g';
			                       *(FCNN_2L_W->name+47)='_';
			                       *(FCNN_2L_W->name+48)='i';
			                       *(FCNN_2L_W->name+49)='n';
			                       *(FCNN_2L_W->name+50)='p';
			                       *(FCNN_2L_W->name+51)='u';
			                       *(FCNN_2L_W->name+52)='t';
			                       *(FCNN_2L_W->name+53)='_';
			                       *(FCNN_2L_W->name+54)='t';
			                       *(FCNN_2L_W->name+55)='h';
			                       *(FCNN_2L_W->name+56)='r';
			                       *(FCNN_2L_W->name+57)='o';
			                       *(FCNN_2L_W->name+58)='u';
			                       *(FCNN_2L_W->name+59)='g';
			                       *(FCNN_2L_W->name+60)='h';
			                       *(FCNN_2L_W->name+61)='_';
			                       *(FCNN_2L_W->name+62)='W';
			                       *(FCNN_2L_W->name+63)='i';
			                       *(FCNN_2L_W->name+64)='n';
			                       *(FCNN_2L_W->name+65)='d';
			                       *(FCNN_2L_W->name+66)='o';
			                       *(FCNN_2L_W->name+67)='w';
			                       *(FCNN_2L_W->name+68)=')';
			                       *(FCNN_2L_W->name+69)=' ';
			                       FCNN_2L_W->number_of_Levels=2;
			                       FCNN_2L_W->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W->prepare_input()) */
			                       FCNN_2L_W->nodes_per_Level=MAI((long int)FCNN_2L_W->number_of_Levels);
			                       *(FCNN_2L_W->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W->recurrence=F;
			                       FCNN_2L_W->number_of_recurrent_connected_layers=0;
			                       FCNN_2L_W->source=0;
			                       FCNN_2L_W->destination=0;
			                       FCNN_2L_W->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W->create_neuron==0) exit_handling(31,1); 
			                       *(FCNN_2L_W->create_neuron+0)=create_FCNN_2L;
			                       FCNN_2L_W->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W->number_linear_output_functions=4;
			                       FCNN_2L_W->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W->node_linear_output==0) exit_handling(31,2);
			                       *(FCNN_2L_W->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_2L_W->node_linear_output+3)=RBF_exp;
			                       FCNN_2L_W->number_of_node_output_functions=4;
			                       FCNN_2L_W->node_output=(void**)testmalloc((size_t)FCNN_2L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W->node_output==0) exit_handling(31,3);
			                       *(FCNN_2L_W->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W->node_output_derivation==0) exit_handling(31,4);
			                       *(FCNN_2L_W->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W->number_of_firing_functions=1;
			                       FCNN_2L_W->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W->firing_neuron==0) exit_handling(31,5);
			                       *(FCNN_2L_W->firing_neuron)=firing_standard_neuron;
			                       FCNN_2L_W->number_of_learning_algorithms=3;
			                       FCNN_2L_W->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W->create_learning_algorithm==0) exit_handling(31,6);
			                       *(FCNN_2L_W->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_2L_W->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_2L_W);
			                      } /* ; */

/* setting up FCNN_3L_W descriptor */
/* neuron_type_descriptor* setup_FCNN_3L_W_descriptor() sets up neuron_type_descriptor for FCNN_3L_W (Fully Connected Neural Network with 3 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius) class of neurones */
neuron_type_descriptor* setup_FCNN_3L_W_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_3L_W;
			                       FCNN_3L_W=MANTD((long int)1);
			                       FCNN_3L_W->name=MAC((long int)70);
			                       *(FCNN_3L_W->name+0)='F';
			                       *(FCNN_3L_W->name+1)='C';
			                       *(FCNN_3L_W->name+2)='N';
			                       *(FCNN_3L_W->name+3)='N';
			                       *(FCNN_3L_W->name+4)='_';
			                       *(FCNN_3L_W->name+5)='3';
			                       *(FCNN_3L_W->name+6)='L';
			                       *(FCNN_3L_W->name+7)='_';
			                       *(FCNN_3L_W->name+8)='W';
			                       *(FCNN_3L_W->name+9)='(';
			                       *(FCNN_3L_W->name+10)='F';
			                       *(FCNN_3L_W->name+11)='u';
			                       *(FCNN_3L_W->name+12)='l';
			                       *(FCNN_3L_W->name+13)='l';
			                       *(FCNN_3L_W->name+14)='y';
			                       *(FCNN_3L_W->name+15)='_';
			                       *(FCNN_3L_W->name+16)='C';
			                       *(FCNN_3L_W->name+17)='o';
			                       *(FCNN_3L_W->name+18)='n';
			                       *(FCNN_3L_W->name+19)='n';
			                       *(FCNN_3L_W->name+20)='e';
			                       *(FCNN_3L_W->name+21)='c';
			                       *(FCNN_3L_W->name+22)='t';
			                       *(FCNN_3L_W->name+23)='e';
			                       *(FCNN_3L_W->name+24)='d';
			                       *(FCNN_3L_W->name+25)='_';
			                       *(FCNN_3L_W->name+26)='N';
			                       *(FCNN_3L_W->name+27)='N';
			                       *(FCNN_3L_W->name+28)='_';
			                       *(FCNN_3L_W->name+29)='3';
			                       *(FCNN_3L_W->name+30)='_';
			                       *(FCNN_3L_W->name+31)='L';
			                       *(FCNN_3L_W->name+32)='a';
			                       *(FCNN_3L_W->name+33)='y';
			                       *(FCNN_3L_W->name+34)='e';
			                       *(FCNN_3L_W->name+35)='r';
			                       *(FCNN_3L_W->name+36)='s';
			                       *(FCNN_3L_W->name+37)='_';
			                       *(FCNN_3L_W->name+38)='r';
			                       *(FCNN_3L_W->name+39)='e';
			                       *(FCNN_3L_W->name+40)='c';
			                       *(FCNN_3L_W->name+41)='e';
			                       *(FCNN_3L_W->name+42)='i';
			                       *(FCNN_3L_W->name+43)='v';
			                       *(FCNN_3L_W->name+44)='i';
			                       *(FCNN_3L_W->name+45)='n';
			                       *(FCNN_3L_W->name+46)='g';
			                       *(FCNN_3L_W->name+47)='_';
			                       *(FCNN_3L_W->name+48)='i';
			                       *(FCNN_3L_W->name+49)='n';
			                       *(FCNN_3L_W->name+50)='p';
			                       *(FCNN_3L_W->name+51)='u';
			                       *(FCNN_3L_W->name+52)='t';
			                       *(FCNN_3L_W->name+53)='_';
			                       *(FCNN_3L_W->name+54)='t';
			                       *(FCNN_3L_W->name+55)='h';
			                       *(FCNN_3L_W->name+56)='r';
			                       *(FCNN_3L_W->name+57)='o';
			                       *(FCNN_3L_W->name+58)='u';
			                       *(FCNN_3L_W->name+59)='g';
			                       *(FCNN_3L_W->name+60)='h';
			                       *(FCNN_3L_W->name+61)='_';
			                       *(FCNN_3L_W->name+62)='W';
			                       *(FCNN_3L_W->name+63)='i';
			                       *(FCNN_3L_W->name+64)='n';
			                       *(FCNN_3L_W->name+65)='d';
			                       *(FCNN_3L_W->name+66)='o';
			                       *(FCNN_3L_W->name+67)='w';
			                       *(FCNN_3L_W->name+68)=')';
			                       *(FCNN_3L_W->name+69)=' ';
			                       FCNN_3L_W->number_of_Levels=3;
			                       FCNN_3L_W->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_3L_W->prepare_input()) */
			                       FCNN_3L_W->nodes_per_Level=MAI((long int)FCNN_3L_W->number_of_Levels);
			                       *(FCNN_3L_W->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_3L_W->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_3L_W->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       FCNN_3L_W->recurrence=F;
			                       FCNN_3L_W->number_of_recurrent_connected_layers=0;
			                       FCNN_3L_W->source=0;
			                       FCNN_3L_W->destination=0;
			                       FCNN_3L_W->number_of_functions_for_creating_neuron=1;
			                       FCNN_3L_W->create_neuron=(void**)testmalloc((size_t)FCNN_3L_W->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_3L_W->create_neuron==0) exit_handling(30,1); 
			                       *(FCNN_3L_W->create_neuron+0)=create_FCNN_3L;
			                       FCNN_3L_W->create_neuron_population=create_neuron_population;
			                       FCNN_3L_W->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_3L_W->number_linear_output_functions=4;
			                       FCNN_3L_W->node_linear_output=(void**)testmalloc((size_t)FCNN_3L_W->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_3L_W->node_linear_output==0) exit_handling(30,2);
			                       *(FCNN_3L_W->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_3L_W->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_3L_W->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_3L_W->node_linear_output+3)=RBF_exp;
			                       FCNN_3L_W->number_of_node_output_functions=4;
			                       FCNN_3L_W->node_output=(void**)testmalloc((size_t)FCNN_3L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_W->node_output==0) exit_handling(30,3);
			                       *(FCNN_3L_W->node_output+0)=exp_node_output;
			                       *(FCNN_3L_W->node_output+1)=exp_positive_node_output;
			                       *(FCNN_3L_W->node_output+2)=treasureholded_node_output;
			                       *(FCNN_3L_W->node_output+3)=unchanged_linear_node_output;
			                       FCNN_3L_W->node_output_derivation=(void**)testmalloc((size_t)FCNN_3L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_W->node_output_derivation==0) exit_handling(30,4);
			                       *(FCNN_3L_W->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_3L_W->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_3L_W->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_3L_W->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_3L_W->number_of_firing_functions=1;
			                       FCNN_3L_W->firing_neuron=(void**)testmalloc((size_t)FCNN_3L_W->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_3L_W->firing_neuron==0) exit_handling(30,5);
			                       *(FCNN_3L_W->firing_neuron)=firing_standard_neuron;
			                       FCNN_3L_W->number_of_learning_algorithms=3;
			                       FCNN_3L_W->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_3L_W->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_3L_W->create_learning_algorithm==0) exit_handling(30,6);
			                       *(FCNN_3L_W->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_3L_W->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_3L_W->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_3L_W);
			                      } /* ; */

/* setting up FCNN_4L_W descriptor */
/* neuron_type_descriptor* setup_FCNN_4L_W_descriptor() sets up neuron_type_descriptor for FCNN_4L_W (Fully Connected Neural Network with 4 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius) class of neurones */
neuron_type_descriptor* setup_FCNN_4L_W_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_4L_W;
			                       FCNN_4L_W=MANTD((long int)1);
			                       FCNN_4L_W->name=MAC((long int)70);
			                       *(FCNN_4L_W->name+0)='F';
			                       *(FCNN_4L_W->name+1)='C';
			                       *(FCNN_4L_W->name+2)='N';
			                       *(FCNN_4L_W->name+3)='N';
			                       *(FCNN_4L_W->name+4)='_';
			                       *(FCNN_4L_W->name+5)='4';
			                       *(FCNN_4L_W->name+6)='L';
			                       *(FCNN_4L_W->name+7)='_';
			                       *(FCNN_4L_W->name+8)='W';
			                       *(FCNN_4L_W->name+9)='(';
			                       *(FCNN_4L_W->name+10)='F';
			                       *(FCNN_4L_W->name+11)='u';
			                       *(FCNN_4L_W->name+12)='l';
			                       *(FCNN_4L_W->name+13)='l';
			                       *(FCNN_4L_W->name+14)='y';
			                       *(FCNN_4L_W->name+15)='_';
			                       *(FCNN_4L_W->name+16)='C';
			                       *(FCNN_4L_W->name+17)='o';
			                       *(FCNN_4L_W->name+18)='n';
			                       *(FCNN_4L_W->name+19)='n';
			                       *(FCNN_4L_W->name+20)='e';
			                       *(FCNN_4L_W->name+21)='c';
			                       *(FCNN_4L_W->name+22)='t';
			                       *(FCNN_4L_W->name+23)='e';
			                       *(FCNN_4L_W->name+24)='d';
			                       *(FCNN_4L_W->name+25)='_';
			                       *(FCNN_4L_W->name+26)='N';
			                       *(FCNN_4L_W->name+27)='N';
			                       *(FCNN_4L_W->name+28)='_';
			                       *(FCNN_4L_W->name+29)='4';
			                       *(FCNN_4L_W->name+30)='_';
			                       *(FCNN_4L_W->name+31)='L';
			                       *(FCNN_4L_W->name+32)='a';
			                       *(FCNN_4L_W->name+33)='y';
			                       *(FCNN_4L_W->name+34)='e';
			                       *(FCNN_4L_W->name+35)='r';
			                       *(FCNN_4L_W->name+36)='s';
			                       *(FCNN_4L_W->name+37)='_';
			                       *(FCNN_4L_W->name+38)='r';
			                       *(FCNN_4L_W->name+39)='e';
			                       *(FCNN_4L_W->name+40)='c';
			                       *(FCNN_4L_W->name+41)='e';
			                       *(FCNN_4L_W->name+42)='i';
			                       *(FCNN_4L_W->name+43)='v';
			                       *(FCNN_4L_W->name+44)='i';
			                       *(FCNN_4L_W->name+45)='n';
			                       *(FCNN_4L_W->name+46)='g';
			                       *(FCNN_4L_W->name+47)='_';
			                       *(FCNN_4L_W->name+48)='i';
			                       *(FCNN_4L_W->name+49)='n';
			                       *(FCNN_4L_W->name+50)='p';
			                       *(FCNN_4L_W->name+51)='u';
			                       *(FCNN_4L_W->name+52)='t';
			                       *(FCNN_4L_W->name+53)='_';
			                       *(FCNN_4L_W->name+54)='t';
			                       *(FCNN_4L_W->name+55)='h';
			                       *(FCNN_4L_W->name+56)='r';
			                       *(FCNN_4L_W->name+57)='o';
			                       *(FCNN_4L_W->name+58)='u';
			                       *(FCNN_4L_W->name+59)='g';
			                       *(FCNN_4L_W->name+60)='h';
			                       *(FCNN_4L_W->name+61)='_';
			                       *(FCNN_4L_W->name+62)='W';
			                       *(FCNN_4L_W->name+63)='i';
			                       *(FCNN_4L_W->name+64)='n';
			                       *(FCNN_4L_W->name+65)='d';
			                       *(FCNN_4L_W->name+66)='o';
			                       *(FCNN_4L_W->name+67)='w';
			                       *(FCNN_4L_W->name+68)=')';
			                       *(FCNN_4L_W->name+69)=' ';
			                       FCNN_4L_W->number_of_Levels=4;
			                       FCNN_4L_W->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_4L_W->prepare_input()) */
			                       FCNN_4L_W->nodes_per_Level=MAI((long int)FCNN_4L_W->number_of_Levels);
			                       *(FCNN_4L_W->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_4L_W->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_4L_W->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       *(FCNN_4L_W->nodes_per_Level+3)=0; /* means there is the same number of nodes in the 4th Level as there are inputs */
			                       FCNN_4L_W->recurrence=F;
			                       FCNN_4L_W->number_of_recurrent_connected_layers=0;
			                       FCNN_4L_W->source=0;
			                       FCNN_4L_W->destination=0;
			                       FCNN_4L_W->number_of_functions_for_creating_neuron=1;
			                       FCNN_4L_W->create_neuron=(void**)testmalloc((size_t)FCNN_4L_W->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_4L_W->create_neuron==0) exit_handling(29,1); 
			                       *(FCNN_4L_W->create_neuron+0)=create_FCNN_4L;
			                       FCNN_4L_W->create_neuron_population=create_neuron_population;
			                       FCNN_4L_W->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_4L_W->number_linear_output_functions=4;
			                       FCNN_4L_W->node_linear_output=(void**)testmalloc((size_t)FCNN_4L_W->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_4L_W->node_linear_output==0) exit_handling(29,2);
			                       *(FCNN_4L_W->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_4L_W->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_4L_W->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_4L_W->node_linear_output+3)=RBF_exp;
			                       FCNN_4L_W->number_of_node_output_functions=4;
			                       FCNN_4L_W->node_output=(void**)testmalloc((size_t)FCNN_4L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_W->node_output==0) exit_handling(29,3);
			                       *(FCNN_4L_W->node_output+0)=exp_node_output;
			                       *(FCNN_4L_W->node_output+1)=exp_positive_node_output;
			                       *(FCNN_4L_W->node_output+2)=treasureholded_node_output;
			                       *(FCNN_4L_W->node_output+3)=unchanged_linear_node_output;
			                       FCNN_4L_W->node_output_derivation=(void**)testmalloc((size_t)FCNN_4L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_W->node_output_derivation==0) exit_handling(29,4);
			                       *(FCNN_4L_W->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_4L_W->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_4L_W->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_4L_W->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_4L_W->number_of_firing_functions=1;
			                       FCNN_4L_W->firing_neuron=(void**)testmalloc((size_t)FCNN_4L_W->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_4L_W->firing_neuron==0) exit_handling(29,5);
			                       *(FCNN_4L_W->firing_neuron)=firing_standard_neuron;
			                       FCNN_4L_W->number_of_learning_algorithms=3;
			                       FCNN_4L_W->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_4L_W->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_4L_W->create_learning_algorithm==0) exit_handling(29,6);
			                       *(FCNN_4L_W->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_4L_W->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_4L_W->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_4L_W);
			                      } /* ; */

/* setting up FCNN_5L_W descriptor */
/* neuron_type_descriptor* setup_FCNN_5L_W_descriptor() sets up neuron_type_descriptor for FCNN_5L_W (Fully Connected Neural Network with 5 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius) class of neurones */
neuron_type_descriptor* setup_FCNN_5L_W_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_5L_W;
			                       FCNN_5L_W=MANTD((long int)1);
			                       FCNN_5L_W->name=MAC((long int)70);
			                       *(FCNN_5L_W->name+0)='F';
			                       *(FCNN_5L_W->name+1)='C';
			                       *(FCNN_5L_W->name+2)='N';
			                       *(FCNN_5L_W->name+3)='N';
			                       *(FCNN_5L_W->name+4)='_';
			                       *(FCNN_5L_W->name+5)='5';
			                       *(FCNN_5L_W->name+6)='L';
			                       *(FCNN_5L_W->name+7)='_';
			                       *(FCNN_5L_W->name+8)='W';
			                       *(FCNN_5L_W->name+9)='(';
			                       *(FCNN_5L_W->name+10)='F';
			                       *(FCNN_5L_W->name+11)='u';
			                       *(FCNN_5L_W->name+12)='l';
			                       *(FCNN_5L_W->name+13)='l';
			                       *(FCNN_5L_W->name+14)='y';
			                       *(FCNN_5L_W->name+15)='_';
			                       *(FCNN_5L_W->name+16)='C';
			                       *(FCNN_5L_W->name+17)='o';
			                       *(FCNN_5L_W->name+18)='n';
			                       *(FCNN_5L_W->name+19)='n';
			                       *(FCNN_5L_W->name+20)='e';
			                       *(FCNN_5L_W->name+21)='c';
			                       *(FCNN_5L_W->name+22)='t';
			                       *(FCNN_5L_W->name+23)='e';
			                       *(FCNN_5L_W->name+24)='d';
			                       *(FCNN_5L_W->name+25)='_';
			                       *(FCNN_5L_W->name+26)='N';
			                       *(FCNN_5L_W->name+27)='N';
			                       *(FCNN_5L_W->name+28)='_';
			                       *(FCNN_5L_W->name+29)='5';
			                       *(FCNN_5L_W->name+30)='_';
			                       *(FCNN_5L_W->name+31)='L';
			                       *(FCNN_5L_W->name+32)='a';
			                       *(FCNN_5L_W->name+33)='y';
			                       *(FCNN_5L_W->name+34)='e';
			                       *(FCNN_5L_W->name+35)='r';
			                       *(FCNN_5L_W->name+36)='s';
			                       *(FCNN_5L_W->name+37)='_';
			                       *(FCNN_5L_W->name+38)='r';
			                       *(FCNN_5L_W->name+39)='e';
			                       *(FCNN_5L_W->name+40)='c';
			                       *(FCNN_5L_W->name+41)='e';
			                       *(FCNN_5L_W->name+42)='i';
			                       *(FCNN_5L_W->name+43)='v';
			                       *(FCNN_5L_W->name+44)='i';
			                       *(FCNN_5L_W->name+45)='n';
			                       *(FCNN_5L_W->name+46)='g';
			                       *(FCNN_5L_W->name+47)='_';
			                       *(FCNN_5L_W->name+48)='i';
			                       *(FCNN_5L_W->name+49)='n';
			                       *(FCNN_5L_W->name+50)='p';
			                       *(FCNN_5L_W->name+51)='u';
			                       *(FCNN_5L_W->name+52)='t';
			                       *(FCNN_5L_W->name+53)='_';
			                       *(FCNN_5L_W->name+54)='t';
			                       *(FCNN_5L_W->name+55)='h';
			                       *(FCNN_5L_W->name+56)='r';
			                       *(FCNN_5L_W->name+57)='o';
			                       *(FCNN_5L_W->name+58)='u';
			                       *(FCNN_5L_W->name+59)='g';
			                       *(FCNN_5L_W->name+60)='h';
			                       *(FCNN_5L_W->name+61)='_';
			                       *(FCNN_5L_W->name+62)='W';
			                       *(FCNN_5L_W->name+63)='i';
			                       *(FCNN_5L_W->name+64)='n';
			                       *(FCNN_5L_W->name+65)='d';
			                       *(FCNN_5L_W->name+66)='o';
			                       *(FCNN_5L_W->name+67)='w';
			                       *(FCNN_5L_W->name+68)=')';
			                       *(FCNN_5L_W->name+69)=' ';
			                       FCNN_5L_W->number_of_Levels=5;
			                       FCNN_5L_W->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_5L_W->prepare_input()) */
			                       FCNN_5L_W->nodes_per_Level=MAI((long int)FCNN_5L_W->number_of_Levels);
			                       *(FCNN_5L_W->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_5L_W->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       *(FCNN_5L_W->nodes_per_Level+2)=0; /* means there is the same number of nodes in the 3rd Level as there are inputs */
			                       *(FCNN_5L_W->nodes_per_Level+3)=0; /* means there is the same number of nodes in the 4th Level as there are inputs */
			                       *(FCNN_5L_W->nodes_per_Level+4)=0; /* means there is the same number of nodes in the 5th Level as there are inputs */
			                       FCNN_5L_W->recurrence=F;
			                       FCNN_5L_W->number_of_recurrent_connected_layers=0;
			                       FCNN_5L_W->source=0;
			                       FCNN_5L_W->destination=0;
			                       FCNN_5L_W->number_of_functions_for_creating_neuron=1;
			                       FCNN_5L_W->create_neuron=(void**)testmalloc((size_t)FCNN_5L_W->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_5L_W->create_neuron==0) exit_handling(28,1); 
			                       *(FCNN_5L_W->create_neuron+0)=create_FCNN_5L;
			                       FCNN_5L_W->create_neuron_population=create_neuron_population;
			                       FCNN_5L_W->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_5L_W->number_linear_output_functions=4;
			                       FCNN_5L_W->node_linear_output=(void**)testmalloc((size_t)FCNN_5L_W->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_5L_W->node_linear_output==0) exit_handling(28,2);
			                       *(FCNN_5L_W->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_5L_W->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_5L_W->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_5L_W->node_linear_output+3)=RBF_exp;
			                       FCNN_5L_W->number_of_node_output_functions=4;
			                       FCNN_5L_W->node_output=(void**)testmalloc((size_t)FCNN_5L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_W->node_output==0) exit_handling(28,3);
			                       *(FCNN_5L_W->node_output+0)=exp_node_output;
			                       *(FCNN_5L_W->node_output+1)=exp_positive_node_output;
			                       *(FCNN_5L_W->node_output+2)=treasureholded_node_output;
			                       *(FCNN_5L_W->node_output+3)=unchanged_linear_node_output;
			                       FCNN_5L_W->node_output_derivation=(void**)testmalloc((size_t)FCNN_5L_W->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_W->node_output_derivation==0) exit_handling(28,4);
			                       *(FCNN_5L_W->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_5L_W->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_5L_W->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_5L_W->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_5L_W->number_of_firing_functions=1;
			                       FCNN_5L_W->firing_neuron=(void**)testmalloc((size_t)FCNN_5L_W->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_5L_W->firing_neuron==0) exit_handling(28,5);
			                       *(FCNN_5L_W->firing_neuron)=firing_standard_neuron;
			                       FCNN_5L_W->number_of_learning_algorithms=3;
			                       FCNN_5L_W->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_5L_W->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_5L_W->create_learning_algorithm==0) exit_handling(28,6);
			                       *(FCNN_5L_W->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_5L_W->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_5L_W->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_5L_W);
			                      } /* ; */


/* setting up FCNN_2L_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out;
			                       FCNN_2L_1out=MANTD((long int)1);
			                       FCNN_2L_1out->name=MAC((long int)51);
			                       *(FCNN_2L_1out->name+0)='F';
			                       *(FCNN_2L_1out->name+1)='C';
			                       *(FCNN_2L_1out->name+2)='N';
			                       *(FCNN_2L_1out->name+3)='N';
			                       *(FCNN_2L_1out->name+4)='_';
			                       *(FCNN_2L_1out->name+5)='2';
			                       *(FCNN_2L_1out->name+6)='L';
			                       *(FCNN_2L_1out->name+7)='_';
			                       *(FCNN_2L_1out->name+8)='1';
			                       *(FCNN_2L_1out->name+9)='o';
			                       *(FCNN_2L_1out->name+10)='u';
			                       *(FCNN_2L_1out->name+11)='t';
			                       *(FCNN_2L_1out->name+12)='(';
			                       *(FCNN_2L_1out->name+13)='F';
			                       *(FCNN_2L_1out->name+14)='u';
			                       *(FCNN_2L_1out->name+15)='l';
			                       *(FCNN_2L_1out->name+16)='l';
			                       *(FCNN_2L_1out->name+17)='y';
			                       *(FCNN_2L_1out->name+18)='_';
			                       *(FCNN_2L_1out->name+19)='C';
			                       *(FCNN_2L_1out->name+20)='o';
			                       *(FCNN_2L_1out->name+21)='n';
			                       *(FCNN_2L_1out->name+22)='n';
			                       *(FCNN_2L_1out->name+23)='e';
			                       *(FCNN_2L_1out->name+24)='c';
			                       *(FCNN_2L_1out->name+25)='t';
			                       *(FCNN_2L_1out->name+26)='e';
			                       *(FCNN_2L_1out->name+27)='d';
			                       *(FCNN_2L_1out->name+28)='_';
			                       *(FCNN_2L_1out->name+29)='N';
			                       *(FCNN_2L_1out->name+30)='N';
			                       *(FCNN_2L_1out->name+31)='_';
			                       *(FCNN_2L_1out->name+32)='2';
			                       *(FCNN_2L_1out->name+33)='_';
			                       *(FCNN_2L_1out->name+34)='L';
			                       *(FCNN_2L_1out->name+35)='a';
			                       *(FCNN_2L_1out->name+36)='y';
			                       *(FCNN_2L_1out->name+37)='e';
			                       *(FCNN_2L_1out->name+38)='r';
			                       *(FCNN_2L_1out->name+39)='s';
			                       *(FCNN_2L_1out->name+40)='_';
			                       *(FCNN_2L_1out->name+41)='1';
			                       *(FCNN_2L_1out->name+42)='_';
			                       *(FCNN_2L_1out->name+43)='o';
			                       *(FCNN_2L_1out->name+44)='u';
			                       *(FCNN_2L_1out->name+45)='t';
			                       *(FCNN_2L_1out->name+46)='p';
			                       *(FCNN_2L_1out->name+47)='u';
			                       *(FCNN_2L_1out->name+48)='t';
			                       *(FCNN_2L_1out->name+49)=')';
			                       *(FCNN_2L_1out->name+50)=' ';
			                       FCNN_2L_1out->number_of_Levels=2;
			                       FCNN_2L_1out->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L_1out->nodes_per_Level=MAI((long int)FCNN_2L_1out->number_of_Levels);
			                       *(FCNN_2L_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out->recurrence=F;
			                       FCNN_2L_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_2L_1out->source=0;
			                       FCNN_2L_1out->destination=0;
			                       FCNN_2L_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out->create_neuron==0) exit_handling(32,1); 
			                       *(FCNN_2L_1out->create_neuron+0)=create_FCNN_2L_1out;
			                       FCNN_2L_1out->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out->prepare_input=0;
			                       FCNN_2L_1out->number_linear_output_functions=4;
			                       FCNN_2L_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out->node_linear_output==0) exit_handling(32,2);
			                       *(FCNN_2L_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_2L_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_2L_1out->number_of_node_output_functions=4;
			                       FCNN_2L_1out->node_output=(void**)testmalloc((size_t)FCNN_2L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out->node_output==0) exit_handling(32,3);
			                       *(FCNN_2L_1out->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out->node_output_derivation==0) exit_handling(32,4);
			                       *(FCNN_2L_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out->number_of_firing_functions=1;
			                       FCNN_2L_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out->firing_neuron==0) exit_handling(32,5);
			                       *(FCNN_2L_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_2L_1out->number_of_learning_algorithms=3;
			                       FCNN_2L_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out->create_learning_algorithm==0) exit_handling(32,6);
			                       *(FCNN_2L_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_2L_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_2L_1out);
			                      } /* ; */

/* setting up FCNN_3L_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_3L_1out_descriptor() sets up neuron_type_descriptor for FCNN_3L_1out (Fully Connected Neural Network with 3 Layers and only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_3L_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_3L_1out;
			                       FCNN_3L_1out=MANTD((long int)1);
			                       FCNN_3L_1out->name=MAC((long int)51);
			                       *(FCNN_3L_1out->name+0)='F';
			                       *(FCNN_3L_1out->name+1)='C';
			                       *(FCNN_3L_1out->name+2)='N';
			                       *(FCNN_3L_1out->name+3)='N';
			                       *(FCNN_3L_1out->name+4)='_';
			                       *(FCNN_3L_1out->name+5)='3';
			                       *(FCNN_3L_1out->name+6)='L';
			                       *(FCNN_3L_1out->name+7)='_';
			                       *(FCNN_3L_1out->name+8)='1';
			                       *(FCNN_3L_1out->name+9)='o';
			                       *(FCNN_3L_1out->name+10)='u';
			                       *(FCNN_3L_1out->name+11)='t';
			                       *(FCNN_3L_1out->name+12)='(';
			                       *(FCNN_3L_1out->name+13)='F';
			                       *(FCNN_3L_1out->name+14)='u';
			                       *(FCNN_3L_1out->name+15)='l';
			                       *(FCNN_3L_1out->name+16)='l';
			                       *(FCNN_3L_1out->name+17)='y';
			                       *(FCNN_3L_1out->name+18)='_';
			                       *(FCNN_3L_1out->name+19)='C';
			                       *(FCNN_3L_1out->name+20)='o';
			                       *(FCNN_3L_1out->name+21)='n';
			                       *(FCNN_3L_1out->name+22)='n';
			                       *(FCNN_3L_1out->name+23)='e';
			                       *(FCNN_3L_1out->name+24)='c';
			                       *(FCNN_3L_1out->name+25)='t';
			                       *(FCNN_3L_1out->name+26)='e';
			                       *(FCNN_3L_1out->name+27)='d';
			                       *(FCNN_3L_1out->name+28)='_';
			                       *(FCNN_3L_1out->name+29)='N';
			                       *(FCNN_3L_1out->name+30)='N';
			                       *(FCNN_3L_1out->name+31)='_';
			                       *(FCNN_3L_1out->name+32)='3';
			                       *(FCNN_3L_1out->name+33)='_';
			                       *(FCNN_3L_1out->name+34)='L';
			                       *(FCNN_3L_1out->name+35)='a';
			                       *(FCNN_3L_1out->name+36)='y';
			                       *(FCNN_3L_1out->name+37)='e';
			                       *(FCNN_3L_1out->name+38)='r';
			                       *(FCNN_3L_1out->name+39)='s';
			                       *(FCNN_3L_1out->name+40)='_';
			                       *(FCNN_3L_1out->name+41)='1';
			                       *(FCNN_3L_1out->name+42)='_';
			                       *(FCNN_3L_1out->name+43)='o';
			                       *(FCNN_3L_1out->name+44)='u';
			                       *(FCNN_3L_1out->name+45)='t';
			                       *(FCNN_3L_1out->name+46)='p';
			                       *(FCNN_3L_1out->name+47)='u';
			                       *(FCNN_3L_1out->name+48)='t';
			                       *(FCNN_3L_1out->name+49)=')';
			                       *(FCNN_3L_1out->name+50)=' ';
			                       FCNN_3L_1out->number_of_Levels=3;
			                       FCNN_3L_1out->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_3L_1out->nodes_per_Level=MAI((long int)FCNN_3L_1out->number_of_Levels);
			                       *(FCNN_3L_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_3L_1out->nodes_per_Level+1)=-10; /* means number of nodes in the 2nd Level is arithmetic mean of numbers of corners in the first and the last layer */
			                       *(FCNN_3L_1out->nodes_per_Level+2)=1; /* just one output = just one node in the last layer */
			                       FCNN_3L_1out->recurrence=F;
			                       FCNN_3L_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_3L_1out->source=0;
			                       FCNN_3L_1out->destination=0;
			                       FCNN_3L_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_3L_1out->create_neuron=(void**)testmalloc((size_t)FCNN_3L_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_3L_1out->create_neuron==0) exit_handling(33,1); 
			                       *(FCNN_3L_1out->create_neuron+0)=create_FCNN_3L_1out;
			                       FCNN_3L_1out->create_neuron_population=create_neuron_population;
			                       FCNN_3L_1out->prepare_input=0;
			                       FCNN_3L_1out->number_linear_output_functions=4;
			                       FCNN_3L_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_3L_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_3L_1out->node_linear_output==0) exit_handling(33,2);
			                       *(FCNN_3L_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_3L_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_3L_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_3L_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_3L_1out->number_of_node_output_functions=4;
			                       FCNN_3L_1out->node_output=(void**)testmalloc((size_t)FCNN_3L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_1out->node_output==0) exit_handling(33,3);
			                       *(FCNN_3L_1out->node_output+0)=exp_node_output;
			                       *(FCNN_3L_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_3L_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_3L_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_3L_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_3L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_1out->node_output_derivation==0) exit_handling(33,4);
			                       *(FCNN_3L_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_3L_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_3L_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_3L_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_3L_1out->number_of_firing_functions=1;
			                       FCNN_3L_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_3L_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_3L_1out->firing_neuron==0) exit_handling(33,5);
			                       *(FCNN_3L_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_3L_1out->number_of_learning_algorithms=3;
			                       FCNN_3L_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_3L_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_3L_1out->create_learning_algorithm==0) exit_handling(33,6);
			                       *(FCNN_3L_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_3L_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_3L_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_3L_1out);
			                      } /* ; */

/* setting up FCNN_4L_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_4L_1out_descriptor() sets up neuron_type_descriptor for FCNN_4L_1out (Fully Connected Neural Network with 4 Layers and only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_4L_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_4L_1out;
			                       FCNN_4L_1out=MANTD((long int)1);
			                       FCNN_4L_1out->name=MAC((long int)51);
			                       *(FCNN_4L_1out->name+0)='F';
			                       *(FCNN_4L_1out->name+1)='C';
			                       *(FCNN_4L_1out->name+2)='N';
			                       *(FCNN_4L_1out->name+3)='N';
			                       *(FCNN_4L_1out->name+4)='_';
			                       *(FCNN_4L_1out->name+5)='4';
			                       *(FCNN_4L_1out->name+6)='L';
			                       *(FCNN_4L_1out->name+7)='_';
			                       *(FCNN_4L_1out->name+8)='1';
			                       *(FCNN_4L_1out->name+9)='o';
			                       *(FCNN_4L_1out->name+10)='u';
			                       *(FCNN_4L_1out->name+11)='t';
			                       *(FCNN_4L_1out->name+12)='(';
			                       *(FCNN_4L_1out->name+13)='F';
			                       *(FCNN_4L_1out->name+14)='u';
			                       *(FCNN_4L_1out->name+15)='l';
			                       *(FCNN_4L_1out->name+16)='l';
			                       *(FCNN_4L_1out->name+17)='y';
			                       *(FCNN_4L_1out->name+18)='_';
			                       *(FCNN_4L_1out->name+19)='C';
			                       *(FCNN_4L_1out->name+20)='o';
			                       *(FCNN_4L_1out->name+21)='n';
			                       *(FCNN_4L_1out->name+22)='n';
			                       *(FCNN_4L_1out->name+23)='e';
			                       *(FCNN_4L_1out->name+24)='c';
			                       *(FCNN_4L_1out->name+25)='t';
			                       *(FCNN_4L_1out->name+26)='e';
			                       *(FCNN_4L_1out->name+27)='d';
			                       *(FCNN_4L_1out->name+28)='_';
			                       *(FCNN_4L_1out->name+29)='N';
			                       *(FCNN_4L_1out->name+30)='N';
			                       *(FCNN_4L_1out->name+31)='_';
			                       *(FCNN_4L_1out->name+32)='4';
			                       *(FCNN_4L_1out->name+33)='_';
			                       *(FCNN_4L_1out->name+34)='L';
			                       *(FCNN_4L_1out->name+35)='a';
			                       *(FCNN_4L_1out->name+36)='y';
			                       *(FCNN_4L_1out->name+37)='e';
			                       *(FCNN_4L_1out->name+38)='r';
			                       *(FCNN_4L_1out->name+39)='s';
			                       *(FCNN_4L_1out->name+40)='_';
			                       *(FCNN_4L_1out->name+41)='1';
			                       *(FCNN_4L_1out->name+42)='_';
			                       *(FCNN_4L_1out->name+43)='o';
			                       *(FCNN_4L_1out->name+44)='u';
			                       *(FCNN_4L_1out->name+45)='t';
			                       *(FCNN_4L_1out->name+46)='p';
			                       *(FCNN_4L_1out->name+47)='u';
			                       *(FCNN_4L_1out->name+48)='t';
			                       *(FCNN_4L_1out->name+49)=')';
			                       *(FCNN_4L_1out->name+50)=' ';
			                       FCNN_4L_1out->number_of_Levels=4;
			                       FCNN_4L_1out->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_4L_1out->nodes_per_Level=MAI((long int)FCNN_4L_1out->number_of_Levels);
			                       *(FCNN_4L_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_4L_1out->nodes_per_Level+1)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_4L_1out->nodes_per_Level+2)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_4L_1out->nodes_per_Level+3)=1; /* just one output = just one node in the last layer */
			                       FCNN_4L_1out->recurrence=F;
			                       FCNN_4L_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_4L_1out->source=0;
			                       FCNN_4L_1out->destination=0;
			                       FCNN_4L_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_4L_1out->create_neuron=(void**)testmalloc((size_t)FCNN_4L_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_4L_1out->create_neuron==0) exit_handling(34,1); 
			                       *(FCNN_4L_1out->create_neuron+0)=create_FCNN_4L_1out;
			                       FCNN_4L_1out->create_neuron_population=create_neuron_population;
			                       FCNN_4L_1out->prepare_input=0;
			                       FCNN_4L_1out->number_linear_output_functions=4;
			                       FCNN_4L_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_4L_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_4L_1out->node_linear_output==0) exit_handling(34,2);
			                       *(FCNN_4L_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_4L_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_4L_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_4L_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_4L_1out->number_of_node_output_functions=4;
			                       FCNN_4L_1out->node_output=(void**)testmalloc((size_t)FCNN_4L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_1out->node_output==0) exit_handling(34,3);
			                       *(FCNN_4L_1out->node_output+0)=exp_node_output;
			                       *(FCNN_4L_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_4L_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_4L_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_4L_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_4L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_1out->node_output_derivation==0) exit_handling(34,4);
			                       *(FCNN_4L_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_4L_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_4L_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_4L_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_4L_1out->number_of_firing_functions=1;
			                       FCNN_4L_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_4L_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_4L_1out->firing_neuron==0) exit_handling(34,5);
			                       *(FCNN_4L_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_4L_1out->number_of_learning_algorithms=3;
			                       FCNN_4L_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_4L_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_4L_1out->create_learning_algorithm==0) exit_handling(34,6);
			                       *(FCNN_4L_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_4L_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_4L_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_4L_1out);
			                      } /* ; */

/* setting up FCNN_5L_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_5L_1out_descriptor() sets up neuron_type_descriptor for FCNN_5L_1out (Fully Connected Neural Network with 5 Layers and only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_5L_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_5L_1out;
			                       FCNN_5L_1out=MANTD((long int)1);
			                       FCNN_5L_1out->name=MAC((long int)51);
			                       *(FCNN_5L_1out->name+0)='F';
			                       *(FCNN_5L_1out->name+1)='C';
			                       *(FCNN_5L_1out->name+2)='N';
			                       *(FCNN_5L_1out->name+3)='N';
			                       *(FCNN_5L_1out->name+4)='_';
			                       *(FCNN_5L_1out->name+5)='5';
			                       *(FCNN_5L_1out->name+6)='L';
			                       *(FCNN_5L_1out->name+7)='_';
			                       *(FCNN_5L_1out->name+8)='1';
			                       *(FCNN_5L_1out->name+9)='o';
			                       *(FCNN_5L_1out->name+10)='u';
			                       *(FCNN_5L_1out->name+11)='t';
			                       *(FCNN_5L_1out->name+12)='(';
			                       *(FCNN_5L_1out->name+13)='F';
			                       *(FCNN_5L_1out->name+14)='u';
			                       *(FCNN_5L_1out->name+15)='l';
			                       *(FCNN_5L_1out->name+16)='l';
			                       *(FCNN_5L_1out->name+17)='y';
			                       *(FCNN_5L_1out->name+18)='_';
			                       *(FCNN_5L_1out->name+19)='C';
			                       *(FCNN_5L_1out->name+20)='o';
			                       *(FCNN_5L_1out->name+21)='n';
			                       *(FCNN_5L_1out->name+22)='n';
			                       *(FCNN_5L_1out->name+23)='e';
			                       *(FCNN_5L_1out->name+24)='c';
			                       *(FCNN_5L_1out->name+25)='t';
			                       *(FCNN_5L_1out->name+26)='e';
			                       *(FCNN_5L_1out->name+27)='d';
			                       *(FCNN_5L_1out->name+28)='_';
			                       *(FCNN_5L_1out->name+29)='N';
			                       *(FCNN_5L_1out->name+30)='N';
			                       *(FCNN_5L_1out->name+31)='_';
			                       *(FCNN_5L_1out->name+32)='5';
			                       *(FCNN_5L_1out->name+33)='_';
			                       *(FCNN_5L_1out->name+34)='L';
			                       *(FCNN_5L_1out->name+35)='a';
			                       *(FCNN_5L_1out->name+36)='y';
			                       *(FCNN_5L_1out->name+37)='e';
			                       *(FCNN_5L_1out->name+38)='r';
			                       *(FCNN_5L_1out->name+39)='s';
			                       *(FCNN_5L_1out->name+40)='_';
			                       *(FCNN_5L_1out->name+41)='1';
			                       *(FCNN_5L_1out->name+42)='_';
			                       *(FCNN_5L_1out->name+43)='o';
			                       *(FCNN_5L_1out->name+44)='u';
			                       *(FCNN_5L_1out->name+45)='t';
			                       *(FCNN_5L_1out->name+46)='p';
			                       *(FCNN_5L_1out->name+47)='u';
			                       *(FCNN_5L_1out->name+48)='t';
			                       *(FCNN_5L_1out->name+49)=')';
			                       *(FCNN_5L_1out->name+50)=' ';
			                       FCNN_5L_1out->number_of_Levels=5;
			                       FCNN_5L_1out->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_5L_1out->nodes_per_Level=MAI((long int)FCNN_5L_1out->number_of_Levels);
			                       *(FCNN_5L_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_5L_1out->nodes_per_Level+1)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_1out->nodes_per_Level+2)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_1out->nodes_per_Level+3)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_1out->nodes_per_Level+4)=1; /* just one output = just one node in the last layer */
			                       FCNN_5L_1out->recurrence=F;
			                       FCNN_5L_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_5L_1out->source=0;
			                       FCNN_5L_1out->destination=0;
			                       FCNN_5L_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_5L_1out->create_neuron=(void**)testmalloc((size_t)FCNN_5L_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_5L_1out->create_neuron==0) exit_handling(35,1); 
			                       *(FCNN_5L_1out->create_neuron+0)=create_FCNN_5L_1out;
			                       FCNN_5L_1out->create_neuron_population=create_neuron_population;
			                       FCNN_5L_1out->prepare_input=0;
			                       FCNN_5L_1out->number_linear_output_functions=4;
			                       FCNN_5L_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_5L_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_5L_1out->node_linear_output==0) exit_handling(35,2);
			                       *(FCNN_5L_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_5L_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_5L_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_5L_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_5L_1out->number_of_node_output_functions=4;
			                       FCNN_5L_1out->node_output=(void**)testmalloc((size_t)FCNN_5L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_1out->node_output==0) exit_handling(35,3);
			                       *(FCNN_5L_1out->node_output+0)=exp_node_output;
			                       *(FCNN_5L_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_5L_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_5L_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_5L_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_5L_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_1out->node_output_derivation==0) exit_handling(35,4);
			                       *(FCNN_5L_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_5L_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_5L_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_5L_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_5L_1out->number_of_firing_functions=1;
			                       FCNN_5L_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_5L_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_5L_1out->firing_neuron==0) exit_handling(35,5);
			                       *(FCNN_5L_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_5L_1out->number_of_learning_algorithms=3;
			                       FCNN_5L_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_5L_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_5L_1out->create_learning_algorithm==0) exit_handling(35,6);
			                       *(FCNN_5L_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_5L_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_5L_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_5L_1out);
			                      } /* ; */


/* setting up FCNN_2L_W_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out;
			                       FCNN_2L_W_1out=MANTD((long int)1);
			                       FCNN_2L_W_1out->name=MAC((long int)84);
			                       *(FCNN_2L_W_1out->name+0)='F';
			                       *(FCNN_2L_W_1out->name+1)='C';
			                       *(FCNN_2L_W_1out->name+2)='N';
			                       *(FCNN_2L_W_1out->name+3)='N';
			                       *(FCNN_2L_W_1out->name+4)='_';
			                       *(FCNN_2L_W_1out->name+5)='2';
			                       *(FCNN_2L_W_1out->name+6)='L';
			                       *(FCNN_2L_W_1out->name+7)='_';
			                       *(FCNN_2L_W_1out->name+8)='W';
			                       *(FCNN_2L_W_1out->name+9)='_';
			                       *(FCNN_2L_W_1out->name+10)='1';
			                       *(FCNN_2L_W_1out->name+11)='o';
			                       *(FCNN_2L_W_1out->name+12)='u';
			                       *(FCNN_2L_W_1out->name+13)='t';
			                       *(FCNN_2L_W_1out->name+14)='(';
			                       *(FCNN_2L_W_1out->name+15)='F';
			                       *(FCNN_2L_W_1out->name+16)='u';
			                       *(FCNN_2L_W_1out->name+17)='l';
			                       *(FCNN_2L_W_1out->name+18)='l';
			                       *(FCNN_2L_W_1out->name+19)='y';
			                       *(FCNN_2L_W_1out->name+20)='_';
			                       *(FCNN_2L_W_1out->name+21)='C';
			                       *(FCNN_2L_W_1out->name+22)='o';
			                       *(FCNN_2L_W_1out->name+23)='n';
			                       *(FCNN_2L_W_1out->name+24)='n';
			                       *(FCNN_2L_W_1out->name+25)='e';
			                       *(FCNN_2L_W_1out->name+26)='c';
			                       *(FCNN_2L_W_1out->name+27)='t';
			                       *(FCNN_2L_W_1out->name+28)='e';
			                       *(FCNN_2L_W_1out->name+29)='d';
			                       *(FCNN_2L_W_1out->name+30)='_';
			                       *(FCNN_2L_W_1out->name+31)='N';
			                       *(FCNN_2L_W_1out->name+32)='N';
			                       *(FCNN_2L_W_1out->name+33)='_';
			                       *(FCNN_2L_W_1out->name+34)='2';
			                       *(FCNN_2L_W_1out->name+35)='_';
			                       *(FCNN_2L_W_1out->name+36)='L';
			                       *(FCNN_2L_W_1out->name+37)='a';
			                       *(FCNN_2L_W_1out->name+38)='y';
			                       *(FCNN_2L_W_1out->name+39)='e';
			                       *(FCNN_2L_W_1out->name+40)='r';
			                       *(FCNN_2L_W_1out->name+41)='s';
			                       *(FCNN_2L_W_1out->name+42)='_';
			                       *(FCNN_2L_W_1out->name+43)='r';
			                       *(FCNN_2L_W_1out->name+44)='e';
			                       *(FCNN_2L_W_1out->name+45)='c';
			                       *(FCNN_2L_W_1out->name+46)='e';
			                       *(FCNN_2L_W_1out->name+47)='i';
			                       *(FCNN_2L_W_1out->name+48)='v';
			                       *(FCNN_2L_W_1out->name+49)='i';
			                       *(FCNN_2L_W_1out->name+50)='n';
			                       *(FCNN_2L_W_1out->name+51)='g';
			                       *(FCNN_2L_W_1out->name+52)='_';
			                       *(FCNN_2L_W_1out->name+53)='i';
			                       *(FCNN_2L_W_1out->name+54)='n';
			                       *(FCNN_2L_W_1out->name+55)='p';
			                       *(FCNN_2L_W_1out->name+56)='u';
			                       *(FCNN_2L_W_1out->name+57)='t';
			                       *(FCNN_2L_W_1out->name+58)='_';
			                       *(FCNN_2L_W_1out->name+59)='t';
			                       *(FCNN_2L_W_1out->name+60)='h';
			                       *(FCNN_2L_W_1out->name+61)='r';
			                       *(FCNN_2L_W_1out->name+62)='o';
			                       *(FCNN_2L_W_1out->name+63)='u';
			                       *(FCNN_2L_W_1out->name+64)='g';
			                       *(FCNN_2L_W_1out->name+65)='h';
			                       *(FCNN_2L_W_1out->name+66)='_';
			                       *(FCNN_2L_W_1out->name+67)='W';
			                       *(FCNN_2L_W_1out->name+68)='i';
			                       *(FCNN_2L_W_1out->name+69)='n';
			                       *(FCNN_2L_W_1out->name+70)='d';
			                       *(FCNN_2L_W_1out->name+71)='o';
			                       *(FCNN_2L_W_1out->name+72)='w';
			                       *(FCNN_2L_W_1out->name+73)='_';
			                       *(FCNN_2L_W_1out->name+74)='1';
			                       *(FCNN_2L_W_1out->name+75)='_';
			                       *(FCNN_2L_W_1out->name+76)='o';
			                       *(FCNN_2L_W_1out->name+77)='u';
			                       *(FCNN_2L_W_1out->name+78)='t';
			                       *(FCNN_2L_W_1out->name+79)='p';
			                       *(FCNN_2L_W_1out->name+80)='u';
			                       *(FCNN_2L_W_1out->name+81)='t';
			                       *(FCNN_2L_W_1out->name+82)=')';
			                       *(FCNN_2L_W_1out->name+83)=' ';
			                       FCNN_2L_W_1out->number_of_Levels=2;
			                       FCNN_2L_W_1out->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out->prepare_input()) */
			                       FCNN_2L_W_1out->nodes_per_Level=MAI((long int)FCNN_2L_W_1out->number_of_Levels);
			                       *(FCNN_2L_W_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out->recurrence=F;
			                       FCNN_2L_W_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_2L_W_1out->source=0;
			                       FCNN_2L_W_1out->destination=0;
			                       FCNN_2L_W_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out->create_neuron==0) exit_handling(36,1); 
			                       *(FCNN_2L_W_1out->create_neuron+0)=create_FCNN_2L_1out;
			                       FCNN_2L_W_1out->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out->number_linear_output_functions=4;
			                       FCNN_2L_W_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out->node_linear_output==0) exit_handling(36,2);
			                       *(FCNN_2L_W_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_2L_W_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_2L_W_1out->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out->node_output==0) exit_handling(36,3);
			                       *(FCNN_2L_W_1out->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out->node_output_derivation==0) exit_handling(36,4);
			                       *(FCNN_2L_W_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out->number_of_firing_functions=1;
			                       FCNN_2L_W_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out->firing_neuron==0) exit_handling(36,5);
			                       *(FCNN_2L_W_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_2L_W_1out->number_of_learning_algorithms=3;
			                       FCNN_2L_W_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out->create_learning_algorithm==0) exit_handling(36,6);
			                       *(FCNN_2L_W_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out);
			                      } /* ; */

/* setting up FCNN_3L_W_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_3L_W_1out_descriptor() sets up neuron_type_descriptor for FCNN_3L_W_1out (Fully Connected Neural Network with 3 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_3L_W_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_3L_W_1out;
			                       FCNN_3L_W_1out=MANTD((long int)1);
			                       FCNN_3L_W_1out->name=MAC((long int)84);
			                       *(FCNN_3L_W_1out->name+0)='F';
			                       *(FCNN_3L_W_1out->name+1)='C';
			                       *(FCNN_3L_W_1out->name+2)='N';
			                       *(FCNN_3L_W_1out->name+3)='N';
			                       *(FCNN_3L_W_1out->name+4)='_';
			                       *(FCNN_3L_W_1out->name+5)='3';
			                       *(FCNN_3L_W_1out->name+6)='L';
			                       *(FCNN_3L_W_1out->name+7)='_';
			                       *(FCNN_3L_W_1out->name+8)='W';
			                       *(FCNN_3L_W_1out->name+9)='_';
			                       *(FCNN_3L_W_1out->name+10)='1';
			                       *(FCNN_3L_W_1out->name+11)='o';
			                       *(FCNN_3L_W_1out->name+12)='u';
			                       *(FCNN_3L_W_1out->name+13)='t';
			                       *(FCNN_3L_W_1out->name+14)='(';
			                       *(FCNN_3L_W_1out->name+15)='F';
			                       *(FCNN_3L_W_1out->name+16)='u';
			                       *(FCNN_3L_W_1out->name+17)='l';
			                       *(FCNN_3L_W_1out->name+18)='l';
			                       *(FCNN_3L_W_1out->name+19)='y';
			                       *(FCNN_3L_W_1out->name+20)='_';
			                       *(FCNN_3L_W_1out->name+21)='C';
			                       *(FCNN_3L_W_1out->name+22)='o';
			                       *(FCNN_3L_W_1out->name+23)='n';
			                       *(FCNN_3L_W_1out->name+24)='n';
			                       *(FCNN_3L_W_1out->name+25)='e';
			                       *(FCNN_3L_W_1out->name+26)='c';
			                       *(FCNN_3L_W_1out->name+27)='t';
			                       *(FCNN_3L_W_1out->name+28)='e';
			                       *(FCNN_3L_W_1out->name+29)='d';
			                       *(FCNN_3L_W_1out->name+30)='_';
			                       *(FCNN_3L_W_1out->name+31)='N';
			                       *(FCNN_3L_W_1out->name+32)='N';
			                       *(FCNN_3L_W_1out->name+33)='_';
			                       *(FCNN_3L_W_1out->name+34)='3';
			                       *(FCNN_3L_W_1out->name+35)='_';
			                       *(FCNN_3L_W_1out->name+36)='L';
			                       *(FCNN_3L_W_1out->name+37)='a';
			                       *(FCNN_3L_W_1out->name+38)='y';
			                       *(FCNN_3L_W_1out->name+39)='e';
			                       *(FCNN_3L_W_1out->name+40)='r';
			                       *(FCNN_3L_W_1out->name+41)='s';
			                       *(FCNN_3L_W_1out->name+42)='_';
			                       *(FCNN_3L_W_1out->name+43)='r';
			                       *(FCNN_3L_W_1out->name+44)='e';
			                       *(FCNN_3L_W_1out->name+45)='c';
			                       *(FCNN_3L_W_1out->name+46)='e';
			                       *(FCNN_3L_W_1out->name+47)='i';
			                       *(FCNN_3L_W_1out->name+48)='v';
			                       *(FCNN_3L_W_1out->name+49)='i';
			                       *(FCNN_3L_W_1out->name+50)='n';
			                       *(FCNN_3L_W_1out->name+51)='g';
			                       *(FCNN_3L_W_1out->name+52)='_';
			                       *(FCNN_3L_W_1out->name+53)='i';
			                       *(FCNN_3L_W_1out->name+54)='n';
			                       *(FCNN_3L_W_1out->name+55)='p';
			                       *(FCNN_3L_W_1out->name+56)='u';
			                       *(FCNN_3L_W_1out->name+57)='t';
			                       *(FCNN_3L_W_1out->name+58)='_';
			                       *(FCNN_3L_W_1out->name+59)='t';
			                       *(FCNN_3L_W_1out->name+60)='h';
			                       *(FCNN_3L_W_1out->name+61)='r';
			                       *(FCNN_3L_W_1out->name+62)='o';
			                       *(FCNN_3L_W_1out->name+63)='u';
			                       *(FCNN_3L_W_1out->name+64)='g';
			                       *(FCNN_3L_W_1out->name+65)='h';
			                       *(FCNN_3L_W_1out->name+66)='_';
			                       *(FCNN_3L_W_1out->name+67)='W';
			                       *(FCNN_3L_W_1out->name+68)='i';
			                       *(FCNN_3L_W_1out->name+69)='n';
			                       *(FCNN_3L_W_1out->name+70)='d';
			                       *(FCNN_3L_W_1out->name+71)='o';
			                       *(FCNN_3L_W_1out->name+72)='w';
			                       *(FCNN_3L_W_1out->name+73)='_';
			                       *(FCNN_3L_W_1out->name+74)='1';
			                       *(FCNN_3L_W_1out->name+75)='_';
			                       *(FCNN_3L_W_1out->name+76)='o';
			                       *(FCNN_3L_W_1out->name+77)='u';
			                       *(FCNN_3L_W_1out->name+78)='t';
			                       *(FCNN_3L_W_1out->name+79)='p';
			                       *(FCNN_3L_W_1out->name+80)='u';
			                       *(FCNN_3L_W_1out->name+81)='t';
			                       *(FCNN_3L_W_1out->name+82)=')';
			                       *(FCNN_3L_W_1out->name+83)=' ';
			                       FCNN_3L_W_1out->number_of_Levels=3;
			                       FCNN_3L_W_1out->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_3L_W_1out->prepare_input()) */
			                       FCNN_3L_W_1out->nodes_per_Level=MAI((long int)FCNN_3L_W_1out->number_of_Levels);
			                       *(FCNN_3L_W_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_3L_W_1out->nodes_per_Level+1)=-10; /* means number of nodes in the 2nd Level is arithmetic mean of numbers of corners in the first and the last layer */
			                       *(FCNN_3L_W_1out->nodes_per_Level+2)=1; /* just one output = just one node in the last layer */
			                       FCNN_3L_W_1out->recurrence=F;
			                       FCNN_3L_W_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_3L_W_1out->source=0;
			                       FCNN_3L_W_1out->destination=0;
			                       FCNN_3L_W_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_3L_W_1out->create_neuron=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_3L_W_1out->create_neuron==0) exit_handling(37,1); 
			                       *(FCNN_3L_W_1out->create_neuron+0)=create_FCNN_3L_1out;
			                       FCNN_3L_W_1out->create_neuron_population=create_neuron_population;
			                       FCNN_3L_W_1out->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_3L_W_1out->number_linear_output_functions=4;
			                       FCNN_3L_W_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_3L_W_1out->node_linear_output==0) exit_handling(37,2);
			                       *(FCNN_3L_W_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_3L_W_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_3L_W_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_3L_W_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_3L_W_1out->number_of_node_output_functions=4;
			                       FCNN_3L_W_1out->node_output=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_W_1out->node_output==0) exit_handling(37,3);
			                       *(FCNN_3L_W_1out->node_output+0)=exp_node_output;
			                       *(FCNN_3L_W_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_3L_W_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_3L_W_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_3L_W_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_3L_W_1out->node_output_derivation==0) exit_handling(37,4);
			                       *(FCNN_3L_W_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_3L_W_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_3L_W_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_3L_W_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_3L_W_1out->number_of_firing_functions=1;
			                       FCNN_3L_W_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_3L_W_1out->firing_neuron==0) exit_handling(37,5);
			                       *(FCNN_3L_W_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_3L_W_1out->number_of_learning_algorithms=3;
			                       FCNN_3L_W_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_3L_W_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_3L_W_1out->create_learning_algorithm==0) exit_handling(37,6);
			                       *(FCNN_3L_W_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_3L_W_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_3L_W_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_3L_W_1out);
			                      } /* ; */

/* setting up FCNN_4L_W_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_4L_W_1out_descriptor() sets up neuron_type_descriptor for FCNN_4L_W_1out (Fully Connected Neural Network with 4 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_4L_W_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_4L_W_1out;
			                       FCNN_4L_W_1out=MANTD((long int)1);
			                       FCNN_4L_W_1out->name=MAC((long int)84);
			                       *(FCNN_4L_W_1out->name+0)='F';
			                       *(FCNN_4L_W_1out->name+1)='C';
			                       *(FCNN_4L_W_1out->name+2)='N';
			                       *(FCNN_4L_W_1out->name+3)='N';
			                       *(FCNN_4L_W_1out->name+4)='_';
			                       *(FCNN_4L_W_1out->name+5)='4';
			                       *(FCNN_4L_W_1out->name+6)='L';
			                       *(FCNN_4L_W_1out->name+7)='_';
			                       *(FCNN_4L_W_1out->name+8)='W';
			                       *(FCNN_4L_W_1out->name+9)='_';
			                       *(FCNN_4L_W_1out->name+10)='1';
			                       *(FCNN_4L_W_1out->name+11)='o';
			                       *(FCNN_4L_W_1out->name+12)='u';
			                       *(FCNN_4L_W_1out->name+13)='t';
			                       *(FCNN_4L_W_1out->name+14)='(';
			                       *(FCNN_4L_W_1out->name+15)='F';
			                       *(FCNN_4L_W_1out->name+16)='u';
			                       *(FCNN_4L_W_1out->name+17)='l';
			                       *(FCNN_4L_W_1out->name+18)='l';
			                       *(FCNN_4L_W_1out->name+19)='y';
			                       *(FCNN_4L_W_1out->name+20)='_';
			                       *(FCNN_4L_W_1out->name+21)='C';
			                       *(FCNN_4L_W_1out->name+22)='o';
			                       *(FCNN_4L_W_1out->name+23)='n';
			                       *(FCNN_4L_W_1out->name+24)='n';
			                       *(FCNN_4L_W_1out->name+25)='e';
			                       *(FCNN_4L_W_1out->name+26)='c';
			                       *(FCNN_4L_W_1out->name+27)='t';
			                       *(FCNN_4L_W_1out->name+28)='e';
			                       *(FCNN_4L_W_1out->name+29)='d';
			                       *(FCNN_4L_W_1out->name+30)='_';
			                       *(FCNN_4L_W_1out->name+31)='N';
			                       *(FCNN_4L_W_1out->name+32)='N';
			                       *(FCNN_4L_W_1out->name+33)='_';
			                       *(FCNN_4L_W_1out->name+34)='4';
			                       *(FCNN_4L_W_1out->name+35)='_';
			                       *(FCNN_4L_W_1out->name+36)='L';
			                       *(FCNN_4L_W_1out->name+37)='a';
			                       *(FCNN_4L_W_1out->name+38)='y';
			                       *(FCNN_4L_W_1out->name+39)='e';
			                       *(FCNN_4L_W_1out->name+40)='r';
			                       *(FCNN_4L_W_1out->name+41)='s';
			                       *(FCNN_4L_W_1out->name+42)='_';
			                       *(FCNN_4L_W_1out->name+43)='r';
			                       *(FCNN_4L_W_1out->name+44)='e';
			                       *(FCNN_4L_W_1out->name+45)='c';
			                       *(FCNN_4L_W_1out->name+46)='e';
			                       *(FCNN_4L_W_1out->name+47)='i';
			                       *(FCNN_4L_W_1out->name+48)='v';
			                       *(FCNN_4L_W_1out->name+49)='i';
			                       *(FCNN_4L_W_1out->name+50)='n';
			                       *(FCNN_4L_W_1out->name+51)='g';
			                       *(FCNN_4L_W_1out->name+52)='_';
			                       *(FCNN_4L_W_1out->name+53)='i';
			                       *(FCNN_4L_W_1out->name+54)='n';
			                       *(FCNN_4L_W_1out->name+55)='p';
			                       *(FCNN_4L_W_1out->name+56)='u';
			                       *(FCNN_4L_W_1out->name+57)='t';
			                       *(FCNN_4L_W_1out->name+58)='_';
			                       *(FCNN_4L_W_1out->name+59)='t';
			                       *(FCNN_4L_W_1out->name+60)='h';
			                       *(FCNN_4L_W_1out->name+61)='r';
			                       *(FCNN_4L_W_1out->name+62)='o';
			                       *(FCNN_4L_W_1out->name+63)='u';
			                       *(FCNN_4L_W_1out->name+64)='g';
			                       *(FCNN_4L_W_1out->name+65)='h';
			                       *(FCNN_4L_W_1out->name+66)='_';
			                       *(FCNN_4L_W_1out->name+67)='W';
			                       *(FCNN_4L_W_1out->name+68)='i';
			                       *(FCNN_4L_W_1out->name+69)='n';
			                       *(FCNN_4L_W_1out->name+70)='d';
			                       *(FCNN_4L_W_1out->name+71)='o';
			                       *(FCNN_4L_W_1out->name+72)='w';
			                       *(FCNN_4L_W_1out->name+73)='_';
			                       *(FCNN_4L_W_1out->name+74)='1';
			                       *(FCNN_4L_W_1out->name+75)='_';
			                       *(FCNN_4L_W_1out->name+76)='o';
			                       *(FCNN_4L_W_1out->name+77)='u';
			                       *(FCNN_4L_W_1out->name+78)='t';
			                       *(FCNN_4L_W_1out->name+79)='p';
			                       *(FCNN_4L_W_1out->name+80)='u';
			                       *(FCNN_4L_W_1out->name+81)='t';
			                       *(FCNN_4L_W_1out->name+82)=')';
			                       *(FCNN_4L_W_1out->name+83)=' ';
			                       FCNN_4L_W_1out->number_of_Levels=4;
			                       FCNN_4L_W_1out->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_4L_W_1out->prepare_input()) */
			                       FCNN_4L_W_1out->nodes_per_Level=MAI((long int)FCNN_4L_W_1out->number_of_Levels);
			                       *(FCNN_4L_W_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_4L_W_1out->nodes_per_Level+1)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_4L_W_1out->nodes_per_Level+2)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_4L_W_1out->nodes_per_Level+3)=1; /* just one output = just one node in the last layer */
			                       FCNN_4L_W_1out->recurrence=F;
			                       FCNN_4L_W_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_4L_W_1out->source=0;
			                       FCNN_4L_W_1out->destination=0;
			                       FCNN_4L_W_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_4L_W_1out->create_neuron=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_4L_W_1out->create_neuron==0) exit_handling(38,1); 
			                       *(FCNN_4L_W_1out->create_neuron+0)=create_FCNN_4L_1out;
			                       FCNN_4L_W_1out->create_neuron_population=create_neuron_population;
			                       FCNN_4L_W_1out->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_4L_W_1out->number_linear_output_functions=4;
			                       FCNN_4L_W_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_4L_W_1out->node_linear_output==0) exit_handling(38,2);
			                       *(FCNN_4L_W_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_4L_W_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_4L_W_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_4L_W_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_4L_W_1out->number_of_node_output_functions=4;
			                       FCNN_4L_W_1out->node_output=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_W_1out->node_output==0) exit_handling(38,3);
			                       *(FCNN_4L_W_1out->node_output+0)=exp_node_output;
			                       *(FCNN_4L_W_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_4L_W_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_4L_W_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_4L_W_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_4L_W_1out->node_output_derivation==0) exit_handling(38,4);
			                       *(FCNN_4L_W_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_4L_W_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_4L_W_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_4L_W_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_4L_W_1out->number_of_firing_functions=1;
			                       FCNN_4L_W_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_4L_W_1out->firing_neuron==0) exit_handling(38,5);
			                       *(FCNN_4L_W_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_4L_W_1out->number_of_learning_algorithms=3;
			                       FCNN_4L_W_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_4L_W_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_4L_W_1out->create_learning_algorithm==0) exit_handling(38,6);
			                       *(FCNN_4L_W_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_4L_W_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_4L_W_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_4L_W_1out);
			                      } /* ; */

/* setting up FCNN_5L_W_1out descriptor */
/* neuron_type_descriptor* setup_FCNN_5L_W_1out_descriptor() sets up neuron_type_descriptor for FCNN_5L_W_1out (Fully Connected Neural Network with 5 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node) class of neurones */
neuron_type_descriptor* setup_FCNN_5L_W_1out_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_5L_W_1out;
			                       FCNN_5L_W_1out=MANTD((long int)1);
			                       FCNN_5L_W_1out->name=MAC((long int)84);
			                       *(FCNN_5L_W_1out->name+0)='F';
			                       *(FCNN_5L_W_1out->name+1)='C';
			                       *(FCNN_5L_W_1out->name+2)='N';
			                       *(FCNN_5L_W_1out->name+3)='N';
			                       *(FCNN_5L_W_1out->name+4)='_';
			                       *(FCNN_5L_W_1out->name+5)='5';
			                       *(FCNN_5L_W_1out->name+6)='L';
			                       *(FCNN_5L_W_1out->name+7)='_';
			                       *(FCNN_5L_W_1out->name+8)='W';
			                       *(FCNN_5L_W_1out->name+9)='_';
			                       *(FCNN_5L_W_1out->name+10)='1';
			                       *(FCNN_5L_W_1out->name+11)='o';
			                       *(FCNN_5L_W_1out->name+12)='u';
			                       *(FCNN_5L_W_1out->name+13)='t';
			                       *(FCNN_5L_W_1out->name+14)='(';
			                       *(FCNN_5L_W_1out->name+15)='F';
			                       *(FCNN_5L_W_1out->name+16)='u';
			                       *(FCNN_5L_W_1out->name+17)='l';
			                       *(FCNN_5L_W_1out->name+18)='l';
			                       *(FCNN_5L_W_1out->name+19)='y';
			                       *(FCNN_5L_W_1out->name+20)='_';
			                       *(FCNN_5L_W_1out->name+21)='C';
			                       *(FCNN_5L_W_1out->name+22)='o';
			                       *(FCNN_5L_W_1out->name+23)='n';
			                       *(FCNN_5L_W_1out->name+24)='n';
			                       *(FCNN_5L_W_1out->name+25)='e';
			                       *(FCNN_5L_W_1out->name+26)='c';
			                       *(FCNN_5L_W_1out->name+27)='t';
			                       *(FCNN_5L_W_1out->name+28)='e';
			                       *(FCNN_5L_W_1out->name+29)='d';
			                       *(FCNN_5L_W_1out->name+30)='_';
			                       *(FCNN_5L_W_1out->name+31)='N';
			                       *(FCNN_5L_W_1out->name+32)='N';
			                       *(FCNN_5L_W_1out->name+33)='_';
			                       *(FCNN_5L_W_1out->name+34)='5';
			                       *(FCNN_5L_W_1out->name+35)='_';
			                       *(FCNN_5L_W_1out->name+36)='L';
			                       *(FCNN_5L_W_1out->name+37)='a';
			                       *(FCNN_5L_W_1out->name+38)='y';
			                       *(FCNN_5L_W_1out->name+39)='e';
			                       *(FCNN_5L_W_1out->name+40)='r';
			                       *(FCNN_5L_W_1out->name+41)='s';
			                       *(FCNN_5L_W_1out->name+42)='_';
			                       *(FCNN_5L_W_1out->name+43)='r';
			                       *(FCNN_5L_W_1out->name+44)='e';
			                       *(FCNN_5L_W_1out->name+45)='c';
			                       *(FCNN_5L_W_1out->name+46)='e';
			                       *(FCNN_5L_W_1out->name+47)='i';
			                       *(FCNN_5L_W_1out->name+48)='v';
			                       *(FCNN_5L_W_1out->name+49)='i';
			                       *(FCNN_5L_W_1out->name+50)='n';
			                       *(FCNN_5L_W_1out->name+51)='g';
			                       *(FCNN_5L_W_1out->name+52)='_';
			                       *(FCNN_5L_W_1out->name+53)='i';
			                       *(FCNN_5L_W_1out->name+54)='n';
			                       *(FCNN_5L_W_1out->name+55)='p';
			                       *(FCNN_5L_W_1out->name+56)='u';
			                       *(FCNN_5L_W_1out->name+57)='t';
			                       *(FCNN_5L_W_1out->name+58)='_';
			                       *(FCNN_5L_W_1out->name+59)='t';
			                       *(FCNN_5L_W_1out->name+60)='h';
			                       *(FCNN_5L_W_1out->name+61)='r';
			                       *(FCNN_5L_W_1out->name+62)='o';
			                       *(FCNN_5L_W_1out->name+63)='u';
			                       *(FCNN_5L_W_1out->name+64)='g';
			                       *(FCNN_5L_W_1out->name+65)='h';
			                       *(FCNN_5L_W_1out->name+66)='_';
			                       *(FCNN_5L_W_1out->name+67)='W';
			                       *(FCNN_5L_W_1out->name+68)='i';
			                       *(FCNN_5L_W_1out->name+69)='n';
			                       *(FCNN_5L_W_1out->name+70)='d';
			                       *(FCNN_5L_W_1out->name+71)='o';
			                       *(FCNN_5L_W_1out->name+72)='w';
			                       *(FCNN_5L_W_1out->name+73)='_';
			                       *(FCNN_5L_W_1out->name+74)='1';
			                       *(FCNN_5L_W_1out->name+75)='_';
			                       *(FCNN_5L_W_1out->name+76)='o';
			                       *(FCNN_5L_W_1out->name+77)='u';
			                       *(FCNN_5L_W_1out->name+78)='t';
			                       *(FCNN_5L_W_1out->name+79)='p';
			                       *(FCNN_5L_W_1out->name+80)='u';
			                       *(FCNN_5L_W_1out->name+81)='t';
			                       *(FCNN_5L_W_1out->name+82)=')';
			                       *(FCNN_5L_W_1out->name+83)=' ';
			                       FCNN_5L_W_1out->number_of_Levels=5;
			                       FCNN_5L_W_1out->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_5L_W_1out->prepare_input()) */
			                       FCNN_5L_W_1out->nodes_per_Level=MAI((long int)FCNN_5L_W_1out->number_of_Levels);
			                       *(FCNN_5L_W_1out->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_5L_W_1out->nodes_per_Level+1)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_W_1out->nodes_per_Level+2)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_W_1out->nodes_per_Level+3)=-11; /* means number of nodes is linearly decreasing from the 1st layer toward the last one */
			                       *(FCNN_5L_W_1out->nodes_per_Level+4)=1; /* just one output = just one node in the last layer */
			                       FCNN_5L_W_1out->recurrence=F;
			                       FCNN_5L_W_1out->number_of_recurrent_connected_layers=0;
			                       FCNN_5L_W_1out->source=0;
			                       FCNN_5L_W_1out->destination=0;
			                       FCNN_5L_W_1out->number_of_functions_for_creating_neuron=1;
			                       FCNN_5L_W_1out->create_neuron=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_5L_W_1out->create_neuron==0) exit_handling(39,1); 
			                       *(FCNN_5L_W_1out->create_neuron+0)=create_FCNN_5L_1out;
			                       FCNN_5L_W_1out->create_neuron_population=create_neuron_population;
			                       FCNN_5L_W_1out->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_5L_W_1out->number_linear_output_functions=4;
			                       FCNN_5L_W_1out->node_linear_output=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_5L_W_1out->node_linear_output==0) exit_handling(39,2);
			                       *(FCNN_5L_W_1out->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_5L_W_1out->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_5L_W_1out->node_linear_output+2)=highest_weighted_input;
			                       *(FCNN_5L_W_1out->node_linear_output+3)=RBF_exp;
			                       FCNN_5L_W_1out->number_of_node_output_functions=4;
			                       FCNN_5L_W_1out->node_output=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_W_1out->node_output==0) exit_handling(39,3);
			                       *(FCNN_5L_W_1out->node_output+0)=exp_node_output;
			                       *(FCNN_5L_W_1out->node_output+1)=exp_positive_node_output;
			                       *(FCNN_5L_W_1out->node_output+2)=treasureholded_node_output;
			                       *(FCNN_5L_W_1out->node_output+3)=unchanged_linear_node_output;
			                       FCNN_5L_W_1out->node_output_derivation=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_5L_W_1out->node_output_derivation==0) exit_handling(39,4);
			                       *(FCNN_5L_W_1out->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_5L_W_1out->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_5L_W_1out->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_5L_W_1out->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_5L_W_1out->number_of_firing_functions=1;
			                       FCNN_5L_W_1out->firing_neuron=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_5L_W_1out->firing_neuron==0) exit_handling(39,5);
			                       *(FCNN_5L_W_1out->firing_neuron)=firing_standard_neuron;
			                       FCNN_5L_W_1out->number_of_learning_algorithms=3;
			                       FCNN_5L_W_1out->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_5L_W_1out->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_5L_W_1out->create_learning_algorithm==0) exit_handling(39,6);
			                       *(FCNN_5L_W_1out->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_5L_W_1out->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(FCNN_5L_W_1out->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(FCNN_5L_W_1out);
			                      } /* ; */


/* setting up FCNN_2L_FBALL_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_11 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_11;
			                       FCNN_2L_FBALL_11=MANTD((long int)1);
			                       FCNN_2L_FBALL_11->name=MAC((long int)59);
			                       *(FCNN_2L_FBALL_11->name+0)='F';
			                       *(FCNN_2L_FBALL_11->name+1)='C';
			                       *(FCNN_2L_FBALL_11->name+2)='N';
			                       *(FCNN_2L_FBALL_11->name+3)='N';
			                       *(FCNN_2L_FBALL_11->name+4)='_';
			                       *(FCNN_2L_FBALL_11->name+5)='2';
			                       *(FCNN_2L_FBALL_11->name+6)='L';
			                       *(FCNN_2L_FBALL_11->name+7)='_';
			                       *(FCNN_2L_FBALL_11->name+8)='F';
			                       *(FCNN_2L_FBALL_11->name+9)='B';
			                       *(FCNN_2L_FBALL_11->name+10)='A';
			                       *(FCNN_2L_FBALL_11->name+11)='L';
			                       *(FCNN_2L_FBALL_11->name+12)='L';
			                       *(FCNN_2L_FBALL_11->name+13)='_';
			                       *(FCNN_2L_FBALL_11->name+14)='1';
			                       *(FCNN_2L_FBALL_11->name+15)='1';
			                       *(FCNN_2L_FBALL_11->name+16)='(';
			                       *(FCNN_2L_FBALL_11->name+17)='F';
			                       *(FCNN_2L_FBALL_11->name+18)='u';
			                       *(FCNN_2L_FBALL_11->name+19)='l';
			                       *(FCNN_2L_FBALL_11->name+20)='l';
			                       *(FCNN_2L_FBALL_11->name+21)='y';
			                       *(FCNN_2L_FBALL_11->name+22)='_';
			                       *(FCNN_2L_FBALL_11->name+23)='C';
			                       *(FCNN_2L_FBALL_11->name+24)='o';
			                       *(FCNN_2L_FBALL_11->name+25)='n';
			                       *(FCNN_2L_FBALL_11->name+26)='n';
			                       *(FCNN_2L_FBALL_11->name+27)='e';
			                       *(FCNN_2L_FBALL_11->name+28)='c';
			                       *(FCNN_2L_FBALL_11->name+29)='t';
			                       *(FCNN_2L_FBALL_11->name+30)='e';
			                       *(FCNN_2L_FBALL_11->name+31)='d';
			                       *(FCNN_2L_FBALL_11->name+32)='_';
			                       *(FCNN_2L_FBALL_11->name+33)='N';
			                       *(FCNN_2L_FBALL_11->name+34)='N';
			                       *(FCNN_2L_FBALL_11->name+35)='_';
			                       *(FCNN_2L_FBALL_11->name+36)='2';
			                       *(FCNN_2L_FBALL_11->name+37)='_';
			                       *(FCNN_2L_FBALL_11->name+38)='L';
			                       *(FCNN_2L_FBALL_11->name+39)='a';
			                       *(FCNN_2L_FBALL_11->name+40)='y';
			                       *(FCNN_2L_FBALL_11->name+41)='e';
			                       *(FCNN_2L_FBALL_11->name+42)='r';
			                       *(FCNN_2L_FBALL_11->name+43)='s';
			                       *(FCNN_2L_FBALL_11->name+44)='_';
			                       *(FCNN_2L_FBALL_11->name+45)='f';
			                       *(FCNN_2L_FBALL_11->name+46)='e';
			                       *(FCNN_2L_FBALL_11->name+47)='e';
			                       *(FCNN_2L_FBALL_11->name+48)='d';
			                       *(FCNN_2L_FBALL_11->name+49)='b';
			                       *(FCNN_2L_FBALL_11->name+50)='a';
			                       *(FCNN_2L_FBALL_11->name+51)='c';
			                       *(FCNN_2L_FBALL_11->name+52)='k';
			                       *(FCNN_2L_FBALL_11->name+53)='_';
			                       *(FCNN_2L_FBALL_11->name+54)='1';
			                       *(FCNN_2L_FBALL_11->name+55)='>';
			                       *(FCNN_2L_FBALL_11->name+56)='1';
			                       *(FCNN_2L_FBALL_11->name+57)=')';
			                       *(FCNN_2L_FBALL_11->name+58)=' ';
			                       FCNN_2L_FBALL_11->number_of_Levels=2;
			                       FCNN_2L_FBALL_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FBALL_11->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_11->number_of_Levels);
			                       *(FCNN_2L_FBALL_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_11->recurrence=T;
			                       FCNN_2L_FBALL_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FBALL_11->source=MAI((long int)FCNN_2L_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_11->source+0)=1;
			                       FCNN_2L_FBALL_11->destination=MAI((long int)FCNN_2L_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_11->destination+0)=1;
			                       FCNN_2L_FBALL_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->create_neuron==0) exit_handling(40,1); 
			                       *(FCNN_2L_FBALL_11->create_neuron+0)=create_FCNN_2L_FBALL_11;
			                       FCNN_2L_FBALL_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_11->prepare_input=0;
			                       FCNN_2L_FBALL_11->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->node_linear_output==0) exit_handling(40,2);
			                       *(FCNN_2L_FBALL_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_11->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->node_output==0) exit_handling(40,3);
			                       *(FCNN_2L_FBALL_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->node_output_derivation==0) exit_handling(40,4);
			                       *(FCNN_2L_FBALL_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_11->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->firing_neuron==0) exit_handling(40,5);
			                       *(FCNN_2L_FBALL_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_11->create_learning_algorithm==0) exit_handling(40,6);
			                       *(FCNN_2L_FBALL_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_11);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_22 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_22;
			                       FCNN_2L_FBALL_22=MANTD((long int)1);
			                       FCNN_2L_FBALL_22->name=MAC((long int)59);
			                       *(FCNN_2L_FBALL_22->name+0)='F';
			                       *(FCNN_2L_FBALL_22->name+1)='C';
			                       *(FCNN_2L_FBALL_22->name+2)='N';
			                       *(FCNN_2L_FBALL_22->name+3)='N';
			                       *(FCNN_2L_FBALL_22->name+4)='_';
			                       *(FCNN_2L_FBALL_22->name+5)='2';
			                       *(FCNN_2L_FBALL_22->name+6)='L';
			                       *(FCNN_2L_FBALL_22->name+7)='_';
			                       *(FCNN_2L_FBALL_22->name+8)='F';
			                       *(FCNN_2L_FBALL_22->name+9)='B';
			                       *(FCNN_2L_FBALL_22->name+10)='A';
			                       *(FCNN_2L_FBALL_22->name+11)='L';
			                       *(FCNN_2L_FBALL_22->name+12)='L';
			                       *(FCNN_2L_FBALL_22->name+13)='_';
			                       *(FCNN_2L_FBALL_22->name+14)='2';
			                       *(FCNN_2L_FBALL_22->name+15)='2';
			                       *(FCNN_2L_FBALL_22->name+16)='(';
			                       *(FCNN_2L_FBALL_22->name+17)='F';
			                       *(FCNN_2L_FBALL_22->name+18)='u';
			                       *(FCNN_2L_FBALL_22->name+19)='l';
			                       *(FCNN_2L_FBALL_22->name+20)='l';
			                       *(FCNN_2L_FBALL_22->name+21)='y';
			                       *(FCNN_2L_FBALL_22->name+22)='_';
			                       *(FCNN_2L_FBALL_22->name+23)='C';
			                       *(FCNN_2L_FBALL_22->name+24)='o';
			                       *(FCNN_2L_FBALL_22->name+25)='n';
			                       *(FCNN_2L_FBALL_22->name+26)='n';
			                       *(FCNN_2L_FBALL_22->name+27)='e';
			                       *(FCNN_2L_FBALL_22->name+28)='c';
			                       *(FCNN_2L_FBALL_22->name+29)='t';
			                       *(FCNN_2L_FBALL_22->name+30)='e';
			                       *(FCNN_2L_FBALL_22->name+31)='d';
			                       *(FCNN_2L_FBALL_22->name+32)='_';
			                       *(FCNN_2L_FBALL_22->name+33)='N';
			                       *(FCNN_2L_FBALL_22->name+34)='N';
			                       *(FCNN_2L_FBALL_22->name+35)='_';
			                       *(FCNN_2L_FBALL_22->name+36)='2';
			                       *(FCNN_2L_FBALL_22->name+37)='_';
			                       *(FCNN_2L_FBALL_22->name+38)='L';
			                       *(FCNN_2L_FBALL_22->name+39)='a';
			                       *(FCNN_2L_FBALL_22->name+40)='y';
			                       *(FCNN_2L_FBALL_22->name+41)='e';
			                       *(FCNN_2L_FBALL_22->name+42)='r';
			                       *(FCNN_2L_FBALL_22->name+43)='s';
			                       *(FCNN_2L_FBALL_22->name+44)='_';
			                       *(FCNN_2L_FBALL_22->name+45)='f';
			                       *(FCNN_2L_FBALL_22->name+46)='e';
			                       *(FCNN_2L_FBALL_22->name+47)='e';
			                       *(FCNN_2L_FBALL_22->name+48)='d';
			                       *(FCNN_2L_FBALL_22->name+49)='b';
			                       *(FCNN_2L_FBALL_22->name+50)='a';
			                       *(FCNN_2L_FBALL_22->name+51)='c';
			                       *(FCNN_2L_FBALL_22->name+52)='k';
			                       *(FCNN_2L_FBALL_22->name+53)='_';
			                       *(FCNN_2L_FBALL_22->name+54)='2';
			                       *(FCNN_2L_FBALL_22->name+55)='>';
			                       *(FCNN_2L_FBALL_22->name+56)='2';
			                       *(FCNN_2L_FBALL_22->name+57)=')';
			                       *(FCNN_2L_FBALL_22->name+58)=' ';
			                       FCNN_2L_FBALL_22->number_of_Levels=2;
			                       FCNN_2L_FBALL_22->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L_FBALL_22->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_22->number_of_Levels);
			                       *(FCNN_2L_FBALL_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_22->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_22->recurrence=T;
			                       FCNN_2L_FBALL_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FBALL_22->source=MAI((long int)FCNN_2L_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22->source+0)=2;
			                       FCNN_2L_FBALL_22->destination=MAI((long int)FCNN_2L_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22->destination+0)=2;
			                       FCNN_2L_FBALL_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->create_neuron==0) exit_handling(41,1); 
			                       *(FCNN_2L_FBALL_22->create_neuron+0)=create_FCNN_2L_FBALL_22;
			                       FCNN_2L_FBALL_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_22->prepare_input=0;
			                       FCNN_2L_FBALL_22->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->node_linear_output==0) exit_handling(41,2);
			                       *(FCNN_2L_FBALL_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_22->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_22->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->node_output==0) exit_handling(41,3);
			                       *(FCNN_2L_FBALL_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->node_output_derivation==0) exit_handling(41,4);
			                       *(FCNN_2L_FBALL_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_22->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->firing_neuron==0) exit_handling(41,5);
			                       *(FCNN_2L_FBALL_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_22->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_22->create_learning_algorithm==0) exit_handling(41,6);
			                       *(FCNN_2L_FBALL_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_22);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_21 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer on 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_21;
			                       FCNN_2L_FBALL_21=MANTD((long int)1);
			                       FCNN_2L_FBALL_21->name=MAC((long int)59);
			                       *(FCNN_2L_FBALL_21->name+0)='F';
			                       *(FCNN_2L_FBALL_21->name+1)='C';
			                       *(FCNN_2L_FBALL_21->name+2)='N';
			                       *(FCNN_2L_FBALL_21->name+3)='N';
			                       *(FCNN_2L_FBALL_21->name+4)='_';
			                       *(FCNN_2L_FBALL_21->name+5)='2';
			                       *(FCNN_2L_FBALL_21->name+6)='L';
			                       *(FCNN_2L_FBALL_21->name+7)='_';
			                       *(FCNN_2L_FBALL_21->name+8)='F';
			                       *(FCNN_2L_FBALL_21->name+9)='B';
			                       *(FCNN_2L_FBALL_21->name+10)='A';
			                       *(FCNN_2L_FBALL_21->name+11)='L';
			                       *(FCNN_2L_FBALL_21->name+12)='L';
			                       *(FCNN_2L_FBALL_21->name+13)='_';
			                       *(FCNN_2L_FBALL_21->name+14)='2';
			                       *(FCNN_2L_FBALL_21->name+15)='1';
			                       *(FCNN_2L_FBALL_21->name+16)='(';
			                       *(FCNN_2L_FBALL_21->name+17)='F';
			                       *(FCNN_2L_FBALL_21->name+18)='u';
			                       *(FCNN_2L_FBALL_21->name+19)='l';
			                       *(FCNN_2L_FBALL_21->name+20)='l';
			                       *(FCNN_2L_FBALL_21->name+21)='y';
			                       *(FCNN_2L_FBALL_21->name+22)='_';
			                       *(FCNN_2L_FBALL_21->name+23)='C';
			                       *(FCNN_2L_FBALL_21->name+24)='o';
			                       *(FCNN_2L_FBALL_21->name+25)='n';
			                       *(FCNN_2L_FBALL_21->name+26)='n';
			                       *(FCNN_2L_FBALL_21->name+27)='e';
			                       *(FCNN_2L_FBALL_21->name+28)='c';
			                       *(FCNN_2L_FBALL_21->name+29)='t';
			                       *(FCNN_2L_FBALL_21->name+30)='e';
			                       *(FCNN_2L_FBALL_21->name+31)='d';
			                       *(FCNN_2L_FBALL_21->name+32)='_';
			                       *(FCNN_2L_FBALL_21->name+33)='N';
			                       *(FCNN_2L_FBALL_21->name+34)='N';
			                       *(FCNN_2L_FBALL_21->name+35)='_';
			                       *(FCNN_2L_FBALL_21->name+36)='2';
			                       *(FCNN_2L_FBALL_21->name+37)='_';
			                       *(FCNN_2L_FBALL_21->name+38)='L';
			                       *(FCNN_2L_FBALL_21->name+39)='a';
			                       *(FCNN_2L_FBALL_21->name+40)='y';
			                       *(FCNN_2L_FBALL_21->name+41)='e';
			                       *(FCNN_2L_FBALL_21->name+42)='r';
			                       *(FCNN_2L_FBALL_21->name+43)='s';
			                       *(FCNN_2L_FBALL_21->name+44)='_';
			                       *(FCNN_2L_FBALL_21->name+45)='f';
			                       *(FCNN_2L_FBALL_21->name+46)='e';
			                       *(FCNN_2L_FBALL_21->name+47)='e';
			                       *(FCNN_2L_FBALL_21->name+48)='d';
			                       *(FCNN_2L_FBALL_21->name+49)='b';
			                       *(FCNN_2L_FBALL_21->name+50)='a';
			                       *(FCNN_2L_FBALL_21->name+51)='c';
			                       *(FCNN_2L_FBALL_21->name+52)='k';
			                       *(FCNN_2L_FBALL_21->name+53)='_';
			                       *(FCNN_2L_FBALL_21->name+54)='2';
			                       *(FCNN_2L_FBALL_21->name+55)='>';
			                       *(FCNN_2L_FBALL_21->name+56)='1';
			                       *(FCNN_2L_FBALL_21->name+57)=')';
			                       *(FCNN_2L_FBALL_21->name+58)=' ';
			                       FCNN_2L_FBALL_21->number_of_Levels=2;
			                       FCNN_2L_FBALL_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FBALL_21->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_21->number_of_Levels);
			                       *(FCNN_2L_FBALL_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_21->recurrence=T;
			                       FCNN_2L_FBALL_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FBALL_21->source=MAI((long int)FCNN_2L_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_21->source+0)=2;
			                       FCNN_2L_FBALL_21->destination=MAI((long int)FCNN_2L_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_21->destination+0)=1;
			                       FCNN_2L_FBALL_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->create_neuron==0) exit_handling(42,1); 
			                       *(FCNN_2L_FBALL_21->create_neuron+0)=create_FCNN_2L_FBALL_21;
			                       FCNN_2L_FBALL_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_21->prepare_input=0;
			                       FCNN_2L_FBALL_21->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->node_linear_output==0) exit_handling(42,2);
			                       *(FCNN_2L_FBALL_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_21->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_FBALL_21->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_21->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->node_output==0) exit_handling(42,3);
			                       *(FCNN_2L_FBALL_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->node_output_derivation==0) exit_handling(42,4);
			                       *(FCNN_2L_FBALL_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_21->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->firing_neuron==0) exit_handling(42,5);
			                       *(FCNN_2L_FBALL_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_FBALL_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_FBALL_21->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_21->create_learning_algorithm==0) exit_handling(42,6);
			                       *(FCNN_2L_FBALL_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_21);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_22_21 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer on 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_22_21;
			                       FCNN_2L_FBALL_22_21=MANTD((long int)1);
			                       FCNN_2L_FBALL_22_21->name=MAC((long int)70);
			                       *(FCNN_2L_FBALL_22_21->name+0)='F';
			                       *(FCNN_2L_FBALL_22_21->name+1)='C';
			                       *(FCNN_2L_FBALL_22_21->name+2)='N';
			                       *(FCNN_2L_FBALL_22_21->name+3)='N';
			                       *(FCNN_2L_FBALL_22_21->name+4)='_';
			                       *(FCNN_2L_FBALL_22_21->name+5)='2';
			                       *(FCNN_2L_FBALL_22_21->name+6)='L';
			                       *(FCNN_2L_FBALL_22_21->name+7)='_';
			                       *(FCNN_2L_FBALL_22_21->name+8)='F';
			                       *(FCNN_2L_FBALL_22_21->name+9)='B';
			                       *(FCNN_2L_FBALL_22_21->name+10)='A';
			                       *(FCNN_2L_FBALL_22_21->name+11)='L';
			                       *(FCNN_2L_FBALL_22_21->name+12)='L';
			                       *(FCNN_2L_FBALL_22_21->name+13)='_';
			                       *(FCNN_2L_FBALL_22_21->name+14)='2';
			                       *(FCNN_2L_FBALL_22_21->name+15)='2';
			                       *(FCNN_2L_FBALL_22_21->name+16)='_';
			                       *(FCNN_2L_FBALL_22_21->name+17)='2';
			                       *(FCNN_2L_FBALL_22_21->name+18)='1';
			                       *(FCNN_2L_FBALL_22_21->name+19)='(';
			                       *(FCNN_2L_FBALL_22_21->name+20)='F';
			                       *(FCNN_2L_FBALL_22_21->name+21)='u';
			                       *(FCNN_2L_FBALL_22_21->name+22)='l';
			                       *(FCNN_2L_FBALL_22_21->name+23)='l';
			                       *(FCNN_2L_FBALL_22_21->name+24)='y';
			                       *(FCNN_2L_FBALL_22_21->name+25)='_';
			                       *(FCNN_2L_FBALL_22_21->name+26)='C';
			                       *(FCNN_2L_FBALL_22_21->name+27)='o';
			                       *(FCNN_2L_FBALL_22_21->name+28)='n';
			                       *(FCNN_2L_FBALL_22_21->name+29)='n';
			                       *(FCNN_2L_FBALL_22_21->name+30)='e';
			                       *(FCNN_2L_FBALL_22_21->name+31)='c';
			                       *(FCNN_2L_FBALL_22_21->name+32)='t';
			                       *(FCNN_2L_FBALL_22_21->name+33)='e';
			                       *(FCNN_2L_FBALL_22_21->name+34)='d';
			                       *(FCNN_2L_FBALL_22_21->name+35)='_';
			                       *(FCNN_2L_FBALL_22_21->name+36)='N';
			                       *(FCNN_2L_FBALL_22_21->name+37)='N';
			                       *(FCNN_2L_FBALL_22_21->name+38)='_';
			                       *(FCNN_2L_FBALL_22_21->name+39)='2';
			                       *(FCNN_2L_FBALL_22_21->name+40)='_';
			                       *(FCNN_2L_FBALL_22_21->name+41)='L';
			                       *(FCNN_2L_FBALL_22_21->name+42)='a';
			                       *(FCNN_2L_FBALL_22_21->name+43)='y';
			                       *(FCNN_2L_FBALL_22_21->name+44)='e';
			                       *(FCNN_2L_FBALL_22_21->name+45)='r';
			                       *(FCNN_2L_FBALL_22_21->name+46)='s';
			                       *(FCNN_2L_FBALL_22_21->name+47)='_';
			                       *(FCNN_2L_FBALL_22_21->name+48)='f';
			                       *(FCNN_2L_FBALL_22_21->name+49)='e';
			                       *(FCNN_2L_FBALL_22_21->name+50)='e';
			                       *(FCNN_2L_FBALL_22_21->name+51)='d';
			                       *(FCNN_2L_FBALL_22_21->name+52)='b';
			                       *(FCNN_2L_FBALL_22_21->name+53)='a';
			                       *(FCNN_2L_FBALL_22_21->name+54)='c';
			                       *(FCNN_2L_FBALL_22_21->name+55)='k';
			                       *(FCNN_2L_FBALL_22_21->name+56)='_';
			                       *(FCNN_2L_FBALL_22_21->name+57)='2';
			                       *(FCNN_2L_FBALL_22_21->name+58)='>';
			                       *(FCNN_2L_FBALL_22_21->name+59)='2';
			                       *(FCNN_2L_FBALL_22_21->name+60)='_';
			                       *(FCNN_2L_FBALL_22_21->name+61)='a';
			                       *(FCNN_2L_FBALL_22_21->name+62)='n';
			                       *(FCNN_2L_FBALL_22_21->name+63)='d';
			                       *(FCNN_2L_FBALL_22_21->name+64)='_';
			                       *(FCNN_2L_FBALL_22_21->name+65)='2';
			                       *(FCNN_2L_FBALL_22_21->name+66)='>';
			                       *(FCNN_2L_FBALL_22_21->name+67)='1';
			                       *(FCNN_2L_FBALL_22_21->name+68)=')';
			                       *(FCNN_2L_FBALL_22_21->name+69)=' ';
			                       FCNN_2L_FBALL_22_21->number_of_Levels=2;
			                       FCNN_2L_FBALL_22_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FBALL_22_21->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_22_21->number_of_Levels);
			                       *(FCNN_2L_FBALL_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_22_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_22_21->recurrence=T;
			                       FCNN_2L_FBALL_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FBALL_22_21->source=MAI((long int)FCNN_2L_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_21->source+0)=2;
			                       *(FCNN_2L_FBALL_22_21->source+1)=2;
			                       FCNN_2L_FBALL_22_21->destination=MAI((long int)FCNN_2L_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_21->destination+0)=2;
			                       *(FCNN_2L_FBALL_22_21->destination+1)=1;
			                       FCNN_2L_FBALL_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->create_neuron==0) exit_handling(43,1); 
			                       *(FCNN_2L_FBALL_22_21->create_neuron+0)=create_FCNN_2L_FBALL_22_21;
			                       FCNN_2L_FBALL_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_22_21->prepare_input=0;
			                       FCNN_2L_FBALL_22_21->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->node_linear_output==0) exit_handling(43,2);
			                       *(FCNN_2L_FBALL_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->node_output==0) exit_handling(43,3);
			                       *(FCNN_2L_FBALL_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->node_output_derivation==0) exit_handling(43,4);
			                       *(FCNN_2L_FBALL_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_22_21->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->firing_neuron==0) exit_handling(43,5);
			                       *(FCNN_2L_FBALL_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21->create_learning_algorithm==0) exit_handling(43,6);
			                       *(FCNN_2L_FBALL_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_22_21);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_21_11 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer on 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_21_11;
			                       FCNN_2L_FBALL_21_11=MANTD((long int)1);
			                       FCNN_2L_FBALL_21_11->name=MAC((long int)70);
			                       *(FCNN_2L_FBALL_21_11->name+0)='F';
			                       *(FCNN_2L_FBALL_21_11->name+1)='C';
			                       *(FCNN_2L_FBALL_21_11->name+2)='N';
			                       *(FCNN_2L_FBALL_21_11->name+3)='N';
			                       *(FCNN_2L_FBALL_21_11->name+4)='_';
			                       *(FCNN_2L_FBALL_21_11->name+5)='2';
			                       *(FCNN_2L_FBALL_21_11->name+6)='L';
			                       *(FCNN_2L_FBALL_21_11->name+7)='_';
			                       *(FCNN_2L_FBALL_21_11->name+8)='F';
			                       *(FCNN_2L_FBALL_21_11->name+9)='B';
			                       *(FCNN_2L_FBALL_21_11->name+10)='A';
			                       *(FCNN_2L_FBALL_21_11->name+11)='L';
			                       *(FCNN_2L_FBALL_21_11->name+12)='L';
			                       *(FCNN_2L_FBALL_21_11->name+13)='_';
			                       *(FCNN_2L_FBALL_21_11->name+14)='2';
			                       *(FCNN_2L_FBALL_21_11->name+15)='1';
			                       *(FCNN_2L_FBALL_21_11->name+16)='_';
			                       *(FCNN_2L_FBALL_21_11->name+17)='1';
			                       *(FCNN_2L_FBALL_21_11->name+18)='1';
			                       *(FCNN_2L_FBALL_21_11->name+19)='(';
			                       *(FCNN_2L_FBALL_21_11->name+20)='F';
			                       *(FCNN_2L_FBALL_21_11->name+21)='u';
			                       *(FCNN_2L_FBALL_21_11->name+22)='l';
			                       *(FCNN_2L_FBALL_21_11->name+23)='l';
			                       *(FCNN_2L_FBALL_21_11->name+24)='y';
			                       *(FCNN_2L_FBALL_21_11->name+25)='_';
			                       *(FCNN_2L_FBALL_21_11->name+26)='C';
			                       *(FCNN_2L_FBALL_21_11->name+27)='o';
			                       *(FCNN_2L_FBALL_21_11->name+28)='n';
			                       *(FCNN_2L_FBALL_21_11->name+29)='n';
			                       *(FCNN_2L_FBALL_21_11->name+30)='e';
			                       *(FCNN_2L_FBALL_21_11->name+31)='c';
			                       *(FCNN_2L_FBALL_21_11->name+32)='t';
			                       *(FCNN_2L_FBALL_21_11->name+33)='e';
			                       *(FCNN_2L_FBALL_21_11->name+34)='d';
			                       *(FCNN_2L_FBALL_21_11->name+35)='_';
			                       *(FCNN_2L_FBALL_21_11->name+36)='N';
			                       *(FCNN_2L_FBALL_21_11->name+37)='N';
			                       *(FCNN_2L_FBALL_21_11->name+38)='_';
			                       *(FCNN_2L_FBALL_21_11->name+39)='2';
			                       *(FCNN_2L_FBALL_21_11->name+40)='_';
			                       *(FCNN_2L_FBALL_21_11->name+41)='L';
			                       *(FCNN_2L_FBALL_21_11->name+42)='a';
			                       *(FCNN_2L_FBALL_21_11->name+43)='y';
			                       *(FCNN_2L_FBALL_21_11->name+44)='e';
			                       *(FCNN_2L_FBALL_21_11->name+45)='r';
			                       *(FCNN_2L_FBALL_21_11->name+46)='s';
			                       *(FCNN_2L_FBALL_21_11->name+47)='_';
			                       *(FCNN_2L_FBALL_21_11->name+48)='f';
			                       *(FCNN_2L_FBALL_21_11->name+49)='e';
			                       *(FCNN_2L_FBALL_21_11->name+50)='e';
			                       *(FCNN_2L_FBALL_21_11->name+51)='d';
			                       *(FCNN_2L_FBALL_21_11->name+52)='b';
			                       *(FCNN_2L_FBALL_21_11->name+53)='a';
			                       *(FCNN_2L_FBALL_21_11->name+54)='c';
			                       *(FCNN_2L_FBALL_21_11->name+55)='k';
			                       *(FCNN_2L_FBALL_21_11->name+56)='_';
			                       *(FCNN_2L_FBALL_21_11->name+57)='2';
			                       *(FCNN_2L_FBALL_21_11->name+58)='>';
			                       *(FCNN_2L_FBALL_21_11->name+59)='1';
			                       *(FCNN_2L_FBALL_21_11->name+60)='_';
			                       *(FCNN_2L_FBALL_21_11->name+61)='a';
			                       *(FCNN_2L_FBALL_21_11->name+62)='n';
			                       *(FCNN_2L_FBALL_21_11->name+63)='d';
			                       *(FCNN_2L_FBALL_21_11->name+64)='_';
			                       *(FCNN_2L_FBALL_21_11->name+65)='1';
			                       *(FCNN_2L_FBALL_21_11->name+66)='>';
			                       *(FCNN_2L_FBALL_21_11->name+67)='1';
			                       *(FCNN_2L_FBALL_21_11->name+68)=')';
			                       *(FCNN_2L_FBALL_21_11->name+69)=' ';
			                       FCNN_2L_FBALL_21_11->number_of_Levels=2;
			                       FCNN_2L_FBALL_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback (from both itself and the second Level) */
			                       FCNN_2L_FBALL_21_11->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_21_11->number_of_Levels);
			                       *(FCNN_2L_FBALL_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_21_11->recurrence=T;
			                       FCNN_2L_FBALL_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FBALL_21_11->source=MAI((long int)FCNN_2L_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_21_11->source+0)=2;
			                       *(FCNN_2L_FBALL_21_11->source+1)=1;
			                       FCNN_2L_FBALL_21_11->destination=MAI((long int)FCNN_2L_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_21_11->destination+0)=1;
			                       *(FCNN_2L_FBALL_21_11->destination+1)=1;
			                       FCNN_2L_FBALL_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->create_neuron==0) exit_handling(44,1); 
			                       *(FCNN_2L_FBALL_21_11->create_neuron+0)=create_FCNN_2L_FBALL_21_11;
			                       FCNN_2L_FBALL_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_21_11->prepare_input=0;
			                       FCNN_2L_FBALL_21_11->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->node_linear_output==0) exit_handling(44,2);
			                       *(FCNN_2L_FBALL_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->node_output==0) exit_handling(44,3);
			                       *(FCNN_2L_FBALL_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->node_output_derivation==0) exit_handling(44,4);
			                       *(FCNN_2L_FBALL_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_21_11->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->firing_neuron==0) exit_handling(44,5);
			                       *(FCNN_2L_FBALL_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_21_11->create_learning_algorithm==0) exit_handling(44,6);
			                       *(FCNN_2L_FBALL_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_21_11);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_22_11 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_22_11;
			                       FCNN_2L_FBALL_22_11=MANTD((long int)1);
			                       FCNN_2L_FBALL_22_11->name=MAC((long int)70);
			                       *(FCNN_2L_FBALL_22_11->name+0)='F';
			                       *(FCNN_2L_FBALL_22_11->name+1)='C';
			                       *(FCNN_2L_FBALL_22_11->name+2)='N';
			                       *(FCNN_2L_FBALL_22_11->name+3)='N';
			                       *(FCNN_2L_FBALL_22_11->name+4)='_';
			                       *(FCNN_2L_FBALL_22_11->name+5)='2';
			                       *(FCNN_2L_FBALL_22_11->name+6)='L';
			                       *(FCNN_2L_FBALL_22_11->name+7)='_';
			                       *(FCNN_2L_FBALL_22_11->name+8)='F';
			                       *(FCNN_2L_FBALL_22_11->name+9)='B';
			                       *(FCNN_2L_FBALL_22_11->name+10)='A';
			                       *(FCNN_2L_FBALL_22_11->name+11)='L';
			                       *(FCNN_2L_FBALL_22_11->name+12)='L';
			                       *(FCNN_2L_FBALL_22_11->name+13)='_';
			                       *(FCNN_2L_FBALL_22_11->name+14)='2';
			                       *(FCNN_2L_FBALL_22_11->name+15)='2';
			                       *(FCNN_2L_FBALL_22_11->name+16)='_';
			                       *(FCNN_2L_FBALL_22_11->name+17)='1';
			                       *(FCNN_2L_FBALL_22_11->name+18)='1';
			                       *(FCNN_2L_FBALL_22_11->name+19)='(';
			                       *(FCNN_2L_FBALL_22_11->name+20)='F';
			                       *(FCNN_2L_FBALL_22_11->name+21)='u';
			                       *(FCNN_2L_FBALL_22_11->name+22)='l';
			                       *(FCNN_2L_FBALL_22_11->name+23)='l';
			                       *(FCNN_2L_FBALL_22_11->name+24)='y';
			                       *(FCNN_2L_FBALL_22_11->name+25)='_';
			                       *(FCNN_2L_FBALL_22_11->name+26)='C';
			                       *(FCNN_2L_FBALL_22_11->name+27)='o';
			                       *(FCNN_2L_FBALL_22_11->name+28)='n';
			                       *(FCNN_2L_FBALL_22_11->name+29)='n';
			                       *(FCNN_2L_FBALL_22_11->name+30)='e';
			                       *(FCNN_2L_FBALL_22_11->name+31)='c';
			                       *(FCNN_2L_FBALL_22_11->name+32)='t';
			                       *(FCNN_2L_FBALL_22_11->name+33)='e';
			                       *(FCNN_2L_FBALL_22_11->name+34)='d';
			                       *(FCNN_2L_FBALL_22_11->name+35)='_';
			                       *(FCNN_2L_FBALL_22_11->name+36)='N';
			                       *(FCNN_2L_FBALL_22_11->name+37)='N';
			                       *(FCNN_2L_FBALL_22_11->name+38)='_';
			                       *(FCNN_2L_FBALL_22_11->name+39)='2';
			                       *(FCNN_2L_FBALL_22_11->name+40)='_';
			                       *(FCNN_2L_FBALL_22_11->name+41)='L';
			                       *(FCNN_2L_FBALL_22_11->name+42)='a';
			                       *(FCNN_2L_FBALL_22_11->name+43)='y';
			                       *(FCNN_2L_FBALL_22_11->name+44)='e';
			                       *(FCNN_2L_FBALL_22_11->name+45)='r';
			                       *(FCNN_2L_FBALL_22_11->name+46)='s';
			                       *(FCNN_2L_FBALL_22_11->name+47)='_';
			                       *(FCNN_2L_FBALL_22_11->name+48)='f';
			                       *(FCNN_2L_FBALL_22_11->name+49)='e';
			                       *(FCNN_2L_FBALL_22_11->name+50)='e';
			                       *(FCNN_2L_FBALL_22_11->name+51)='d';
			                       *(FCNN_2L_FBALL_22_11->name+52)='b';
			                       *(FCNN_2L_FBALL_22_11->name+53)='a';
			                       *(FCNN_2L_FBALL_22_11->name+54)='c';
			                       *(FCNN_2L_FBALL_22_11->name+55)='k';
			                       *(FCNN_2L_FBALL_22_11->name+56)='_';
			                       *(FCNN_2L_FBALL_22_11->name+57)='2';
			                       *(FCNN_2L_FBALL_22_11->name+58)='>';
			                       *(FCNN_2L_FBALL_22_11->name+59)='2';
			                       *(FCNN_2L_FBALL_22_11->name+60)='_';
			                       *(FCNN_2L_FBALL_22_11->name+61)='a';
			                       *(FCNN_2L_FBALL_22_11->name+62)='n';
			                       *(FCNN_2L_FBALL_22_11->name+63)='d';
			                       *(FCNN_2L_FBALL_22_11->name+64)='_';
			                       *(FCNN_2L_FBALL_22_11->name+65)='1';
			                       *(FCNN_2L_FBALL_22_11->name+66)='>';
			                       *(FCNN_2L_FBALL_22_11->name+67)='1';
			                       *(FCNN_2L_FBALL_22_11->name+68)=')';
			                       *(FCNN_2L_FBALL_22_11->name+69)=' ';
			                       FCNN_2L_FBALL_22_11->number_of_Levels=2;
			                       FCNN_2L_FBALL_22_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FBALL_22_11->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_22_11->number_of_Levels);
			                       *(FCNN_2L_FBALL_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_22_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_22_11->recurrence=T;
			                       FCNN_2L_FBALL_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FBALL_22_11->source=MAI((long int)FCNN_2L_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_11->source+0)=2;
			                       *(FCNN_2L_FBALL_22_11->source+1)=1;
			                       FCNN_2L_FBALL_22_11->destination=MAI((long int)FCNN_2L_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_11->destination+0)=2;
			                       *(FCNN_2L_FBALL_22_11->destination+1)=1;
			                       FCNN_2L_FBALL_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->create_neuron==0) exit_handling(45,1); 
			                       *(FCNN_2L_FBALL_22_11->create_neuron+0)=create_FCNN_2L_FBALL_22_11;
			                       FCNN_2L_FBALL_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_22_11->prepare_input=0;
			                       FCNN_2L_FBALL_22_11->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->node_linear_output==0) exit_handling(45,2);
			                       *(FCNN_2L_FBALL_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->node_output==0) exit_handling(45,3);
			                       *(FCNN_2L_FBALL_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->node_output_derivation==0) exit_handling(45,4);
			                       *(FCNN_2L_FBALL_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_22_11->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->firing_neuron==0) exit_handling(45,5);
			                       *(FCNN_2L_FBALL_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_11->create_learning_algorithm==0) exit_handling(45,6);
			                       *(FCNN_2L_FBALL_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_22_11);
			                      } /* ; */

/* setting up FCNN_2L_FBALL_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FBALL_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FBALL_22_21_11 (Fully Connected Neural Network with 2 Layers and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FBALL_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FBALL_22_21_11;
			                       FCNN_2L_FBALL_22_21_11=MANTD((long int)1);
			                       FCNN_2L_FBALL_22_21_11->name=MAC((long int)81);
			                       *(FCNN_2L_FBALL_22_21_11->name+0)='F';
			                       *(FCNN_2L_FBALL_22_21_11->name+1)='C';
			                       *(FCNN_2L_FBALL_22_21_11->name+2)='N';
			                       *(FCNN_2L_FBALL_22_21_11->name+3)='N';
			                       *(FCNN_2L_FBALL_22_21_11->name+4)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+5)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+6)='L';
			                       *(FCNN_2L_FBALL_22_21_11->name+7)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+8)='F';
			                       *(FCNN_2L_FBALL_22_21_11->name+9)='B';
			                       *(FCNN_2L_FBALL_22_21_11->name+10)='A';
			                       *(FCNN_2L_FBALL_22_21_11->name+11)='L';
			                       *(FCNN_2L_FBALL_22_21_11->name+12)='L';
			                       *(FCNN_2L_FBALL_22_21_11->name+13)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+14)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+15)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+16)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+17)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+18)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+19)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+20)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+21)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+22)='(';
			                       *(FCNN_2L_FBALL_22_21_11->name+23)='F';
			                       *(FCNN_2L_FBALL_22_21_11->name+24)='u';
			                       *(FCNN_2L_FBALL_22_21_11->name+25)='l';
			                       *(FCNN_2L_FBALL_22_21_11->name+26)='l';
			                       *(FCNN_2L_FBALL_22_21_11->name+27)='y';
			                       *(FCNN_2L_FBALL_22_21_11->name+28)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+29)='C';
			                       *(FCNN_2L_FBALL_22_21_11->name+30)='o';
			                       *(FCNN_2L_FBALL_22_21_11->name+31)='n';
			                       *(FCNN_2L_FBALL_22_21_11->name+32)='n';
			                       *(FCNN_2L_FBALL_22_21_11->name+33)='e';
			                       *(FCNN_2L_FBALL_22_21_11->name+34)='c';
			                       *(FCNN_2L_FBALL_22_21_11->name+35)='t';
			                       *(FCNN_2L_FBALL_22_21_11->name+36)='e';
			                       *(FCNN_2L_FBALL_22_21_11->name+37)='d';
			                       *(FCNN_2L_FBALL_22_21_11->name+38)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+39)='N';
			                       *(FCNN_2L_FBALL_22_21_11->name+40)='N';
			                       *(FCNN_2L_FBALL_22_21_11->name+41)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+42)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+43)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+44)='L';
			                       *(FCNN_2L_FBALL_22_21_11->name+45)='a';
			                       *(FCNN_2L_FBALL_22_21_11->name+46)='y';
			                       *(FCNN_2L_FBALL_22_21_11->name+47)='e';
			                       *(FCNN_2L_FBALL_22_21_11->name+48)='r';
			                       *(FCNN_2L_FBALL_22_21_11->name+49)='s';
			                       *(FCNN_2L_FBALL_22_21_11->name+50)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+51)='f';
			                       *(FCNN_2L_FBALL_22_21_11->name+52)='e';
			                       *(FCNN_2L_FBALL_22_21_11->name+53)='e';
			                       *(FCNN_2L_FBALL_22_21_11->name+54)='d';
			                       *(FCNN_2L_FBALL_22_21_11->name+55)='b';
			                       *(FCNN_2L_FBALL_22_21_11->name+56)='a';
			                       *(FCNN_2L_FBALL_22_21_11->name+57)='c';
			                       *(FCNN_2L_FBALL_22_21_11->name+58)='k';
			                       *(FCNN_2L_FBALL_22_21_11->name+59)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+60)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+61)='>';
			                       *(FCNN_2L_FBALL_22_21_11->name+62)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+63)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+64)='a';
			                       *(FCNN_2L_FBALL_22_21_11->name+65)='n';
			                       *(FCNN_2L_FBALL_22_21_11->name+66)='d';
			                       *(FCNN_2L_FBALL_22_21_11->name+67)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+68)='2';
			                       *(FCNN_2L_FBALL_22_21_11->name+69)='>';
			                       *(FCNN_2L_FBALL_22_21_11->name+70)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+71)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+72)='a';
			                       *(FCNN_2L_FBALL_22_21_11->name+73)='n';
			                       *(FCNN_2L_FBALL_22_21_11->name+74)='d';
			                       *(FCNN_2L_FBALL_22_21_11->name+75)='_';
			                       *(FCNN_2L_FBALL_22_21_11->name+76)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+77)='>';
			                       *(FCNN_2L_FBALL_22_21_11->name+78)='1';
			                       *(FCNN_2L_FBALL_22_21_11->name+79)=')';
			                       *(FCNN_2L_FBALL_22_21_11->name+80)=' ';
			                       FCNN_2L_FBALL_22_21_11->number_of_Levels=2;
			                       FCNN_2L_FBALL_22_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FBALL_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_FBALL_22_21_11->number_of_Levels);
			                       *(FCNN_2L_FBALL_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FBALL_22_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FBALL_22_21_11->recurrence=T;
			                       FCNN_2L_FBALL_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_FBALL_22_21_11->source=MAI((long int)FCNN_2L_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_21_11->source+0)=2;
			                       *(FCNN_2L_FBALL_22_21_11->source+1)=2;
			                       *(FCNN_2L_FBALL_22_21_11->source+2)=1;
			                       FCNN_2L_FBALL_22_21_11->destination=MAI((long int)FCNN_2L_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FBALL_22_21_11->destination+0)=2;
			                       *(FCNN_2L_FBALL_22_21_11->destination+1)=1;
			                       *(FCNN_2L_FBALL_22_21_11->destination+2)=1;
			                       FCNN_2L_FBALL_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FBALL_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->create_neuron==0) exit_handling(46,1); 
			                       *(FCNN_2L_FBALL_22_21_11->create_neuron+0)=create_FCNN_2L_FBALL_22_21_11;
			                       FCNN_2L_FBALL_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FBALL_22_21_11->prepare_input=0;
			                       FCNN_2L_FBALL_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_FBALL_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->node_linear_output==0) exit_handling(46,2);
			                       *(FCNN_2L_FBALL_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FBALL_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FBALL_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_FBALL_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->node_output==0) exit_handling(46,3);
			                       *(FCNN_2L_FBALL_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FBALL_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FBALL_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FBALL_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FBALL_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->node_output_derivation==0) exit_handling(46,4);
			                       *(FCNN_2L_FBALL_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FBALL_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FBALL_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_FBALL_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->firing_neuron==0) exit_handling(46,5);
			                       *(FCNN_2L_FBALL_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FBALL_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FBALL_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FBALL_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FBALL_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FBALL_22_21_11->create_learning_algorithm==0) exit_handling(46,6);
			                       *(FCNN_2L_FBALL_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FBALL_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FBALL_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_W_FBALL_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_11;
			                       FCNN_2L_W_FBALL_11=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_11->name=MAC((long int)92);
			                       *(FCNN_2L_W_FBALL_11->name+0)='F';
			                       *(FCNN_2L_W_FBALL_11->name+1)='C';
			                       *(FCNN_2L_W_FBALL_11->name+2)='N';
			                       *(FCNN_2L_W_FBALL_11->name+3)='N';
			                       *(FCNN_2L_W_FBALL_11->name+4)='_';
			                       *(FCNN_2L_W_FBALL_11->name+5)='2';
			                       *(FCNN_2L_W_FBALL_11->name+6)='L';
			                       *(FCNN_2L_W_FBALL_11->name+7)='_';
			                       *(FCNN_2L_W_FBALL_11->name+8)='W';
			                       *(FCNN_2L_W_FBALL_11->name+9)='_';
			                       *(FCNN_2L_W_FBALL_11->name+10)='F';
			                       *(FCNN_2L_W_FBALL_11->name+11)='B';
			                       *(FCNN_2L_W_FBALL_11->name+12)='A';
			                       *(FCNN_2L_W_FBALL_11->name+13)='L';
			                       *(FCNN_2L_W_FBALL_11->name+14)='L';
			                       *(FCNN_2L_W_FBALL_11->name+15)='_';
			                       *(FCNN_2L_W_FBALL_11->name+16)='1';
			                       *(FCNN_2L_W_FBALL_11->name+17)='1';
			                       *(FCNN_2L_W_FBALL_11->name+18)='(';
			                       *(FCNN_2L_W_FBALL_11->name+19)='F';
			                       *(FCNN_2L_W_FBALL_11->name+20)='u';
			                       *(FCNN_2L_W_FBALL_11->name+21)='l';
			                       *(FCNN_2L_W_FBALL_11->name+22)='l';
			                       *(FCNN_2L_W_FBALL_11->name+23)='y';
			                       *(FCNN_2L_W_FBALL_11->name+24)='_';
			                       *(FCNN_2L_W_FBALL_11->name+25)='C';
			                       *(FCNN_2L_W_FBALL_11->name+26)='o';
			                       *(FCNN_2L_W_FBALL_11->name+27)='n';
			                       *(FCNN_2L_W_FBALL_11->name+28)='n';
			                       *(FCNN_2L_W_FBALL_11->name+29)='e';
			                       *(FCNN_2L_W_FBALL_11->name+30)='c';
			                       *(FCNN_2L_W_FBALL_11->name+31)='t';
			                       *(FCNN_2L_W_FBALL_11->name+32)='e';
			                       *(FCNN_2L_W_FBALL_11->name+33)='d';
			                       *(FCNN_2L_W_FBALL_11->name+34)='_';
			                       *(FCNN_2L_W_FBALL_11->name+35)='N';
			                       *(FCNN_2L_W_FBALL_11->name+36)='N';
			                       *(FCNN_2L_W_FBALL_11->name+37)='_';
			                       *(FCNN_2L_W_FBALL_11->name+38)='2';
			                       *(FCNN_2L_W_FBALL_11->name+39)='_';
			                       *(FCNN_2L_W_FBALL_11->name+40)='L';
			                       *(FCNN_2L_W_FBALL_11->name+41)='a';
			                       *(FCNN_2L_W_FBALL_11->name+42)='y';
			                       *(FCNN_2L_W_FBALL_11->name+43)='e';
			                       *(FCNN_2L_W_FBALL_11->name+44)='r';
			                       *(FCNN_2L_W_FBALL_11->name+45)='s';
			                       *(FCNN_2L_W_FBALL_11->name+46)='_';
			                       *(FCNN_2L_W_FBALL_11->name+47)='r';
			                       *(FCNN_2L_W_FBALL_11->name+48)='e';
			                       *(FCNN_2L_W_FBALL_11->name+49)='c';
			                       *(FCNN_2L_W_FBALL_11->name+50)='e';
			                       *(FCNN_2L_W_FBALL_11->name+51)='i';
			                       *(FCNN_2L_W_FBALL_11->name+52)='v';
			                       *(FCNN_2L_W_FBALL_11->name+53)='i';
			                       *(FCNN_2L_W_FBALL_11->name+54)='n';
			                       *(FCNN_2L_W_FBALL_11->name+55)='g';
			                       *(FCNN_2L_W_FBALL_11->name+56)='_';
			                       *(FCNN_2L_W_FBALL_11->name+57)='i';
			                       *(FCNN_2L_W_FBALL_11->name+58)='n';
			                       *(FCNN_2L_W_FBALL_11->name+59)='p';
			                       *(FCNN_2L_W_FBALL_11->name+60)='u';
			                       *(FCNN_2L_W_FBALL_11->name+61)='t';
			                       *(FCNN_2L_W_FBALL_11->name+62)='_';
			                       *(FCNN_2L_W_FBALL_11->name+63)='t';
			                       *(FCNN_2L_W_FBALL_11->name+64)='h';
			                       *(FCNN_2L_W_FBALL_11->name+65)='r';
			                       *(FCNN_2L_W_FBALL_11->name+66)='o';
			                       *(FCNN_2L_W_FBALL_11->name+67)='u';
			                       *(FCNN_2L_W_FBALL_11->name+68)='g';
			                       *(FCNN_2L_W_FBALL_11->name+69)='h';
			                       *(FCNN_2L_W_FBALL_11->name+70)='_';
			                       *(FCNN_2L_W_FBALL_11->name+71)='W';
			                       *(FCNN_2L_W_FBALL_11->name+72)='i';
			                       *(FCNN_2L_W_FBALL_11->name+73)='n';
			                       *(FCNN_2L_W_FBALL_11->name+74)='d';
			                       *(FCNN_2L_W_FBALL_11->name+75)='o';
			                       *(FCNN_2L_W_FBALL_11->name+76)='w';
			                       *(FCNN_2L_W_FBALL_11->name+77)='_';
			                       *(FCNN_2L_W_FBALL_11->name+78)='f';
			                       *(FCNN_2L_W_FBALL_11->name+79)='e';
			                       *(FCNN_2L_W_FBALL_11->name+80)='e';
			                       *(FCNN_2L_W_FBALL_11->name+81)='d';
			                       *(FCNN_2L_W_FBALL_11->name+82)='b';
			                       *(FCNN_2L_W_FBALL_11->name+83)='a';
			                       *(FCNN_2L_W_FBALL_11->name+84)='c';
			                       *(FCNN_2L_W_FBALL_11->name+85)='k';
			                       *(FCNN_2L_W_FBALL_11->name+86)='_';
			                       *(FCNN_2L_W_FBALL_11->name+87)='1';
			                       *(FCNN_2L_W_FBALL_11->name+88)='>';
			                       *(FCNN_2L_W_FBALL_11->name+89)='1';
			                       *(FCNN_2L_W_FBALL_11->name+90)=')';
			                       *(FCNN_2L_W_FBALL_11->name+91)=' ';
			                       FCNN_2L_W_FBALL_11->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_11->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_11->recurrence=T;
			                       FCNN_2L_W_FBALL_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FBALL_11->source=MAI((long int)FCNN_2L_W_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_11->source+0)=1;
			                       FCNN_2L_W_FBALL_11->destination=MAI((long int)FCNN_2L_W_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_11->destination+0)=1;
			                       FCNN_2L_W_FBALL_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->create_neuron==0) exit_handling(47,1); 
			                       *(FCNN_2L_W_FBALL_11->create_neuron+0)=create_FCNN_2L_FBALL_11;
			                       FCNN_2L_W_FBALL_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->node_linear_output==0) exit_handling(47,2);
			                       *(FCNN_2L_W_FBALL_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->node_output==0) exit_handling(47,3);
			                       *(FCNN_2L_W_FBALL_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->node_output_derivation==0) exit_handling(47,4);
			                       *(FCNN_2L_W_FBALL_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->firing_neuron==0) exit_handling(47,5);
			                       *(FCNN_2L_W_FBALL_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_11->create_learning_algorithm==0) exit_handling(47,6);
			                       *(FCNN_2L_W_FBALL_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_22 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_22;
			                       FCNN_2L_W_FBALL_22=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_22->name=MAC((long int)92);
			                       *(FCNN_2L_W_FBALL_22->name+0)='F';
			                       *(FCNN_2L_W_FBALL_22->name+1)='C';
			                       *(FCNN_2L_W_FBALL_22->name+2)='N';
			                       *(FCNN_2L_W_FBALL_22->name+3)='N';
			                       *(FCNN_2L_W_FBALL_22->name+4)='_';
			                       *(FCNN_2L_W_FBALL_22->name+5)='2';
			                       *(FCNN_2L_W_FBALL_22->name+6)='L';
			                       *(FCNN_2L_W_FBALL_22->name+7)='_';
			                       *(FCNN_2L_W_FBALL_22->name+8)='W';
			                       *(FCNN_2L_W_FBALL_22->name+9)='_';
			                       *(FCNN_2L_W_FBALL_22->name+10)='F';
			                       *(FCNN_2L_W_FBALL_22->name+11)='B';
			                       *(FCNN_2L_W_FBALL_22->name+12)='A';
			                       *(FCNN_2L_W_FBALL_22->name+13)='L';
			                       *(FCNN_2L_W_FBALL_22->name+14)='L';
			                       *(FCNN_2L_W_FBALL_22->name+15)='_';
			                       *(FCNN_2L_W_FBALL_22->name+16)='2';
			                       *(FCNN_2L_W_FBALL_22->name+17)='2';
			                       *(FCNN_2L_W_FBALL_22->name+18)='(';
			                       *(FCNN_2L_W_FBALL_22->name+19)='F';
			                       *(FCNN_2L_W_FBALL_22->name+20)='u';
			                       *(FCNN_2L_W_FBALL_22->name+21)='l';
			                       *(FCNN_2L_W_FBALL_22->name+22)='l';
			                       *(FCNN_2L_W_FBALL_22->name+23)='y';
			                       *(FCNN_2L_W_FBALL_22->name+24)='_';
			                       *(FCNN_2L_W_FBALL_22->name+25)='C';
			                       *(FCNN_2L_W_FBALL_22->name+26)='o';
			                       *(FCNN_2L_W_FBALL_22->name+27)='n';
			                       *(FCNN_2L_W_FBALL_22->name+28)='n';
			                       *(FCNN_2L_W_FBALL_22->name+29)='e';
			                       *(FCNN_2L_W_FBALL_22->name+30)='c';
			                       *(FCNN_2L_W_FBALL_22->name+31)='t';
			                       *(FCNN_2L_W_FBALL_22->name+32)='e';
			                       *(FCNN_2L_W_FBALL_22->name+33)='d';
			                       *(FCNN_2L_W_FBALL_22->name+34)='_';
			                       *(FCNN_2L_W_FBALL_22->name+35)='N';
			                       *(FCNN_2L_W_FBALL_22->name+36)='N';
			                       *(FCNN_2L_W_FBALL_22->name+37)='_';
			                       *(FCNN_2L_W_FBALL_22->name+38)='2';
			                       *(FCNN_2L_W_FBALL_22->name+39)='_';
			                       *(FCNN_2L_W_FBALL_22->name+40)='L';
			                       *(FCNN_2L_W_FBALL_22->name+41)='a';
			                       *(FCNN_2L_W_FBALL_22->name+42)='y';
			                       *(FCNN_2L_W_FBALL_22->name+43)='e';
			                       *(FCNN_2L_W_FBALL_22->name+44)='r';
			                       *(FCNN_2L_W_FBALL_22->name+45)='s';
			                       *(FCNN_2L_W_FBALL_22->name+46)='_';
			                       *(FCNN_2L_W_FBALL_22->name+47)='r';
			                       *(FCNN_2L_W_FBALL_22->name+48)='e';
			                       *(FCNN_2L_W_FBALL_22->name+49)='c';
			                       *(FCNN_2L_W_FBALL_22->name+50)='e';
			                       *(FCNN_2L_W_FBALL_22->name+51)='i';
			                       *(FCNN_2L_W_FBALL_22->name+52)='v';
			                       *(FCNN_2L_W_FBALL_22->name+53)='i';
			                       *(FCNN_2L_W_FBALL_22->name+54)='n';
			                       *(FCNN_2L_W_FBALL_22->name+55)='g';
			                       *(FCNN_2L_W_FBALL_22->name+56)='_';
			                       *(FCNN_2L_W_FBALL_22->name+57)='i';
			                       *(FCNN_2L_W_FBALL_22->name+58)='n';
			                       *(FCNN_2L_W_FBALL_22->name+59)='p';
			                       *(FCNN_2L_W_FBALL_22->name+60)='u';
			                       *(FCNN_2L_W_FBALL_22->name+61)='t';
			                       *(FCNN_2L_W_FBALL_22->name+62)='_';
			                       *(FCNN_2L_W_FBALL_22->name+63)='t';
			                       *(FCNN_2L_W_FBALL_22->name+64)='h';
			                       *(FCNN_2L_W_FBALL_22->name+65)='r';
			                       *(FCNN_2L_W_FBALL_22->name+66)='o';
			                       *(FCNN_2L_W_FBALL_22->name+67)='u';
			                       *(FCNN_2L_W_FBALL_22->name+68)='g';
			                       *(FCNN_2L_W_FBALL_22->name+69)='h';
			                       *(FCNN_2L_W_FBALL_22->name+70)='_';
			                       *(FCNN_2L_W_FBALL_22->name+71)='W';
			                       *(FCNN_2L_W_FBALL_22->name+72)='i';
			                       *(FCNN_2L_W_FBALL_22->name+73)='n';
			                       *(FCNN_2L_W_FBALL_22->name+74)='d';
			                       *(FCNN_2L_W_FBALL_22->name+75)='o';
			                       *(FCNN_2L_W_FBALL_22->name+76)='w';
			                       *(FCNN_2L_W_FBALL_22->name+77)='_';
			                       *(FCNN_2L_W_FBALL_22->name+78)='f';
			                       *(FCNN_2L_W_FBALL_22->name+79)='e';
			                       *(FCNN_2L_W_FBALL_22->name+80)='e';
			                       *(FCNN_2L_W_FBALL_22->name+81)='d';
			                       *(FCNN_2L_W_FBALL_22->name+82)='b';
			                       *(FCNN_2L_W_FBALL_22->name+83)='a';
			                       *(FCNN_2L_W_FBALL_22->name+84)='c';
			                       *(FCNN_2L_W_FBALL_22->name+85)='k';
			                       *(FCNN_2L_W_FBALL_22->name+86)='_';
			                       *(FCNN_2L_W_FBALL_22->name+87)='2';
			                       *(FCNN_2L_W_FBALL_22->name+88)='>';
			                       *(FCNN_2L_W_FBALL_22->name+89)='2';
			                       *(FCNN_2L_W_FBALL_22->name+90)=')';
			                       *(FCNN_2L_W_FBALL_22->name+91)=' ';
			                       FCNN_2L_W_FBALL_22->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_22->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_22->prepare_input()) */
			                       FCNN_2L_W_FBALL_22->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_22->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_22->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_22->recurrence=T;
			                       FCNN_2L_W_FBALL_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FBALL_22->source=MAI((long int)FCNN_2L_W_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22->source+0)=2;
			                       FCNN_2L_W_FBALL_22->destination=MAI((long int)FCNN_2L_W_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22->destination+0)=2;
			                       FCNN_2L_W_FBALL_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->create_neuron==0) exit_handling(48,1); 
			                       *(FCNN_2L_W_FBALL_22->create_neuron+0)=create_FCNN_2L_FBALL_22;
			                       FCNN_2L_W_FBALL_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_22->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_22->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->node_linear_output==0) exit_handling(48,2);
			                       *(FCNN_2L_W_FBALL_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_22->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_22->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->node_output==0) exit_handling(48,3);
			                       *(FCNN_2L_W_FBALL_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->node_output_derivation==0) exit_handling(48,4);
			                       *(FCNN_2L_W_FBALL_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_22->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->firing_neuron==0) exit_handling(48,5);
			                       *(FCNN_2L_W_FBALL_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_22->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22->create_learning_algorithm==0) exit_handling(48,6);
			                       *(FCNN_2L_W_FBALL_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_22);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_21;
			                       FCNN_2L_W_FBALL_21=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_21->name=MAC((long int)92);
			                       *(FCNN_2L_W_FBALL_21->name+0)='F';
			                       *(FCNN_2L_W_FBALL_21->name+1)='C';
			                       *(FCNN_2L_W_FBALL_21->name+2)='N';
			                       *(FCNN_2L_W_FBALL_21->name+3)='N';
			                       *(FCNN_2L_W_FBALL_21->name+4)='_';
			                       *(FCNN_2L_W_FBALL_21->name+5)='2';
			                       *(FCNN_2L_W_FBALL_21->name+6)='L';
			                       *(FCNN_2L_W_FBALL_21->name+7)='_';
			                       *(FCNN_2L_W_FBALL_21->name+8)='W';
			                       *(FCNN_2L_W_FBALL_21->name+9)='_';
			                       *(FCNN_2L_W_FBALL_21->name+10)='F';
			                       *(FCNN_2L_W_FBALL_21->name+11)='B';
			                       *(FCNN_2L_W_FBALL_21->name+12)='A';
			                       *(FCNN_2L_W_FBALL_21->name+13)='L';
			                       *(FCNN_2L_W_FBALL_21->name+14)='L';
			                       *(FCNN_2L_W_FBALL_21->name+15)='_';
			                       *(FCNN_2L_W_FBALL_21->name+16)='2';
			                       *(FCNN_2L_W_FBALL_21->name+17)='1';
			                       *(FCNN_2L_W_FBALL_21->name+18)='(';
			                       *(FCNN_2L_W_FBALL_21->name+19)='F';
			                       *(FCNN_2L_W_FBALL_21->name+20)='u';
			                       *(FCNN_2L_W_FBALL_21->name+21)='l';
			                       *(FCNN_2L_W_FBALL_21->name+22)='l';
			                       *(FCNN_2L_W_FBALL_21->name+23)='y';
			                       *(FCNN_2L_W_FBALL_21->name+24)='_';
			                       *(FCNN_2L_W_FBALL_21->name+25)='C';
			                       *(FCNN_2L_W_FBALL_21->name+26)='o';
			                       *(FCNN_2L_W_FBALL_21->name+27)='n';
			                       *(FCNN_2L_W_FBALL_21->name+28)='n';
			                       *(FCNN_2L_W_FBALL_21->name+29)='e';
			                       *(FCNN_2L_W_FBALL_21->name+30)='c';
			                       *(FCNN_2L_W_FBALL_21->name+31)='t';
			                       *(FCNN_2L_W_FBALL_21->name+32)='e';
			                       *(FCNN_2L_W_FBALL_21->name+33)='d';
			                       *(FCNN_2L_W_FBALL_21->name+34)='_';
			                       *(FCNN_2L_W_FBALL_21->name+35)='N';
			                       *(FCNN_2L_W_FBALL_21->name+36)='N';
			                       *(FCNN_2L_W_FBALL_21->name+37)='_';
			                       *(FCNN_2L_W_FBALL_21->name+38)='2';
			                       *(FCNN_2L_W_FBALL_21->name+39)='_';
			                       *(FCNN_2L_W_FBALL_21->name+40)='L';
			                       *(FCNN_2L_W_FBALL_21->name+41)='a';
			                       *(FCNN_2L_W_FBALL_21->name+42)='y';
			                       *(FCNN_2L_W_FBALL_21->name+43)='e';
			                       *(FCNN_2L_W_FBALL_21->name+44)='r';
			                       *(FCNN_2L_W_FBALL_21->name+45)='s';
			                       *(FCNN_2L_W_FBALL_21->name+46)='_';
			                       *(FCNN_2L_W_FBALL_21->name+47)='r';
			                       *(FCNN_2L_W_FBALL_21->name+48)='e';
			                       *(FCNN_2L_W_FBALL_21->name+49)='c';
			                       *(FCNN_2L_W_FBALL_21->name+50)='e';
			                       *(FCNN_2L_W_FBALL_21->name+51)='i';
			                       *(FCNN_2L_W_FBALL_21->name+52)='v';
			                       *(FCNN_2L_W_FBALL_21->name+53)='i';
			                       *(FCNN_2L_W_FBALL_21->name+54)='n';
			                       *(FCNN_2L_W_FBALL_21->name+55)='g';
			                       *(FCNN_2L_W_FBALL_21->name+56)='_';
			                       *(FCNN_2L_W_FBALL_21->name+57)='i';
			                       *(FCNN_2L_W_FBALL_21->name+58)='n';
			                       *(FCNN_2L_W_FBALL_21->name+59)='p';
			                       *(FCNN_2L_W_FBALL_21->name+60)='u';
			                       *(FCNN_2L_W_FBALL_21->name+61)='t';
			                       *(FCNN_2L_W_FBALL_21->name+62)='_';
			                       *(FCNN_2L_W_FBALL_21->name+63)='t';
			                       *(FCNN_2L_W_FBALL_21->name+64)='h';
			                       *(FCNN_2L_W_FBALL_21->name+65)='r';
			                       *(FCNN_2L_W_FBALL_21->name+66)='o';
			                       *(FCNN_2L_W_FBALL_21->name+67)='u';
			                       *(FCNN_2L_W_FBALL_21->name+68)='g';
			                       *(FCNN_2L_W_FBALL_21->name+69)='h';
			                       *(FCNN_2L_W_FBALL_21->name+70)='_';
			                       *(FCNN_2L_W_FBALL_21->name+71)='W';
			                       *(FCNN_2L_W_FBALL_21->name+72)='i';
			                       *(FCNN_2L_W_FBALL_21->name+73)='n';
			                       *(FCNN_2L_W_FBALL_21->name+74)='d';
			                       *(FCNN_2L_W_FBALL_21->name+75)='o';
			                       *(FCNN_2L_W_FBALL_21->name+76)='w';
			                       *(FCNN_2L_W_FBALL_21->name+77)='_';
			                       *(FCNN_2L_W_FBALL_21->name+78)='f';
			                       *(FCNN_2L_W_FBALL_21->name+79)='e';
			                       *(FCNN_2L_W_FBALL_21->name+80)='e';
			                       *(FCNN_2L_W_FBALL_21->name+81)='d';
			                       *(FCNN_2L_W_FBALL_21->name+82)='b';
			                       *(FCNN_2L_W_FBALL_21->name+83)='a';
			                       *(FCNN_2L_W_FBALL_21->name+84)='c';
			                       *(FCNN_2L_W_FBALL_21->name+85)='k';
			                       *(FCNN_2L_W_FBALL_21->name+86)='_';
			                       *(FCNN_2L_W_FBALL_21->name+87)='2';
			                       *(FCNN_2L_W_FBALL_21->name+88)='>';
			                       *(FCNN_2L_W_FBALL_21->name+89)='1';
			                       *(FCNN_2L_W_FBALL_21->name+90)=')';
			                       *(FCNN_2L_W_FBALL_21->name+91)=' ';
			                       FCNN_2L_W_FBALL_21->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_21->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_21->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_21->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_21->recurrence=T;
			                       FCNN_2L_W_FBALL_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FBALL_21->source=MAI((long int)FCNN_2L_W_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_21->source+0)=2;
			                       FCNN_2L_W_FBALL_21->destination=MAI((long int)FCNN_2L_W_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_21->destination+0)=1;
			                       FCNN_2L_W_FBALL_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->create_neuron==0) exit_handling(49,1); 
			                       *(FCNN_2L_W_FBALL_21->create_neuron+0)=create_FCNN_2L_FBALL_21;
			                       FCNN_2L_W_FBALL_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_21->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->node_linear_output==0) exit_handling(49,2);
			                       *(FCNN_2L_W_FBALL_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_21->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_W_FBALL_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->node_output==0) exit_handling(49,3);
			                       *(FCNN_2L_W_FBALL_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->node_output_derivation==0) exit_handling(49,4);
			                       *(FCNN_2L_W_FBALL_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_21->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->firing_neuron==0) exit_handling(49,5);
			                       *(FCNN_2L_W_FBALL_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_W_FBALL_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_W_FBALL_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21->create_learning_algorithm==0) exit_handling(49,6);
			                       *(FCNN_2L_W_FBALL_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_21);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_22_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_22_11;
			                       FCNN_2L_W_FBALL_22_11=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_22_11->name=MAC((long int)103);
			                       *(FCNN_2L_W_FBALL_22_11->name+0)='F';
			                       *(FCNN_2L_W_FBALL_22_11->name+1)='C';
			                       *(FCNN_2L_W_FBALL_22_11->name+2)='N';
			                       *(FCNN_2L_W_FBALL_22_11->name+3)='N';
			                       *(FCNN_2L_W_FBALL_22_11->name+4)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+5)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+6)='L';
			                       *(FCNN_2L_W_FBALL_22_11->name+7)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+8)='W';
			                       *(FCNN_2L_W_FBALL_22_11->name+9)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+10)='F';
			                       *(FCNN_2L_W_FBALL_22_11->name+11)='B';
			                       *(FCNN_2L_W_FBALL_22_11->name+12)='A';
			                       *(FCNN_2L_W_FBALL_22_11->name+13)='L';
			                       *(FCNN_2L_W_FBALL_22_11->name+14)='L';
			                       *(FCNN_2L_W_FBALL_22_11->name+15)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+16)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+17)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+18)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+19)='1';
			                       *(FCNN_2L_W_FBALL_22_11->name+20)='1';
			                       *(FCNN_2L_W_FBALL_22_11->name+21)='(';
			                       *(FCNN_2L_W_FBALL_22_11->name+22)='F';
			                       *(FCNN_2L_W_FBALL_22_11->name+23)='u';
			                       *(FCNN_2L_W_FBALL_22_11->name+24)='l';
			                       *(FCNN_2L_W_FBALL_22_11->name+25)='l';
			                       *(FCNN_2L_W_FBALL_22_11->name+26)='y';
			                       *(FCNN_2L_W_FBALL_22_11->name+27)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+28)='C';
			                       *(FCNN_2L_W_FBALL_22_11->name+29)='o';
			                       *(FCNN_2L_W_FBALL_22_11->name+30)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+31)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+32)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+33)='c';
			                       *(FCNN_2L_W_FBALL_22_11->name+34)='t';
			                       *(FCNN_2L_W_FBALL_22_11->name+35)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+36)='d';
			                       *(FCNN_2L_W_FBALL_22_11->name+37)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+38)='N';
			                       *(FCNN_2L_W_FBALL_22_11->name+39)='N';
			                       *(FCNN_2L_W_FBALL_22_11->name+40)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+41)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+42)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+43)='L';
			                       *(FCNN_2L_W_FBALL_22_11->name+44)='a';
			                       *(FCNN_2L_W_FBALL_22_11->name+45)='y';
			                       *(FCNN_2L_W_FBALL_22_11->name+46)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+47)='r';
			                       *(FCNN_2L_W_FBALL_22_11->name+48)='s';
			                       *(FCNN_2L_W_FBALL_22_11->name+49)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+50)='r';
			                       *(FCNN_2L_W_FBALL_22_11->name+51)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+52)='c';
			                       *(FCNN_2L_W_FBALL_22_11->name+53)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+54)='i';
			                       *(FCNN_2L_W_FBALL_22_11->name+55)='v';
			                       *(FCNN_2L_W_FBALL_22_11->name+56)='i';
			                       *(FCNN_2L_W_FBALL_22_11->name+57)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+58)='g';
			                       *(FCNN_2L_W_FBALL_22_11->name+59)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+60)='i';
			                       *(FCNN_2L_W_FBALL_22_11->name+61)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+62)='p';
			                       *(FCNN_2L_W_FBALL_22_11->name+63)='u';
			                       *(FCNN_2L_W_FBALL_22_11->name+64)='t';
			                       *(FCNN_2L_W_FBALL_22_11->name+65)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+66)='t';
			                       *(FCNN_2L_W_FBALL_22_11->name+67)='h';
			                       *(FCNN_2L_W_FBALL_22_11->name+68)='r';
			                       *(FCNN_2L_W_FBALL_22_11->name+69)='o';
			                       *(FCNN_2L_W_FBALL_22_11->name+70)='u';
			                       *(FCNN_2L_W_FBALL_22_11->name+71)='g';
			                       *(FCNN_2L_W_FBALL_22_11->name+72)='h';
			                       *(FCNN_2L_W_FBALL_22_11->name+73)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+74)='W';
			                       *(FCNN_2L_W_FBALL_22_11->name+75)='i';
			                       *(FCNN_2L_W_FBALL_22_11->name+76)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+77)='d';
			                       *(FCNN_2L_W_FBALL_22_11->name+78)='o';
			                       *(FCNN_2L_W_FBALL_22_11->name+79)='w';
			                       *(FCNN_2L_W_FBALL_22_11->name+80)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+81)='f';
			                       *(FCNN_2L_W_FBALL_22_11->name+82)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+83)='e';
			                       *(FCNN_2L_W_FBALL_22_11->name+84)='d';
			                       *(FCNN_2L_W_FBALL_22_11->name+85)='b';
			                       *(FCNN_2L_W_FBALL_22_11->name+86)='a';
			                       *(FCNN_2L_W_FBALL_22_11->name+87)='c';
			                       *(FCNN_2L_W_FBALL_22_11->name+88)='k';
			                       *(FCNN_2L_W_FBALL_22_11->name+89)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+90)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+91)='>';
			                       *(FCNN_2L_W_FBALL_22_11->name+92)='2';
			                       *(FCNN_2L_W_FBALL_22_11->name+93)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+94)='a';
			                       *(FCNN_2L_W_FBALL_22_11->name+95)='n';
			                       *(FCNN_2L_W_FBALL_22_11->name+96)='d';
			                       *(FCNN_2L_W_FBALL_22_11->name+97)='_';
			                       *(FCNN_2L_W_FBALL_22_11->name+98)='1';
			                       *(FCNN_2L_W_FBALL_22_11->name+99)='>';
			                       *(FCNN_2L_W_FBALL_22_11->name+100)='1';
			                       *(FCNN_2L_W_FBALL_22_11->name+101)=')';
			                       *(FCNN_2L_W_FBALL_22_11->name+102)=' ';
			                       FCNN_2L_W_FBALL_22_11->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_22_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_22_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_22_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_22_11->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_22_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_22_11->recurrence=T;
			                       FCNN_2L_W_FBALL_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FBALL_22_11->source=MAI((long int)FCNN_2L_W_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_11->source+0)=2;
			                       *(FCNN_2L_W_FBALL_22_11->source+1)=1;
			                       FCNN_2L_W_FBALL_22_11->destination=MAI((long int)FCNN_2L_W_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_11->destination+0)=2;
			                       *(FCNN_2L_W_FBALL_22_11->destination+1)=1;
			                       FCNN_2L_W_FBALL_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->create_neuron==0) exit_handling(50,1); 
			                       *(FCNN_2L_W_FBALL_22_11->create_neuron+0)=create_FCNN_2L_FBALL_22_11;
			                       FCNN_2L_W_FBALL_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_22_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_22_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->node_linear_output==0) exit_handling(50,2);
			                       *(FCNN_2L_W_FBALL_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->node_output==0) exit_handling(50,3);
			                       *(FCNN_2L_W_FBALL_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->node_output_derivation==0) exit_handling(50,4);
			                       *(FCNN_2L_W_FBALL_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_22_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->firing_neuron==0) exit_handling(50,5);
			                       *(FCNN_2L_W_FBALL_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_11->create_learning_algorithm==0) exit_handling(50,6);
			                       *(FCNN_2L_W_FBALL_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_22_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_21_11;
			                       FCNN_2L_W_FBALL_21_11=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_21_11->name=MAC((long int)103);
			                       *(FCNN_2L_W_FBALL_21_11->name+0)='F';
			                       *(FCNN_2L_W_FBALL_21_11->name+1)='C';
			                       *(FCNN_2L_W_FBALL_21_11->name+2)='N';
			                       *(FCNN_2L_W_FBALL_21_11->name+3)='N';
			                       *(FCNN_2L_W_FBALL_21_11->name+4)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+5)='2';
			                       *(FCNN_2L_W_FBALL_21_11->name+6)='L';
			                       *(FCNN_2L_W_FBALL_21_11->name+7)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+8)='W';
			                       *(FCNN_2L_W_FBALL_21_11->name+9)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+10)='F';
			                       *(FCNN_2L_W_FBALL_21_11->name+11)='B';
			                       *(FCNN_2L_W_FBALL_21_11->name+12)='A';
			                       *(FCNN_2L_W_FBALL_21_11->name+13)='L';
			                       *(FCNN_2L_W_FBALL_21_11->name+14)='L';
			                       *(FCNN_2L_W_FBALL_21_11->name+15)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+16)='2';
			                       *(FCNN_2L_W_FBALL_21_11->name+17)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+18)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+19)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+20)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+21)='(';
			                       *(FCNN_2L_W_FBALL_21_11->name+22)='F';
			                       *(FCNN_2L_W_FBALL_21_11->name+23)='u';
			                       *(FCNN_2L_W_FBALL_21_11->name+24)='l';
			                       *(FCNN_2L_W_FBALL_21_11->name+25)='l';
			                       *(FCNN_2L_W_FBALL_21_11->name+26)='y';
			                       *(FCNN_2L_W_FBALL_21_11->name+27)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+28)='C';
			                       *(FCNN_2L_W_FBALL_21_11->name+29)='o';
			                       *(FCNN_2L_W_FBALL_21_11->name+30)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+31)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+32)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+33)='c';
			                       *(FCNN_2L_W_FBALL_21_11->name+34)='t';
			                       *(FCNN_2L_W_FBALL_21_11->name+35)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+36)='d';
			                       *(FCNN_2L_W_FBALL_21_11->name+37)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+38)='N';
			                       *(FCNN_2L_W_FBALL_21_11->name+39)='N';
			                       *(FCNN_2L_W_FBALL_21_11->name+40)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+41)='2';
			                       *(FCNN_2L_W_FBALL_21_11->name+42)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+43)='L';
			                       *(FCNN_2L_W_FBALL_21_11->name+44)='a';
			                       *(FCNN_2L_W_FBALL_21_11->name+45)='y';
			                       *(FCNN_2L_W_FBALL_21_11->name+46)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+47)='r';
			                       *(FCNN_2L_W_FBALL_21_11->name+48)='s';
			                       *(FCNN_2L_W_FBALL_21_11->name+49)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+50)='r';
			                       *(FCNN_2L_W_FBALL_21_11->name+51)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+52)='c';
			                       *(FCNN_2L_W_FBALL_21_11->name+53)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+54)='i';
			                       *(FCNN_2L_W_FBALL_21_11->name+55)='v';
			                       *(FCNN_2L_W_FBALL_21_11->name+56)='i';
			                       *(FCNN_2L_W_FBALL_21_11->name+57)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+58)='g';
			                       *(FCNN_2L_W_FBALL_21_11->name+59)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+60)='i';
			                       *(FCNN_2L_W_FBALL_21_11->name+61)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+62)='p';
			                       *(FCNN_2L_W_FBALL_21_11->name+63)='u';
			                       *(FCNN_2L_W_FBALL_21_11->name+64)='t';
			                       *(FCNN_2L_W_FBALL_21_11->name+65)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+66)='t';
			                       *(FCNN_2L_W_FBALL_21_11->name+67)='h';
			                       *(FCNN_2L_W_FBALL_21_11->name+68)='r';
			                       *(FCNN_2L_W_FBALL_21_11->name+69)='o';
			                       *(FCNN_2L_W_FBALL_21_11->name+70)='u';
			                       *(FCNN_2L_W_FBALL_21_11->name+71)='g';
			                       *(FCNN_2L_W_FBALL_21_11->name+72)='h';
			                       *(FCNN_2L_W_FBALL_21_11->name+73)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+74)='W';
			                       *(FCNN_2L_W_FBALL_21_11->name+75)='i';
			                       *(FCNN_2L_W_FBALL_21_11->name+76)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+77)='d';
			                       *(FCNN_2L_W_FBALL_21_11->name+78)='o';
			                       *(FCNN_2L_W_FBALL_21_11->name+79)='w';
			                       *(FCNN_2L_W_FBALL_21_11->name+80)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+81)='f';
			                       *(FCNN_2L_W_FBALL_21_11->name+82)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+83)='e';
			                       *(FCNN_2L_W_FBALL_21_11->name+84)='d';
			                       *(FCNN_2L_W_FBALL_21_11->name+85)='b';
			                       *(FCNN_2L_W_FBALL_21_11->name+86)='a';
			                       *(FCNN_2L_W_FBALL_21_11->name+87)='c';
			                       *(FCNN_2L_W_FBALL_21_11->name+88)='k';
			                       *(FCNN_2L_W_FBALL_21_11->name+89)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+90)='2';
			                       *(FCNN_2L_W_FBALL_21_11->name+91)='>';
			                       *(FCNN_2L_W_FBALL_21_11->name+92)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+93)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+94)='a';
			                       *(FCNN_2L_W_FBALL_21_11->name+95)='n';
			                       *(FCNN_2L_W_FBALL_21_11->name+96)='d';
			                       *(FCNN_2L_W_FBALL_21_11->name+97)='_';
			                       *(FCNN_2L_W_FBALL_21_11->name+98)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+99)='>';
			                       *(FCNN_2L_W_FBALL_21_11->name+100)='1';
			                       *(FCNN_2L_W_FBALL_21_11->name+101)=')';
			                       *(FCNN_2L_W_FBALL_21_11->name+102)=' ';
			                       FCNN_2L_W_FBALL_21_11->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_21_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_21_11->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_21_11->recurrence=T;
			                       FCNN_2L_W_FBALL_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FBALL_21_11->source=MAI((long int)FCNN_2L_W_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_21_11->source+0)=2;
			                       *(FCNN_2L_W_FBALL_21_11->source+1)=1;
			                       FCNN_2L_W_FBALL_21_11->destination=MAI((long int)FCNN_2L_W_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_21_11->destination+0)=1;
			                       *(FCNN_2L_W_FBALL_21_11->destination+1)=1;
			                       FCNN_2L_W_FBALL_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->create_neuron==0) exit_handling(51,1); 
			                       *(FCNN_2L_W_FBALL_21_11->create_neuron+0)=create_FCNN_2L_FBALL_21_11;
			                       FCNN_2L_W_FBALL_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->node_linear_output==0) exit_handling(51,2);
			                       *(FCNN_2L_W_FBALL_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->node_output==0) exit_handling(51,3);
			                       *(FCNN_2L_W_FBALL_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->node_output_derivation==0) exit_handling(51,4);
			                       *(FCNN_2L_W_FBALL_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->firing_neuron==0) exit_handling(51,5);
			                       *(FCNN_2L_W_FBALL_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_21_11->create_learning_algorithm==0) exit_handling(51,6);
			                       *(FCNN_2L_W_FBALL_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_21_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_22_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_22_21;
			                       FCNN_2L_W_FBALL_22_21=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_22_21->name=MAC((long int)103);
			                       *(FCNN_2L_W_FBALL_22_21->name+0)='F';
			                       *(FCNN_2L_W_FBALL_22_21->name+1)='C';
			                       *(FCNN_2L_W_FBALL_22_21->name+2)='N';
			                       *(FCNN_2L_W_FBALL_22_21->name+3)='N';
			                       *(FCNN_2L_W_FBALL_22_21->name+4)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+5)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+6)='L';
			                       *(FCNN_2L_W_FBALL_22_21->name+7)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+8)='W';
			                       *(FCNN_2L_W_FBALL_22_21->name+9)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+10)='F';
			                       *(FCNN_2L_W_FBALL_22_21->name+11)='B';
			                       *(FCNN_2L_W_FBALL_22_21->name+12)='A';
			                       *(FCNN_2L_W_FBALL_22_21->name+13)='L';
			                       *(FCNN_2L_W_FBALL_22_21->name+14)='L';
			                       *(FCNN_2L_W_FBALL_22_21->name+15)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+16)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+17)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+18)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+19)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+20)='1';
			                       *(FCNN_2L_W_FBALL_22_21->name+21)='(';
			                       *(FCNN_2L_W_FBALL_22_21->name+22)='F';
			                       *(FCNN_2L_W_FBALL_22_21->name+23)='u';
			                       *(FCNN_2L_W_FBALL_22_21->name+24)='l';
			                       *(FCNN_2L_W_FBALL_22_21->name+25)='l';
			                       *(FCNN_2L_W_FBALL_22_21->name+26)='y';
			                       *(FCNN_2L_W_FBALL_22_21->name+27)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+28)='C';
			                       *(FCNN_2L_W_FBALL_22_21->name+29)='o';
			                       *(FCNN_2L_W_FBALL_22_21->name+30)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+31)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+32)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+33)='c';
			                       *(FCNN_2L_W_FBALL_22_21->name+34)='t';
			                       *(FCNN_2L_W_FBALL_22_21->name+35)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+36)='d';
			                       *(FCNN_2L_W_FBALL_22_21->name+37)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+38)='N';
			                       *(FCNN_2L_W_FBALL_22_21->name+39)='N';
			                       *(FCNN_2L_W_FBALL_22_21->name+40)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+41)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+42)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+43)='L';
			                       *(FCNN_2L_W_FBALL_22_21->name+44)='a';
			                       *(FCNN_2L_W_FBALL_22_21->name+45)='y';
			                       *(FCNN_2L_W_FBALL_22_21->name+46)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+47)='r';
			                       *(FCNN_2L_W_FBALL_22_21->name+48)='s';
			                       *(FCNN_2L_W_FBALL_22_21->name+49)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+50)='r';
			                       *(FCNN_2L_W_FBALL_22_21->name+51)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+52)='c';
			                       *(FCNN_2L_W_FBALL_22_21->name+53)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+54)='i';
			                       *(FCNN_2L_W_FBALL_22_21->name+55)='v';
			                       *(FCNN_2L_W_FBALL_22_21->name+56)='i';
			                       *(FCNN_2L_W_FBALL_22_21->name+57)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+58)='g';
			                       *(FCNN_2L_W_FBALL_22_21->name+59)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+60)='i';
			                       *(FCNN_2L_W_FBALL_22_21->name+61)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+62)='p';
			                       *(FCNN_2L_W_FBALL_22_21->name+63)='u';
			                       *(FCNN_2L_W_FBALL_22_21->name+64)='t';
			                       *(FCNN_2L_W_FBALL_22_21->name+65)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+66)='t';
			                       *(FCNN_2L_W_FBALL_22_21->name+67)='h';
			                       *(FCNN_2L_W_FBALL_22_21->name+68)='r';
			                       *(FCNN_2L_W_FBALL_22_21->name+69)='o';
			                       *(FCNN_2L_W_FBALL_22_21->name+70)='u';
			                       *(FCNN_2L_W_FBALL_22_21->name+71)='g';
			                       *(FCNN_2L_W_FBALL_22_21->name+72)='h';
			                       *(FCNN_2L_W_FBALL_22_21->name+73)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+74)='W';
			                       *(FCNN_2L_W_FBALL_22_21->name+75)='i';
			                       *(FCNN_2L_W_FBALL_22_21->name+76)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+77)='d';
			                       *(FCNN_2L_W_FBALL_22_21->name+78)='o';
			                       *(FCNN_2L_W_FBALL_22_21->name+79)='w';
			                       *(FCNN_2L_W_FBALL_22_21->name+80)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+81)='f';
			                       *(FCNN_2L_W_FBALL_22_21->name+82)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+83)='e';
			                       *(FCNN_2L_W_FBALL_22_21->name+84)='d';
			                       *(FCNN_2L_W_FBALL_22_21->name+85)='b';
			                       *(FCNN_2L_W_FBALL_22_21->name+86)='a';
			                       *(FCNN_2L_W_FBALL_22_21->name+87)='c';
			                       *(FCNN_2L_W_FBALL_22_21->name+88)='k';
			                       *(FCNN_2L_W_FBALL_22_21->name+89)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+90)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+91)='>';
			                       *(FCNN_2L_W_FBALL_22_21->name+92)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+93)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+94)='a';
			                       *(FCNN_2L_W_FBALL_22_21->name+95)='n';
			                       *(FCNN_2L_W_FBALL_22_21->name+96)='d';
			                       *(FCNN_2L_W_FBALL_22_21->name+97)='_';
			                       *(FCNN_2L_W_FBALL_22_21->name+98)='2';
			                       *(FCNN_2L_W_FBALL_22_21->name+99)='>';
			                       *(FCNN_2L_W_FBALL_22_21->name+100)='1';
			                       *(FCNN_2L_W_FBALL_22_21->name+101)=')';
			                       *(FCNN_2L_W_FBALL_22_21->name+102)=' ';
			                       FCNN_2L_W_FBALL_22_21->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_22_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_22_21->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_22_21->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_22_21->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_22_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_22_21->recurrence=T;
			                       FCNN_2L_W_FBALL_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FBALL_22_21->source=MAI((long int)FCNN_2L_W_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_21->source+0)=2;
			                       *(FCNN_2L_W_FBALL_22_21->source+1)=2;
			                       FCNN_2L_W_FBALL_22_21->destination=MAI((long int)FCNN_2L_W_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_21->destination+0)=2;
			                       *(FCNN_2L_W_FBALL_22_21->destination+1)=1;
			                       FCNN_2L_W_FBALL_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->create_neuron==0) exit_handling(52,1); 
			                       *(FCNN_2L_W_FBALL_22_21->create_neuron+0)=create_FCNN_2L_FBALL_22_21;
			                       FCNN_2L_W_FBALL_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_22_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_22_21->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->node_linear_output==0) exit_handling(52,2);
			                       *(FCNN_2L_W_FBALL_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->node_output==0) exit_handling(52,3);
			                       *(FCNN_2L_W_FBALL_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->node_output_derivation==0) exit_handling(52,4);
			                       *(FCNN_2L_W_FBALL_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_22_21->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->firing_neuron==0) exit_handling(52,5);
			                       *(FCNN_2L_W_FBALL_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21->create_learning_algorithm==0) exit_handling(52,6);
			                       *(FCNN_2L_W_FBALL_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_22_21);
			                      } /* ; */

/* setting up FCNN_2L_W_FBALL_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FBALL_22_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FBALL_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FBALL_22_21_11;
			                       FCNN_2L_W_FBALL_22_21_11=MANTD((long int)1);
			                       FCNN_2L_W_FBALL_22_21_11->name=MAC((long int)114);
			                       *(FCNN_2L_W_FBALL_22_21_11->name+0)='F';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+1)='C';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+2)='N';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+3)='N';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+4)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+5)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+6)='L';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+7)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+8)='W';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+9)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+10)='F';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+11)='B';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+12)='A';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+13)='L';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+14)='L';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+15)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+16)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+17)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+18)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+19)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+20)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+21)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+22)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+23)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+24)='(';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+25)='F';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+26)='u';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+27)='l';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+28)='l';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+29)='y';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+30)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+31)='C';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+32)='o';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+33)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+34)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+35)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+36)='c';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+37)='t';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+38)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+39)='d';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+40)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+41)='N';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+42)='N';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+43)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+44)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+45)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+46)='L';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+47)='a';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+48)='y';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+49)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+50)='r';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+51)='s';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+52)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+53)='r';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+54)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+55)='c';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+56)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+57)='i';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+58)='v';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+59)='i';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+60)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+61)='g';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+62)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+63)='i';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+64)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+65)='p';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+66)='u';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+67)='t';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+68)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+69)='t';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+70)='h';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+71)='r';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+72)='o';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+73)='u';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+74)='g';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+75)='h';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+76)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+77)='W';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+78)='i';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+79)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+80)='d';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+81)='o';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+82)='w';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+83)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+84)='f';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+85)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+86)='e';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+87)='d';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+88)='b';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+89)='a';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+90)='c';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+91)='k';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+92)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+93)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+94)='>';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+95)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+96)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+97)='a';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+98)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+99)='d';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+100)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+101)='2';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+102)='>';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+103)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+104)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+105)='a';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+106)='n';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+107)='d';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+108)='_';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+109)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+110)='>';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+111)='1';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+112)=')';
			                       *(FCNN_2L_W_FBALL_22_21_11->name+113)=' ';
			                       FCNN_2L_W_FBALL_22_21_11->number_of_Levels=2;
			                       FCNN_2L_W_FBALL_22_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FBALL_22_21_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FBALL_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FBALL_22_21_11->number_of_Levels);
			                       *(FCNN_2L_W_FBALL_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FBALL_22_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FBALL_22_21_11->recurrence=T;
			                       FCNN_2L_W_FBALL_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_W_FBALL_22_21_11->source=MAI((long int)FCNN_2L_W_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_21_11->source+0)=2;
			                       *(FCNN_2L_W_FBALL_22_21_11->source+1)=2;
			                       *(FCNN_2L_W_FBALL_22_21_11->source+2)=1;
			                       FCNN_2L_W_FBALL_22_21_11->destination=MAI((long int)FCNN_2L_W_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FBALL_22_21_11->destination+0)=2;
			                       *(FCNN_2L_W_FBALL_22_21_11->destination+1)=1;
			                       *(FCNN_2L_W_FBALL_22_21_11->destination+2)=1;
			                       FCNN_2L_W_FBALL_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FBALL_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->create_neuron==0) exit_handling(53,1); 
			                       *(FCNN_2L_W_FBALL_22_21_11->create_neuron+0)=create_FCNN_2L_FBALL_22_21_11;
			                       FCNN_2L_W_FBALL_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FBALL_22_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FBALL_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FBALL_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->node_linear_output==0) exit_handling(53,2);
			                       *(FCNN_2L_W_FBALL_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FBALL_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FBALL_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->node_output==0) exit_handling(53,3);
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FBALL_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->node_output_derivation==0) exit_handling(53,4);
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FBALL_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FBALL_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FBALL_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->firing_neuron==0) exit_handling(53,5);
			                       *(FCNN_2L_W_FBALL_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FBALL_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FBALL_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FBALL_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FBALL_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FBALL_22_21_11->create_learning_algorithm==0) exit_handling(53,6);
			                       *(FCNN_2L_W_FBALL_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FBALL_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FBALL_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_1out_FBALL_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_11;
			                       FCNN_2L_1out_FBALL_11=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_11->name=MAC((long int)73);
			                       *(FCNN_2L_1out_FBALL_11->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_11->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_11->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_11->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_11->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_11->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_11->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_11->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_11->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_11->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_11->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_11->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_11->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_11->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_11->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+19)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+20)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+21)='(';
			                       *(FCNN_2L_1out_FBALL_11->name+22)='F';
			                       *(FCNN_2L_1out_FBALL_11->name+23)='u';
			                       *(FCNN_2L_1out_FBALL_11->name+24)='l';
			                       *(FCNN_2L_1out_FBALL_11->name+25)='l';
			                       *(FCNN_2L_1out_FBALL_11->name+26)='y';
			                       *(FCNN_2L_1out_FBALL_11->name+27)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+28)='C';
			                       *(FCNN_2L_1out_FBALL_11->name+29)='o';
			                       *(FCNN_2L_1out_FBALL_11->name+30)='n';
			                       *(FCNN_2L_1out_FBALL_11->name+31)='n';
			                       *(FCNN_2L_1out_FBALL_11->name+32)='e';
			                       *(FCNN_2L_1out_FBALL_11->name+33)='c';
			                       *(FCNN_2L_1out_FBALL_11->name+34)='t';
			                       *(FCNN_2L_1out_FBALL_11->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_11->name+36)='d';
			                       *(FCNN_2L_1out_FBALL_11->name+37)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+38)='N';
			                       *(FCNN_2L_1out_FBALL_11->name+39)='N';
			                       *(FCNN_2L_1out_FBALL_11->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+41)='2';
			                       *(FCNN_2L_1out_FBALL_11->name+42)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+43)='L';
			                       *(FCNN_2L_1out_FBALL_11->name+44)='a';
			                       *(FCNN_2L_1out_FBALL_11->name+45)='y';
			                       *(FCNN_2L_1out_FBALL_11->name+46)='e';
			                       *(FCNN_2L_1out_FBALL_11->name+47)='r';
			                       *(FCNN_2L_1out_FBALL_11->name+48)='s';
			                       *(FCNN_2L_1out_FBALL_11->name+49)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+50)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+51)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+52)='o';
			                       *(FCNN_2L_1out_FBALL_11->name+53)='u';
			                       *(FCNN_2L_1out_FBALL_11->name+54)='t';
			                       *(FCNN_2L_1out_FBALL_11->name+55)='p';
			                       *(FCNN_2L_1out_FBALL_11->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_11->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_11->name+58)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+59)='f';
			                       *(FCNN_2L_1out_FBALL_11->name+60)='e';
			                       *(FCNN_2L_1out_FBALL_11->name+61)='e';
			                       *(FCNN_2L_1out_FBALL_11->name+62)='d';
			                       *(FCNN_2L_1out_FBALL_11->name+63)='b';
			                       *(FCNN_2L_1out_FBALL_11->name+64)='a';
			                       *(FCNN_2L_1out_FBALL_11->name+65)='c';
			                       *(FCNN_2L_1out_FBALL_11->name+66)='k';
			                       *(FCNN_2L_1out_FBALL_11->name+67)='_';
			                       *(FCNN_2L_1out_FBALL_11->name+68)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+69)='>';
			                       *(FCNN_2L_1out_FBALL_11->name+70)='1';
			                       *(FCNN_2L_1out_FBALL_11->name+71)=')';
			                       *(FCNN_2L_1out_FBALL_11->name+72)=' ';
			                       FCNN_2L_1out_FBALL_11->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FBALL_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_11->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_11->recurrence=T;
			                       FCNN_2L_1out_FBALL_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FBALL_11->source=MAI((long int)FCNN_2L_1out_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_11->source+0)=1;
			                       FCNN_2L_1out_FBALL_11->destination=MAI((long int)FCNN_2L_1out_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_11->destination+0)=1;
			                       FCNN_2L_1out_FBALL_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->create_neuron==0) exit_handling(54,1); 
			                       *(FCNN_2L_1out_FBALL_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_11;
			                       FCNN_2L_1out_FBALL_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_11->prepare_input=0;
			                       FCNN_2L_1out_FBALL_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->node_linear_output==0) exit_handling(54,2);
			                       *(FCNN_2L_1out_FBALL_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->node_output==0) exit_handling(54,3);
			                       *(FCNN_2L_1out_FBALL_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->node_output_derivation==0) exit_handling(54,4);
			                       *(FCNN_2L_1out_FBALL_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->firing_neuron==0) exit_handling(54,5);
			                       *(FCNN_2L_1out_FBALL_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_11->create_learning_algorithm==0) exit_handling(54,6);
			                       *(FCNN_2L_1out_FBALL_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_22 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_22;
			                       FCNN_2L_1out_FBALL_22=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_22->name=MAC((long int)73);
			                       *(FCNN_2L_1out_FBALL_22->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_22->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_22->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_22->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_22->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_22->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_22->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_22->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_22->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_22->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_22->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_22->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_22->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_22->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_22->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+20)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+21)='(';
			                       *(FCNN_2L_1out_FBALL_22->name+22)='F';
			                       *(FCNN_2L_1out_FBALL_22->name+23)='u';
			                       *(FCNN_2L_1out_FBALL_22->name+24)='l';
			                       *(FCNN_2L_1out_FBALL_22->name+25)='l';
			                       *(FCNN_2L_1out_FBALL_22->name+26)='y';
			                       *(FCNN_2L_1out_FBALL_22->name+27)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+28)='C';
			                       *(FCNN_2L_1out_FBALL_22->name+29)='o';
			                       *(FCNN_2L_1out_FBALL_22->name+30)='n';
			                       *(FCNN_2L_1out_FBALL_22->name+31)='n';
			                       *(FCNN_2L_1out_FBALL_22->name+32)='e';
			                       *(FCNN_2L_1out_FBALL_22->name+33)='c';
			                       *(FCNN_2L_1out_FBALL_22->name+34)='t';
			                       *(FCNN_2L_1out_FBALL_22->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_22->name+36)='d';
			                       *(FCNN_2L_1out_FBALL_22->name+37)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+38)='N';
			                       *(FCNN_2L_1out_FBALL_22->name+39)='N';
			                       *(FCNN_2L_1out_FBALL_22->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+41)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+42)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+43)='L';
			                       *(FCNN_2L_1out_FBALL_22->name+44)='a';
			                       *(FCNN_2L_1out_FBALL_22->name+45)='y';
			                       *(FCNN_2L_1out_FBALL_22->name+46)='e';
			                       *(FCNN_2L_1out_FBALL_22->name+47)='r';
			                       *(FCNN_2L_1out_FBALL_22->name+48)='s';
			                       *(FCNN_2L_1out_FBALL_22->name+49)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+50)='1';
			                       *(FCNN_2L_1out_FBALL_22->name+51)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+52)='o';
			                       *(FCNN_2L_1out_FBALL_22->name+53)='u';
			                       *(FCNN_2L_1out_FBALL_22->name+54)='t';
			                       *(FCNN_2L_1out_FBALL_22->name+55)='p';
			                       *(FCNN_2L_1out_FBALL_22->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_22->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_22->name+58)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+59)='f';
			                       *(FCNN_2L_1out_FBALL_22->name+60)='e';
			                       *(FCNN_2L_1out_FBALL_22->name+61)='e';
			                       *(FCNN_2L_1out_FBALL_22->name+62)='d';
			                       *(FCNN_2L_1out_FBALL_22->name+63)='b';
			                       *(FCNN_2L_1out_FBALL_22->name+64)='a';
			                       *(FCNN_2L_1out_FBALL_22->name+65)='c';
			                       *(FCNN_2L_1out_FBALL_22->name+66)='k';
			                       *(FCNN_2L_1out_FBALL_22->name+67)='_';
			                       *(FCNN_2L_1out_FBALL_22->name+68)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+69)='>';
			                       *(FCNN_2L_1out_FBALL_22->name+70)='2';
			                       *(FCNN_2L_1out_FBALL_22->name+71)=')';
			                       *(FCNN_2L_1out_FBALL_22->name+72)=' ';
			                       FCNN_2L_1out_FBALL_22->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_22->inputs_per_first_Level_node=2; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L_1out_FBALL_22->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_22->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_22->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_22->recurrence=T;
			                       FCNN_2L_1out_FBALL_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FBALL_22->source=MAI((long int)FCNN_2L_1out_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22->source+0)=2;
			                       FCNN_2L_1out_FBALL_22->destination=MAI((long int)FCNN_2L_1out_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22->destination+0)=2;
			                       FCNN_2L_1out_FBALL_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->create_neuron==0) exit_handling(55,1); 
			                       *(FCNN_2L_1out_FBALL_22->create_neuron+0)=create_FCNN_2L_1out_FBALL_22;
			                       FCNN_2L_1out_FBALL_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_22->prepare_input=0;
			                       FCNN_2L_1out_FBALL_22->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->node_linear_output==0) exit_handling(55,2);
			                       *(FCNN_2L_1out_FBALL_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_22->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_22->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->node_output==0) exit_handling(55,3);
			                       *(FCNN_2L_1out_FBALL_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->node_output_derivation==0) exit_handling(55,4);
			                       *(FCNN_2L_1out_FBALL_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_22->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->firing_neuron==0) exit_handling(55,5);
			                       *(FCNN_2L_1out_FBALL_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_22->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22->create_learning_algorithm==0) exit_handling(55,6);
			                       *(FCNN_2L_1out_FBALL_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_22);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_21 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto the 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_21;
			                       FCNN_2L_1out_FBALL_21=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_21->name=MAC((long int)73);
			                       *(FCNN_2L_1out_FBALL_21->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_21->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_21->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_21->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_21->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_21->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_21->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_21->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_21->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_21->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_21->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_21->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_21->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_21->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_21->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_21->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_21->name+20)='1';
			                       *(FCNN_2L_1out_FBALL_21->name+21)='(';
			                       *(FCNN_2L_1out_FBALL_21->name+22)='F';
			                       *(FCNN_2L_1out_FBALL_21->name+23)='u';
			                       *(FCNN_2L_1out_FBALL_21->name+24)='l';
			                       *(FCNN_2L_1out_FBALL_21->name+25)='l';
			                       *(FCNN_2L_1out_FBALL_21->name+26)='y';
			                       *(FCNN_2L_1out_FBALL_21->name+27)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+28)='C';
			                       *(FCNN_2L_1out_FBALL_21->name+29)='o';
			                       *(FCNN_2L_1out_FBALL_21->name+30)='n';
			                       *(FCNN_2L_1out_FBALL_21->name+31)='n';
			                       *(FCNN_2L_1out_FBALL_21->name+32)='e';
			                       *(FCNN_2L_1out_FBALL_21->name+33)='c';
			                       *(FCNN_2L_1out_FBALL_21->name+34)='t';
			                       *(FCNN_2L_1out_FBALL_21->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_21->name+36)='d';
			                       *(FCNN_2L_1out_FBALL_21->name+37)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+38)='N';
			                       *(FCNN_2L_1out_FBALL_21->name+39)='N';
			                       *(FCNN_2L_1out_FBALL_21->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+41)='2';
			                       *(FCNN_2L_1out_FBALL_21->name+42)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+43)='L';
			                       *(FCNN_2L_1out_FBALL_21->name+44)='a';
			                       *(FCNN_2L_1out_FBALL_21->name+45)='y';
			                       *(FCNN_2L_1out_FBALL_21->name+46)='e';
			                       *(FCNN_2L_1out_FBALL_21->name+47)='r';
			                       *(FCNN_2L_1out_FBALL_21->name+48)='s';
			                       *(FCNN_2L_1out_FBALL_21->name+49)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+50)='1';
			                       *(FCNN_2L_1out_FBALL_21->name+51)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+52)='o';
			                       *(FCNN_2L_1out_FBALL_21->name+53)='u';
			                       *(FCNN_2L_1out_FBALL_21->name+54)='t';
			                       *(FCNN_2L_1out_FBALL_21->name+55)='p';
			                       *(FCNN_2L_1out_FBALL_21->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_21->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_21->name+58)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+59)='f';
			                       *(FCNN_2L_1out_FBALL_21->name+60)='e';
			                       *(FCNN_2L_1out_FBALL_21->name+61)='e';
			                       *(FCNN_2L_1out_FBALL_21->name+62)='d';
			                       *(FCNN_2L_1out_FBALL_21->name+63)='b';
			                       *(FCNN_2L_1out_FBALL_21->name+64)='a';
			                       *(FCNN_2L_1out_FBALL_21->name+65)='c';
			                       *(FCNN_2L_1out_FBALL_21->name+66)='k';
			                       *(FCNN_2L_1out_FBALL_21->name+67)='_';
			                       *(FCNN_2L_1out_FBALL_21->name+68)='2';
			                       *(FCNN_2L_1out_FBALL_21->name+69)='>';
			                       *(FCNN_2L_1out_FBALL_21->name+70)='1';
			                       *(FCNN_2L_1out_FBALL_21->name+71)=')';
			                       *(FCNN_2L_1out_FBALL_21->name+72)=' ';
			                       FCNN_2L_1out_FBALL_21->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FBALL_21->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_21->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_21->recurrence=T;
			                       FCNN_2L_1out_FBALL_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FBALL_21->source=MAI((long int)FCNN_2L_1out_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_21->source+0)=2;
			                       FCNN_2L_1out_FBALL_21->destination=MAI((long int)FCNN_2L_1out_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_21->destination+0)=1;
			                       FCNN_2L_1out_FBALL_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->create_neuron==0) exit_handling(56,1); 
			                       *(FCNN_2L_1out_FBALL_21->create_neuron+0)=create_FCNN_2L_1out_FBALL_21;
			                       FCNN_2L_1out_FBALL_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_21->prepare_input=0;
			                       FCNN_2L_1out_FBALL_21->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->node_linear_output==0) exit_handling(56,2);
			                       *(FCNN_2L_1out_FBALL_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_21->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_21->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->node_output==0) exit_handling(56,3);
			                       *(FCNN_2L_1out_FBALL_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->node_output_derivation==0) exit_handling(56,4);
			                       *(FCNN_2L_1out_FBALL_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_21->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->firing_neuron==0) exit_handling(56,5);
			                       *(FCNN_2L_1out_FBALL_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_1out_FBALL_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_1out_FBALL_21->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21->create_learning_algorithm==0) exit_handling(56,6);
			                       *(FCNN_2L_1out_FBALL_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_21);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_22_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_22_11;
			                       FCNN_2L_1out_FBALL_22_11=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_22_11->name=MAC((long int)80);
			                       *(FCNN_2L_1out_FBALL_22_11->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_22_11->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_22_11->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_22_11->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_22_11->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_22_11->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_22_11->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_22_11->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_22_11->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_22_11->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_22_11->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_22_11->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_22_11->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_22_11->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+20)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+21)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+22)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+23)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+24)='(';
			                       *(FCNN_2L_1out_FBALL_22_11->name+25)='F';
			                       *(FCNN_2L_1out_FBALL_22_11->name+26)='u';
			                       *(FCNN_2L_1out_FBALL_22_11->name+27)='l';
			                       *(FCNN_2L_1out_FBALL_22_11->name+28)='l';
			                       *(FCNN_2L_1out_FBALL_22_11->name+29)='y';
			                       *(FCNN_2L_1out_FBALL_22_11->name+30)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+31)='C';
			                       *(FCNN_2L_1out_FBALL_22_11->name+32)='o';
			                       *(FCNN_2L_1out_FBALL_22_11->name+33)='n';
			                       *(FCNN_2L_1out_FBALL_22_11->name+34)='n';
			                       *(FCNN_2L_1out_FBALL_22_11->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_22_11->name+36)='c';
			                       *(FCNN_2L_1out_FBALL_22_11->name+37)='t';
			                       *(FCNN_2L_1out_FBALL_22_11->name+38)='e';
			                       *(FCNN_2L_1out_FBALL_22_11->name+39)='d';
			                       *(FCNN_2L_1out_FBALL_22_11->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+41)='N';
			                       *(FCNN_2L_1out_FBALL_22_11->name+42)='N';
			                       *(FCNN_2L_1out_FBALL_22_11->name+43)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+44)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+45)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+46)='L';
			                       *(FCNN_2L_1out_FBALL_22_11->name+47)='a';
			                       *(FCNN_2L_1out_FBALL_22_11->name+48)='y';
			                       *(FCNN_2L_1out_FBALL_22_11->name+49)='e';
			                       *(FCNN_2L_1out_FBALL_22_11->name+50)='r';
			                       *(FCNN_2L_1out_FBALL_22_11->name+51)='s';
			                       *(FCNN_2L_1out_FBALL_22_11->name+52)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+53)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+54)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+55)='o';
			                       *(FCNN_2L_1out_FBALL_22_11->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_22_11->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_22_11->name+58)='p';
			                       *(FCNN_2L_1out_FBALL_22_11->name+59)='u';
			                       *(FCNN_2L_1out_FBALL_22_11->name+60)='t';
			                       *(FCNN_2L_1out_FBALL_22_11->name+61)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+62)='f';
			                       *(FCNN_2L_1out_FBALL_22_11->name+63)='e';
			                       *(FCNN_2L_1out_FBALL_22_11->name+64)='e';
			                       *(FCNN_2L_1out_FBALL_22_11->name+65)='d';
			                       *(FCNN_2L_1out_FBALL_22_11->name+66)='b';
			                       *(FCNN_2L_1out_FBALL_22_11->name+67)='a';
			                       *(FCNN_2L_1out_FBALL_22_11->name+68)='c';
			                       *(FCNN_2L_1out_FBALL_22_11->name+69)='k';
			                       *(FCNN_2L_1out_FBALL_22_11->name+70)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+71)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+72)='>';
			                       *(FCNN_2L_1out_FBALL_22_11->name+73)='2';
			                       *(FCNN_2L_1out_FBALL_22_11->name+74)='_';
			                       *(FCNN_2L_1out_FBALL_22_11->name+75)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+76)='>';
			                       *(FCNN_2L_1out_FBALL_22_11->name+77)='1';
			                       *(FCNN_2L_1out_FBALL_22_11->name+78)=')';
			                       *(FCNN_2L_1out_FBALL_22_11->name+79)=' ';
			                       FCNN_2L_1out_FBALL_22_11->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_22_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FBALL_22_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_22_11->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_22_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_22_11->recurrence=T;
			                       FCNN_2L_1out_FBALL_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FBALL_22_11->source=MAI((long int)FCNN_2L_1out_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_11->source+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_11->source+1)=1;
			                       FCNN_2L_1out_FBALL_22_11->destination=MAI((long int)FCNN_2L_1out_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_11->destination+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_11->destination+1)=1;
			                       FCNN_2L_1out_FBALL_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->create_neuron==0) exit_handling(57,1); 
			                       *(FCNN_2L_1out_FBALL_22_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_11;
			                       FCNN_2L_1out_FBALL_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_22_11->prepare_input=0;
			                       FCNN_2L_1out_FBALL_22_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->node_linear_output==0) exit_handling(57,2);
			                       *(FCNN_2L_1out_FBALL_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_11->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_1out_FBALL_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->node_output==0) exit_handling(57,3);
			                       *(FCNN_2L_1out_FBALL_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->node_output_derivation==0) exit_handling(57,4);
			                       *(FCNN_2L_1out_FBALL_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_22_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->firing_neuron==0) exit_handling(57,5);
			                       *(FCNN_2L_1out_FBALL_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_11->create_learning_algorithm==0) exit_handling(57,6);
			                       *(FCNN_2L_1out_FBALL_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_22_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_21_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_21_11;
			                       FCNN_2L_1out_FBALL_21_11=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_21_11->name=MAC((long int)80);
			                       *(FCNN_2L_1out_FBALL_21_11->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_21_11->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_21_11->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_21_11->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_21_11->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_21_11->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_21_11->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_21_11->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_21_11->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_21_11->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_21_11->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_21_11->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_21_11->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_21_11->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_21_11->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_21_11->name+20)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+21)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+22)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+23)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+24)='(';
			                       *(FCNN_2L_1out_FBALL_21_11->name+25)='F';
			                       *(FCNN_2L_1out_FBALL_21_11->name+26)='u';
			                       *(FCNN_2L_1out_FBALL_21_11->name+27)='l';
			                       *(FCNN_2L_1out_FBALL_21_11->name+28)='l';
			                       *(FCNN_2L_1out_FBALL_21_11->name+29)='y';
			                       *(FCNN_2L_1out_FBALL_21_11->name+30)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+31)='C';
			                       *(FCNN_2L_1out_FBALL_21_11->name+32)='o';
			                       *(FCNN_2L_1out_FBALL_21_11->name+33)='n';
			                       *(FCNN_2L_1out_FBALL_21_11->name+34)='n';
			                       *(FCNN_2L_1out_FBALL_21_11->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_21_11->name+36)='c';
			                       *(FCNN_2L_1out_FBALL_21_11->name+37)='t';
			                       *(FCNN_2L_1out_FBALL_21_11->name+38)='e';
			                       *(FCNN_2L_1out_FBALL_21_11->name+39)='d';
			                       *(FCNN_2L_1out_FBALL_21_11->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+41)='N';
			                       *(FCNN_2L_1out_FBALL_21_11->name+42)='N';
			                       *(FCNN_2L_1out_FBALL_21_11->name+43)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+44)='2';
			                       *(FCNN_2L_1out_FBALL_21_11->name+45)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+46)='L';
			                       *(FCNN_2L_1out_FBALL_21_11->name+47)='a';
			                       *(FCNN_2L_1out_FBALL_21_11->name+48)='y';
			                       *(FCNN_2L_1out_FBALL_21_11->name+49)='e';
			                       *(FCNN_2L_1out_FBALL_21_11->name+50)='r';
			                       *(FCNN_2L_1out_FBALL_21_11->name+51)='s';
			                       *(FCNN_2L_1out_FBALL_21_11->name+52)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+53)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+54)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+55)='o';
			                       *(FCNN_2L_1out_FBALL_21_11->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_21_11->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_21_11->name+58)='p';
			                       *(FCNN_2L_1out_FBALL_21_11->name+59)='u';
			                       *(FCNN_2L_1out_FBALL_21_11->name+60)='t';
			                       *(FCNN_2L_1out_FBALL_21_11->name+61)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+62)='f';
			                       *(FCNN_2L_1out_FBALL_21_11->name+63)='e';
			                       *(FCNN_2L_1out_FBALL_21_11->name+64)='e';
			                       *(FCNN_2L_1out_FBALL_21_11->name+65)='d';
			                       *(FCNN_2L_1out_FBALL_21_11->name+66)='b';
			                       *(FCNN_2L_1out_FBALL_21_11->name+67)='a';
			                       *(FCNN_2L_1out_FBALL_21_11->name+68)='c';
			                       *(FCNN_2L_1out_FBALL_21_11->name+69)='k';
			                       *(FCNN_2L_1out_FBALL_21_11->name+70)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+71)='2';
			                       *(FCNN_2L_1out_FBALL_21_11->name+72)='>';
			                       *(FCNN_2L_1out_FBALL_21_11->name+73)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+74)='_';
			                       *(FCNN_2L_1out_FBALL_21_11->name+75)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+76)='>';
			                       *(FCNN_2L_1out_FBALL_21_11->name+77)='1';
			                       *(FCNN_2L_1out_FBALL_21_11->name+78)=')';
			                       *(FCNN_2L_1out_FBALL_21_11->name+79)=' ';
			                       FCNN_2L_1out_FBALL_21_11->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedbacks */
			                       FCNN_2L_1out_FBALL_21_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_21_11->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_21_11->recurrence=T;
			                       FCNN_2L_1out_FBALL_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FBALL_21_11->source=MAI((long int)FCNN_2L_1out_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_21_11->source+0)=2;
			                       *(FCNN_2L_1out_FBALL_21_11->source+1)=1;
			                       FCNN_2L_1out_FBALL_21_11->destination=MAI((long int)FCNN_2L_1out_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_21_11->destination+0)=1;
			                       *(FCNN_2L_1out_FBALL_21_11->destination+1)=1;
			                       FCNN_2L_1out_FBALL_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->create_neuron==0) exit_handling(58,1); 
			                       *(FCNN_2L_1out_FBALL_21_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_21_11;
			                       FCNN_2L_1out_FBALL_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_21_11->prepare_input=0;
			                       FCNN_2L_1out_FBALL_21_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->node_linear_output==0) exit_handling(58,2);
			                       *(FCNN_2L_1out_FBALL_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->node_output==0) exit_handling(58,3);
			                       *(FCNN_2L_1out_FBALL_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->node_output_derivation==0) exit_handling(58,4);
			                       *(FCNN_2L_1out_FBALL_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_21_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->firing_neuron==0) exit_handling(58,5);
			                       *(FCNN_2L_1out_FBALL_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_21_11->create_learning_algorithm==0) exit_handling(58,6);
			                       *(FCNN_2L_1out_FBALL_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_21_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_22_21 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_22_21;
			                       FCNN_2L_1out_FBALL_22_21=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_22_21->name=MAC((long int)80);
			                       *(FCNN_2L_1out_FBALL_22_21->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_22_21->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_22_21->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_22_21->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_22_21->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_22_21->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_22_21->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_22_21->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_22_21->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_22_21->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_22_21->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_22_21->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_22_21->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_22_21->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_22_21->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+20)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+21)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+22)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+23)='1';
			                       *(FCNN_2L_1out_FBALL_22_21->name+24)='(';
			                       *(FCNN_2L_1out_FBALL_22_21->name+25)='F';
			                       *(FCNN_2L_1out_FBALL_22_21->name+26)='u';
			                       *(FCNN_2L_1out_FBALL_22_21->name+27)='l';
			                       *(FCNN_2L_1out_FBALL_22_21->name+28)='l';
			                       *(FCNN_2L_1out_FBALL_22_21->name+29)='y';
			                       *(FCNN_2L_1out_FBALL_22_21->name+30)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+31)='C';
			                       *(FCNN_2L_1out_FBALL_22_21->name+32)='o';
			                       *(FCNN_2L_1out_FBALL_22_21->name+33)='n';
			                       *(FCNN_2L_1out_FBALL_22_21->name+34)='n';
			                       *(FCNN_2L_1out_FBALL_22_21->name+35)='e';
			                       *(FCNN_2L_1out_FBALL_22_21->name+36)='c';
			                       *(FCNN_2L_1out_FBALL_22_21->name+37)='t';
			                       *(FCNN_2L_1out_FBALL_22_21->name+38)='e';
			                       *(FCNN_2L_1out_FBALL_22_21->name+39)='d';
			                       *(FCNN_2L_1out_FBALL_22_21->name+40)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+41)='N';
			                       *(FCNN_2L_1out_FBALL_22_21->name+42)='N';
			                       *(FCNN_2L_1out_FBALL_22_21->name+43)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+44)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+45)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+46)='L';
			                       *(FCNN_2L_1out_FBALL_22_21->name+47)='a';
			                       *(FCNN_2L_1out_FBALL_22_21->name+48)='y';
			                       *(FCNN_2L_1out_FBALL_22_21->name+49)='e';
			                       *(FCNN_2L_1out_FBALL_22_21->name+50)='r';
			                       *(FCNN_2L_1out_FBALL_22_21->name+51)='s';
			                       *(FCNN_2L_1out_FBALL_22_21->name+52)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+53)='1';
			                       *(FCNN_2L_1out_FBALL_22_21->name+54)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+55)='o';
			                       *(FCNN_2L_1out_FBALL_22_21->name+56)='u';
			                       *(FCNN_2L_1out_FBALL_22_21->name+57)='t';
			                       *(FCNN_2L_1out_FBALL_22_21->name+58)='p';
			                       *(FCNN_2L_1out_FBALL_22_21->name+59)='u';
			                       *(FCNN_2L_1out_FBALL_22_21->name+60)='t';
			                       *(FCNN_2L_1out_FBALL_22_21->name+61)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+62)='f';
			                       *(FCNN_2L_1out_FBALL_22_21->name+63)='e';
			                       *(FCNN_2L_1out_FBALL_22_21->name+64)='e';
			                       *(FCNN_2L_1out_FBALL_22_21->name+65)='d';
			                       *(FCNN_2L_1out_FBALL_22_21->name+66)='b';
			                       *(FCNN_2L_1out_FBALL_22_21->name+67)='a';
			                       *(FCNN_2L_1out_FBALL_22_21->name+68)='c';
			                       *(FCNN_2L_1out_FBALL_22_21->name+69)='k';
			                       *(FCNN_2L_1out_FBALL_22_21->name+70)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+71)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+72)='>';
			                       *(FCNN_2L_1out_FBALL_22_21->name+73)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+74)='_';
			                       *(FCNN_2L_1out_FBALL_22_21->name+75)='2';
			                       *(FCNN_2L_1out_FBALL_22_21->name+76)='>';
			                       *(FCNN_2L_1out_FBALL_22_21->name+77)='1';
			                       *(FCNN_2L_1out_FBALL_22_21->name+78)=')';
			                       *(FCNN_2L_1out_FBALL_22_21->name+79)=' ';
			                       FCNN_2L_1out_FBALL_22_21->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_22_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FBALL_22_21->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_22_21->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_22_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_22_21->recurrence=T;
			                       FCNN_2L_1out_FBALL_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FBALL_22_21->source=MAI((long int)FCNN_2L_1out_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_21->source+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_21->source+1)=2;
			                       FCNN_2L_1out_FBALL_22_21->destination=MAI((long int)FCNN_2L_1out_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_21->destination+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_21->destination+1)=1;
			                       FCNN_2L_1out_FBALL_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->create_neuron==0) exit_handling(59,1); 
			                       *(FCNN_2L_1out_FBALL_22_21->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_21;
			                       FCNN_2L_1out_FBALL_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_22_21->prepare_input=0;
			                       FCNN_2L_1out_FBALL_22_21->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->node_linear_output==0) exit_handling(59,2);
			                       *(FCNN_2L_1out_FBALL_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->node_output==0) exit_handling(59,3);
			                       *(FCNN_2L_1out_FBALL_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->node_output_derivation==0) exit_handling(59,4);
			                       *(FCNN_2L_1out_FBALL_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_22_21->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->firing_neuron==0) exit_handling(59,5);
			                       *(FCNN_2L_1out_FBALL_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21->create_learning_algorithm==0) exit_handling(59,6);
			                       *(FCNN_2L_1out_FBALL_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_22_21);
			                      } /* ; */

/* setting up FCNN_2L_1out_FBALL_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FBALL_22_21_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FBALL_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FBALL_22_21_11;
			                       FCNN_2L_1out_FBALL_22_21_11=MANTD((long int)1);
			                       FCNN_2L_1out_FBALL_22_21_11->name=MAC((long int)87);
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+0)='F';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+1)='C';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+2)='N';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+3)='N';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+4)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+5)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+6)='L';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+7)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+8)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+9)='o';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+10)='u';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+11)='t';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+12)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+13)='F';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+14)='B';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+15)='A';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+16)='L';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+17)='L';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+18)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+19)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+20)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+21)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+22)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+23)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+24)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+25)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+26)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+27)='(';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+28)='F';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+29)='u';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+30)='l';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+31)='l';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+32)='y';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+33)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+34)='C';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+35)='o';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+36)='n';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+37)='n';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+38)='e';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+39)='c';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+40)='t';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+41)='e';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+42)='d';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+43)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+44)='N';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+45)='N';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+46)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+47)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+48)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+49)='L';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+50)='a';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+51)='y';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+52)='e';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+53)='r';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+54)='s';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+55)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+56)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+57)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+58)='o';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+59)='u';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+60)='t';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+61)='p';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+62)='u';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+63)='t';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+64)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+65)='f';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+66)='e';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+67)='e';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+68)='d';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+69)='b';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+70)='a';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+71)='c';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+72)='k';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+73)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+74)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+75)='>';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+76)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+77)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+78)='2';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+79)='>';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+80)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+81)='_';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+82)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+83)='>';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+84)='1';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+85)=')';
			                       *(FCNN_2L_1out_FBALL_22_21_11->name+86)=' ';
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_Levels=2;
			                       FCNN_2L_1out_FBALL_22_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedbacks */
			                       FCNN_2L_1out_FBALL_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FBALL_22_21_11->number_of_Levels);
			                       *(FCNN_2L_1out_FBALL_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FBALL_22_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FBALL_22_21_11->recurrence=T;
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_1out_FBALL_22_21_11->source=MAI((long int)FCNN_2L_1out_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_21_11->source+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_21_11->source+1)=2;
			                       *(FCNN_2L_1out_FBALL_22_21_11->source+2)=1;
			                       FCNN_2L_1out_FBALL_22_21_11->destination=MAI((long int)FCNN_2L_1out_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FBALL_22_21_11->destination+0)=2;
			                       *(FCNN_2L_1out_FBALL_22_21_11->destination+1)=1;
			                       *(FCNN_2L_1out_FBALL_22_21_11->destination+2)=1;
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FBALL_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->create_neuron==0) exit_handling(60,1); 
			                       *(FCNN_2L_1out_FBALL_22_21_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_21_11;
			                       FCNN_2L_1out_FBALL_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FBALL_22_21_11->prepare_input=0;
			                       FCNN_2L_1out_FBALL_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FBALL_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->node_linear_output==0) exit_handling(60,2);
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FBALL_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->node_output==0) exit_handling(60,3);
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FBALL_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->node_output_derivation==0) exit_handling(60,4);
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FBALL_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FBALL_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->firing_neuron==0) exit_handling(60,5);
			                       *(FCNN_2L_1out_FBALL_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FBALL_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FBALL_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FBALL_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FBALL_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FBALL_22_21_11->create_learning_algorithm==0) exit_handling(60,6);
			                       *(FCNN_2L_1out_FBALL_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FBALL_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FBALL_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_W_1out_FBALL_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_11;
			                       FCNN_2L_W_1out_FBALL_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_11->name=MAC((long int)106);
			                       *(FCNN_2L_W_1out_FBALL_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_11->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_11->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_11->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_11->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+21)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+22)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+23)='(';
			                       *(FCNN_2L_W_1out_FBALL_11->name+24)='F';
			                       *(FCNN_2L_W_1out_FBALL_11->name+25)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+26)='l';
			                       *(FCNN_2L_W_1out_FBALL_11->name+27)='l';
			                       *(FCNN_2L_W_1out_FBALL_11->name+28)='y';
			                       *(FCNN_2L_W_1out_FBALL_11->name+29)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+30)='C';
			                       *(FCNN_2L_W_1out_FBALL_11->name+31)='o';
			                       *(FCNN_2L_W_1out_FBALL_11->name+32)='n';
			                       *(FCNN_2L_W_1out_FBALL_11->name+33)='n';
			                       *(FCNN_2L_W_1out_FBALL_11->name+34)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+35)='c';
			                       *(FCNN_2L_W_1out_FBALL_11->name+36)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+38)='d';
			                       *(FCNN_2L_W_1out_FBALL_11->name+39)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+40)='N';
			                       *(FCNN_2L_W_1out_FBALL_11->name+41)='N';
			                       *(FCNN_2L_W_1out_FBALL_11->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+43)='2';
			                       *(FCNN_2L_W_1out_FBALL_11->name+44)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+45)='L';
			                       *(FCNN_2L_W_1out_FBALL_11->name+46)='a';
			                       *(FCNN_2L_W_1out_FBALL_11->name+47)='y';
			                       *(FCNN_2L_W_1out_FBALL_11->name+48)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+49)='r';
			                       *(FCNN_2L_W_1out_FBALL_11->name+50)='s';
			                       *(FCNN_2L_W_1out_FBALL_11->name+51)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_11->name+53)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+54)='c';
			                       *(FCNN_2L_W_1out_FBALL_11->name+55)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+56)='i';
			                       *(FCNN_2L_W_1out_FBALL_11->name+57)='v';
			                       *(FCNN_2L_W_1out_FBALL_11->name+58)='i';
			                       *(FCNN_2L_W_1out_FBALL_11->name+59)='n';
			                       *(FCNN_2L_W_1out_FBALL_11->name+60)='g';
			                       *(FCNN_2L_W_1out_FBALL_11->name+61)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+62)='i';
			                       *(FCNN_2L_W_1out_FBALL_11->name+63)='n';
			                       *(FCNN_2L_W_1out_FBALL_11->name+64)='p';
			                       *(FCNN_2L_W_1out_FBALL_11->name+65)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+66)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+67)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+68)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+69)='h';
			                       *(FCNN_2L_W_1out_FBALL_11->name+70)='r';
			                       *(FCNN_2L_W_1out_FBALL_11->name+71)='o';
			                       *(FCNN_2L_W_1out_FBALL_11->name+72)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+73)='g';
			                       *(FCNN_2L_W_1out_FBALL_11->name+74)='h';
			                       *(FCNN_2L_W_1out_FBALL_11->name+75)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+76)='W';
			                       *(FCNN_2L_W_1out_FBALL_11->name+77)='i';
			                       *(FCNN_2L_W_1out_FBALL_11->name+78)='n';
			                       *(FCNN_2L_W_1out_FBALL_11->name+79)='d';
			                       *(FCNN_2L_W_1out_FBALL_11->name+80)='o';
			                       *(FCNN_2L_W_1out_FBALL_11->name+81)='w';
			                       *(FCNN_2L_W_1out_FBALL_11->name+82)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+83)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+84)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+85)='o';
			                       *(FCNN_2L_W_1out_FBALL_11->name+86)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+87)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+88)='p';
			                       *(FCNN_2L_W_1out_FBALL_11->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_11->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_11->name+91)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+92)='f';
			                       *(FCNN_2L_W_1out_FBALL_11->name+93)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+94)='e';
			                       *(FCNN_2L_W_1out_FBALL_11->name+95)='d';
			                       *(FCNN_2L_W_1out_FBALL_11->name+96)='b';
			                       *(FCNN_2L_W_1out_FBALL_11->name+97)='a';
			                       *(FCNN_2L_W_1out_FBALL_11->name+98)='c';
			                       *(FCNN_2L_W_1out_FBALL_11->name+99)='k';
			                       *(FCNN_2L_W_1out_FBALL_11->name+100)='_';
			                       *(FCNN_2L_W_1out_FBALL_11->name+101)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+102)='>';
			                       *(FCNN_2L_W_1out_FBALL_11->name+103)='1';
			                       *(FCNN_2L_W_1out_FBALL_11->name+104)=')';
			                       *(FCNN_2L_W_1out_FBALL_11->name+105)=' ';
			                       FCNN_2L_W_1out_FBALL_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_11->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FBALL_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_11->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FBALL_11->source=MAI((long int)FCNN_2L_W_1out_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_11->source+0)=1;
			                       FCNN_2L_W_1out_FBALL_11->destination=MAI((long int)FCNN_2L_W_1out_FBALL_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_11->destination+0)=1;
			                       FCNN_2L_W_1out_FBALL_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->create_neuron==0) exit_handling(61,1); 
			                       *(FCNN_2L_W_1out_FBALL_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_11;
			                       FCNN_2L_W_1out_FBALL_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->node_linear_output==0) exit_handling(61,2);
			                       *(FCNN_2L_W_1out_FBALL_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->node_output==0) exit_handling(61,3);
			                       *(FCNN_2L_W_1out_FBALL_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->node_output_derivation==0) exit_handling(61,4);
			                       *(FCNN_2L_W_1out_FBALL_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->firing_neuron==0) exit_handling(61,5);
			                       *(FCNN_2L_W_1out_FBALL_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_11->create_learning_algorithm==0) exit_handling(61,6);
			                       *(FCNN_2L_W_1out_FBALL_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_22 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_22;
			                       FCNN_2L_W_1out_FBALL_22=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_22->name=MAC((long int)106);
			                       *(FCNN_2L_W_1out_FBALL_22->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_22->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_22->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_22->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_22->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_22->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_22->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_22->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_22->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_22->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_22->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_22->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_22->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_22->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+22)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+23)='(';
			                       *(FCNN_2L_W_1out_FBALL_22->name+24)='F';
			                       *(FCNN_2L_W_1out_FBALL_22->name+25)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+26)='l';
			                       *(FCNN_2L_W_1out_FBALL_22->name+27)='l';
			                       *(FCNN_2L_W_1out_FBALL_22->name+28)='y';
			                       *(FCNN_2L_W_1out_FBALL_22->name+29)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+30)='C';
			                       *(FCNN_2L_W_1out_FBALL_22->name+31)='o';
			                       *(FCNN_2L_W_1out_FBALL_22->name+32)='n';
			                       *(FCNN_2L_W_1out_FBALL_22->name+33)='n';
			                       *(FCNN_2L_W_1out_FBALL_22->name+34)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+35)='c';
			                       *(FCNN_2L_W_1out_FBALL_22->name+36)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+38)='d';
			                       *(FCNN_2L_W_1out_FBALL_22->name+39)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+40)='N';
			                       *(FCNN_2L_W_1out_FBALL_22->name+41)='N';
			                       *(FCNN_2L_W_1out_FBALL_22->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+43)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+44)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+45)='L';
			                       *(FCNN_2L_W_1out_FBALL_22->name+46)='a';
			                       *(FCNN_2L_W_1out_FBALL_22->name+47)='y';
			                       *(FCNN_2L_W_1out_FBALL_22->name+48)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+49)='r';
			                       *(FCNN_2L_W_1out_FBALL_22->name+50)='s';
			                       *(FCNN_2L_W_1out_FBALL_22->name+51)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_22->name+53)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+54)='c';
			                       *(FCNN_2L_W_1out_FBALL_22->name+55)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+56)='i';
			                       *(FCNN_2L_W_1out_FBALL_22->name+57)='v';
			                       *(FCNN_2L_W_1out_FBALL_22->name+58)='i';
			                       *(FCNN_2L_W_1out_FBALL_22->name+59)='n';
			                       *(FCNN_2L_W_1out_FBALL_22->name+60)='g';
			                       *(FCNN_2L_W_1out_FBALL_22->name+61)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+62)='i';
			                       *(FCNN_2L_W_1out_FBALL_22->name+63)='n';
			                       *(FCNN_2L_W_1out_FBALL_22->name+64)='p';
			                       *(FCNN_2L_W_1out_FBALL_22->name+65)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+66)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+67)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+68)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+69)='h';
			                       *(FCNN_2L_W_1out_FBALL_22->name+70)='r';
			                       *(FCNN_2L_W_1out_FBALL_22->name+71)='o';
			                       *(FCNN_2L_W_1out_FBALL_22->name+72)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+73)='g';
			                       *(FCNN_2L_W_1out_FBALL_22->name+74)='h';
			                       *(FCNN_2L_W_1out_FBALL_22->name+75)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+76)='W';
			                       *(FCNN_2L_W_1out_FBALL_22->name+77)='i';
			                       *(FCNN_2L_W_1out_FBALL_22->name+78)='n';
			                       *(FCNN_2L_W_1out_FBALL_22->name+79)='d';
			                       *(FCNN_2L_W_1out_FBALL_22->name+80)='o';
			                       *(FCNN_2L_W_1out_FBALL_22->name+81)='w';
			                       *(FCNN_2L_W_1out_FBALL_22->name+82)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+83)='1';
			                       *(FCNN_2L_W_1out_FBALL_22->name+84)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+85)='o';
			                       *(FCNN_2L_W_1out_FBALL_22->name+86)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+87)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+88)='p';
			                       *(FCNN_2L_W_1out_FBALL_22->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_22->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_22->name+91)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+92)='f';
			                       *(FCNN_2L_W_1out_FBALL_22->name+93)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+94)='e';
			                       *(FCNN_2L_W_1out_FBALL_22->name+95)='d';
			                       *(FCNN_2L_W_1out_FBALL_22->name+96)='b';
			                       *(FCNN_2L_W_1out_FBALL_22->name+97)='a';
			                       *(FCNN_2L_W_1out_FBALL_22->name+98)='c';
			                       *(FCNN_2L_W_1out_FBALL_22->name+99)='k';
			                       *(FCNN_2L_W_1out_FBALL_22->name+100)='_';
			                       *(FCNN_2L_W_1out_FBALL_22->name+101)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+102)='>';
			                       *(FCNN_2L_W_1out_FBALL_22->name+103)='2';
			                       *(FCNN_2L_W_1out_FBALL_22->name+104)=')';
			                       *(FCNN_2L_W_1out_FBALL_22->name+105)=' ';
			                       FCNN_2L_W_1out_FBALL_22->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_22->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_22->prepare_input()) */
			                       FCNN_2L_W_1out_FBALL_22->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_22->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_22->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_22->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FBALL_22->source=MAI((long int)FCNN_2L_W_1out_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22->source+0)=2;
			                       FCNN_2L_W_1out_FBALL_22->destination=MAI((long int)FCNN_2L_W_1out_FBALL_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22->destination+0)=2;
			                       FCNN_2L_W_1out_FBALL_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->create_neuron==0) exit_handling(62,1); 
			                       *(FCNN_2L_W_1out_FBALL_22->create_neuron+0)=create_FCNN_2L_1out_FBALL_22;
			                       FCNN_2L_W_1out_FBALL_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_22->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_22->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->node_linear_output==0) exit_handling(62,2);
			                       *(FCNN_2L_W_1out_FBALL_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_22->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_22->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->node_output==0) exit_handling(62,3);
			                       *(FCNN_2L_W_1out_FBALL_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->node_output_derivation==0) exit_handling(62,4);
			                       *(FCNN_2L_W_1out_FBALL_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_22->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->firing_neuron==0) exit_handling(62,5);
			                       *(FCNN_2L_W_1out_FBALL_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_22->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22->create_learning_algorithm==0) exit_handling(62,6);
			                       *(FCNN_2L_W_1out_FBALL_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_22);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto the 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_21;
			                       FCNN_2L_W_1out_FBALL_21=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_21->name=MAC((long int)106);
			                       *(FCNN_2L_W_1out_FBALL_21->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_21->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_21->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_21->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_21->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_21->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_21->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_21->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_21->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_21->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_21->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_21->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_21->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_21->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_21->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_21->name+22)='1';
			                       *(FCNN_2L_W_1out_FBALL_21->name+23)='(';
			                       *(FCNN_2L_W_1out_FBALL_21->name+24)='F';
			                       *(FCNN_2L_W_1out_FBALL_21->name+25)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+26)='l';
			                       *(FCNN_2L_W_1out_FBALL_21->name+27)='l';
			                       *(FCNN_2L_W_1out_FBALL_21->name+28)='y';
			                       *(FCNN_2L_W_1out_FBALL_21->name+29)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+30)='C';
			                       *(FCNN_2L_W_1out_FBALL_21->name+31)='o';
			                       *(FCNN_2L_W_1out_FBALL_21->name+32)='n';
			                       *(FCNN_2L_W_1out_FBALL_21->name+33)='n';
			                       *(FCNN_2L_W_1out_FBALL_21->name+34)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+35)='c';
			                       *(FCNN_2L_W_1out_FBALL_21->name+36)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+38)='d';
			                       *(FCNN_2L_W_1out_FBALL_21->name+39)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+40)='N';
			                       *(FCNN_2L_W_1out_FBALL_21->name+41)='N';
			                       *(FCNN_2L_W_1out_FBALL_21->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+43)='2';
			                       *(FCNN_2L_W_1out_FBALL_21->name+44)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+45)='L';
			                       *(FCNN_2L_W_1out_FBALL_21->name+46)='a';
			                       *(FCNN_2L_W_1out_FBALL_21->name+47)='y';
			                       *(FCNN_2L_W_1out_FBALL_21->name+48)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+49)='r';
			                       *(FCNN_2L_W_1out_FBALL_21->name+50)='s';
			                       *(FCNN_2L_W_1out_FBALL_21->name+51)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_21->name+53)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+54)='c';
			                       *(FCNN_2L_W_1out_FBALL_21->name+55)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+56)='i';
			                       *(FCNN_2L_W_1out_FBALL_21->name+57)='v';
			                       *(FCNN_2L_W_1out_FBALL_21->name+58)='i';
			                       *(FCNN_2L_W_1out_FBALL_21->name+59)='n';
			                       *(FCNN_2L_W_1out_FBALL_21->name+60)='g';
			                       *(FCNN_2L_W_1out_FBALL_21->name+61)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+62)='i';
			                       *(FCNN_2L_W_1out_FBALL_21->name+63)='n';
			                       *(FCNN_2L_W_1out_FBALL_21->name+64)='p';
			                       *(FCNN_2L_W_1out_FBALL_21->name+65)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+66)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+67)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+68)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+69)='h';
			                       *(FCNN_2L_W_1out_FBALL_21->name+70)='r';
			                       *(FCNN_2L_W_1out_FBALL_21->name+71)='o';
			                       *(FCNN_2L_W_1out_FBALL_21->name+72)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+73)='g';
			                       *(FCNN_2L_W_1out_FBALL_21->name+74)='h';
			                       *(FCNN_2L_W_1out_FBALL_21->name+75)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+76)='W';
			                       *(FCNN_2L_W_1out_FBALL_21->name+77)='i';
			                       *(FCNN_2L_W_1out_FBALL_21->name+78)='n';
			                       *(FCNN_2L_W_1out_FBALL_21->name+79)='d';
			                       *(FCNN_2L_W_1out_FBALL_21->name+80)='o';
			                       *(FCNN_2L_W_1out_FBALL_21->name+81)='w';
			                       *(FCNN_2L_W_1out_FBALL_21->name+82)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+83)='1';
			                       *(FCNN_2L_W_1out_FBALL_21->name+84)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+85)='o';
			                       *(FCNN_2L_W_1out_FBALL_21->name+86)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+87)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+88)='p';
			                       *(FCNN_2L_W_1out_FBALL_21->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_21->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_21->name+91)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+92)='f';
			                       *(FCNN_2L_W_1out_FBALL_21->name+93)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+94)='e';
			                       *(FCNN_2L_W_1out_FBALL_21->name+95)='d';
			                       *(FCNN_2L_W_1out_FBALL_21->name+96)='b';
			                       *(FCNN_2L_W_1out_FBALL_21->name+97)='a';
			                       *(FCNN_2L_W_1out_FBALL_21->name+98)='c';
			                       *(FCNN_2L_W_1out_FBALL_21->name+99)='k';
			                       *(FCNN_2L_W_1out_FBALL_21->name+100)='_';
			                       *(FCNN_2L_W_1out_FBALL_21->name+101)='2';
			                       *(FCNN_2L_W_1out_FBALL_21->name+102)='>';
			                       *(FCNN_2L_W_1out_FBALL_21->name+103)='1';
			                       *(FCNN_2L_W_1out_FBALL_21->name+104)=')';
			                       *(FCNN_2L_W_1out_FBALL_21->name+105)=' ';
			                       FCNN_2L_W_1out_FBALL_21->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_21->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FBALL_21->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_21->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_21->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FBALL_21->source=MAI((long int)FCNN_2L_W_1out_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_21->source+0)=2;
			                       FCNN_2L_W_1out_FBALL_21->destination=MAI((long int)FCNN_2L_W_1out_FBALL_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_21->destination+0)=1;
			                       FCNN_2L_W_1out_FBALL_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->create_neuron==0) exit_handling(63,1); 
			                       *(FCNN_2L_W_1out_FBALL_21->create_neuron+0)=create_FCNN_2L_1out_FBALL_21;
			                       FCNN_2L_W_1out_FBALL_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_21->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->node_linear_output==0) exit_handling(63,2);
			                       *(FCNN_2L_W_1out_FBALL_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->node_output==0) exit_handling(63,3);
			                       *(FCNN_2L_W_1out_FBALL_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->node_output_derivation==0) exit_handling(63,4);
			                       *(FCNN_2L_W_1out_FBALL_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_21->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->firing_neuron==0) exit_handling(63,5);
			                       *(FCNN_2L_W_1out_FBALL_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_W_1out_FBALL_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_W_1out_FBALL_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21->create_learning_algorithm==0) exit_handling(63,6);
			                       *(FCNN_2L_W_1out_FBALL_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_21);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_22_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_22_11;
			                       FCNN_2L_W_1out_FBALL_22_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_22_11->name=MAC((long int)113);
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+22)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+23)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+24)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+25)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+26)='(';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+27)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+28)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+29)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+30)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+31)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+32)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+33)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+34)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+35)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+36)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+38)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+39)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+40)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+41)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+43)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+44)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+45)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+46)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+47)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+48)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+49)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+50)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+51)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+53)='s';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+54)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+55)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+56)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+57)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+58)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+59)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+60)='v';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+61)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+62)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+63)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+64)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+65)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+66)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+67)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+68)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+69)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+70)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+71)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+72)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+73)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+74)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+75)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+76)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+77)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+78)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+79)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+80)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+81)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+82)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+83)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+84)='w';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+85)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+86)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+87)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+88)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+91)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+92)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+93)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+94)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+95)='f';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+96)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+97)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+98)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+99)='b';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+100)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+101)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+102)='k';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+103)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+104)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+105)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+106)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+107)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+108)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+109)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+110)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+111)=')';
			                       *(FCNN_2L_W_1out_FBALL_22_11->name+112)=' ';
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_22_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_22_11->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FBALL_22_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_22_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_22_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_22_11->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FBALL_22_11->source=MAI((long int)FCNN_2L_W_1out_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_11->source+1)=1;
			                       FCNN_2L_W_1out_FBALL_22_11->destination=MAI((long int)FCNN_2L_W_1out_FBALL_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_11->destination+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_11->destination+1)=1;
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->create_neuron==0) exit_handling(64,1); 
			                       *(FCNN_2L_W_1out_FBALL_22_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_11;
			                       FCNN_2L_W_1out_FBALL_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_22_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_22_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->node_linear_output==0) exit_handling(64,2);
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->node_output==0) exit_handling(64,3);
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->node_output_derivation==0) exit_handling(64,4);
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->firing_neuron==0) exit_handling(64,5);
			                       *(FCNN_2L_W_1out_FBALL_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_11->create_learning_algorithm==0) exit_handling(64,6);
			                       *(FCNN_2L_W_1out_FBALL_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_22_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_21_11;
			                       FCNN_2L_W_1out_FBALL_21_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_21_11->name=MAC((long int)113);
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+22)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+23)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+24)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+25)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+26)='(';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+27)='F';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+28)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+29)='l';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+30)='l';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+31)='y';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+32)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+33)='C';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+34)='o';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+35)='n';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+36)='n';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+38)='c';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+39)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+40)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+41)='d';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+43)='N';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+44)='N';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+45)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+46)='2';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+47)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+48)='L';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+49)='a';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+50)='y';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+51)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+53)='s';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+54)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+55)='r';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+56)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+57)='c';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+58)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+59)='i';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+60)='v';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+61)='i';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+62)='n';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+63)='g';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+64)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+65)='i';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+66)='n';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+67)='p';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+68)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+69)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+70)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+71)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+72)='h';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+73)='r';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+74)='o';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+75)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+76)='g';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+77)='h';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+78)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+79)='W';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+80)='i';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+81)='n';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+82)='d';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+83)='o';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+84)='w';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+85)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+86)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+87)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+88)='o';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+91)='p';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+92)='u';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+93)='t';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+94)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+95)='f';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+96)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+97)='e';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+98)='d';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+99)='b';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+100)='a';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+101)='c';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+102)='k';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+103)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+104)='2';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+105)='>';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+106)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+107)='_';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+108)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+109)='>';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+110)='1';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+111)=')';
			                       *(FCNN_2L_W_1out_FBALL_21_11->name+112)=' ';
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_21_11->prepare_input()) plus inputs from feedbacks */
			                       FCNN_2L_W_1out_FBALL_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_21_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_21_11->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FBALL_21_11->source=MAI((long int)FCNN_2L_W_1out_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_21_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_21_11->source+1)=1;
			                       FCNN_2L_W_1out_FBALL_21_11->destination=MAI((long int)FCNN_2L_W_1out_FBALL_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_21_11->destination+0)=1;
			                       *(FCNN_2L_W_1out_FBALL_21_11->destination+1)=1;
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->create_neuron==0) exit_handling(65,1); 
			                       *(FCNN_2L_W_1out_FBALL_21_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_21_11;
			                       FCNN_2L_W_1out_FBALL_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->node_linear_output==0) exit_handling(65,2);
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->node_output==0) exit_handling(65,3);
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->node_output_derivation==0) exit_handling(65,4);
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->firing_neuron==0) exit_handling(65,5);
			                       *(FCNN_2L_W_1out_FBALL_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_21_11->create_learning_algorithm==0) exit_handling(65,6);
			                       *(FCNN_2L_W_1out_FBALL_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_21_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_22_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_22_21;
			                       FCNN_2L_W_1out_FBALL_22_21=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_22_21->name=MAC((long int)113);
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+22)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+23)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+24)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+25)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+26)='(';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+27)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+28)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+29)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+30)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+31)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+32)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+33)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+34)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+35)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+36)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+37)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+38)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+39)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+40)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+41)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+42)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+43)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+44)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+45)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+46)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+47)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+48)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+49)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+50)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+51)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+52)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+53)='s';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+54)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+55)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+56)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+57)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+58)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+59)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+60)='v';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+61)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+62)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+63)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+64)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+65)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+66)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+67)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+68)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+69)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+70)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+71)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+72)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+73)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+74)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+75)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+76)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+77)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+78)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+79)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+80)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+81)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+82)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+83)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+84)='w';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+85)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+86)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+87)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+88)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+89)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+90)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+91)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+92)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+93)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+94)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+95)='f';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+96)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+97)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+98)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+99)='b';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+100)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+101)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+102)='k';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+103)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+104)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+105)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+106)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+107)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+108)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+109)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+110)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+111)=')';
			                       *(FCNN_2L_W_1out_FBALL_22_21->name+112)=' ';
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_22_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_22_21->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FBALL_22_21->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_22_21->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_22_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_22_21->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FBALL_22_21->source=MAI((long int)FCNN_2L_W_1out_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_21->source+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_21->source+1)=2;
			                       FCNN_2L_W_1out_FBALL_22_21->destination=MAI((long int)FCNN_2L_W_1out_FBALL_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_21->destination+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_21->destination+1)=1;
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->create_neuron==0) exit_handling(66,1); 
			                       *(FCNN_2L_W_1out_FBALL_22_21->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_21;
			                       FCNN_2L_W_1out_FBALL_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_22_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_22_21->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->node_linear_output==0) exit_handling(66,2);
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->node_output==0) exit_handling(66,3);
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->node_output_derivation==0) exit_handling(66,4);
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->firing_neuron==0) exit_handling(66,5);
			                       *(FCNN_2L_W_1out_FBALL_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21->create_learning_algorithm==0) exit_handling(66,6);
			                       *(FCNN_2L_W_1out_FBALL_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_22_21);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FBALL_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FBALL_22_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback to all (means all nodes from feedback source are producing feedback onto all nodes of feedback destination) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FBALL_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FBALL_22_21_11;
			                       FCNN_2L_W_1out_FBALL_22_21_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FBALL_22_21_11->name=MAC((long int)120);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+17)='A';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+18)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+19)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+20)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+21)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+22)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+23)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+24)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+25)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+26)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+27)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+28)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+29)='(';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+30)='F';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+31)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+32)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+33)='l';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+34)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+35)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+36)='C';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+37)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+38)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+39)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+40)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+41)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+42)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+43)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+44)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+45)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+46)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+47)='N';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+48)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+49)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+50)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+51)='L';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+52)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+53)='y';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+54)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+55)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+56)='s';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+57)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+58)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+59)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+60)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+61)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+62)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+63)='v';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+64)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+65)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+66)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+67)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+68)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+69)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+70)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+71)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+72)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+73)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+74)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+75)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+76)='r';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+77)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+78)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+79)='g';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+80)='h';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+81)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+82)='W';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+83)='i';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+84)='n';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+85)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+86)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+87)='w';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+88)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+89)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+90)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+91)='o';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+92)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+93)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+94)='p';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+95)='u';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+96)='t';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+97)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+98)='f';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+99)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+100)='e';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+101)='d';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+102)='b';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+103)='a';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+104)='c';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+105)='k';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+106)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+107)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+108)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+109)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+110)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+111)='2';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+112)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+113)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+114)='_';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+115)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+116)='>';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+117)='1';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+118)=')';
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->name+119)=' ';
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FBALL_22_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FBALL_22_21_11->prepare_input()) plus inputs from feedbacks */
			                       FCNN_2L_W_1out_FBALL_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FBALL_22_21_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FBALL_22_21_11->recurrence=T;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_W_1out_FBALL_22_21_11->source=MAI((long int)FCNN_2L_W_1out_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->source+1)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->source+2)=1;
			                       FCNN_2L_W_1out_FBALL_22_21_11->destination=MAI((long int)FCNN_2L_W_1out_FBALL_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->destination+0)=2;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->destination+1)=1;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->destination+2)=1;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FBALL_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->create_neuron==0) exit_handling(67,1); 
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->create_neuron+0)=create_FCNN_2L_1out_FBALL_22_21_11;
			                       FCNN_2L_W_1out_FBALL_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FBALL_22_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FBALL_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->node_linear_output==0) exit_handling(67,2);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FBALL_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->node_output==0) exit_handling(67,3);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation==0) exit_handling(67,4);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FBALL_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->firing_neuron==0) exit_handling(67,5);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FBALL_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FBALL_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FBALL_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FBALL_22_21_11->create_learning_algorithm==0) exit_handling(67,6);
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FBALL_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FBALL_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_FB1_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_11 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_11;
			                       FCNN_2L_FB1_11=MANTD((long int)1);
			                       FCNN_2L_FB1_11->name=MAC((long int)57);
			                       *(FCNN_2L_FB1_11->name+0)='F';
			                       *(FCNN_2L_FB1_11->name+1)='C';
			                       *(FCNN_2L_FB1_11->name+2)='N';
			                       *(FCNN_2L_FB1_11->name+3)='N';
			                       *(FCNN_2L_FB1_11->name+4)='_';
			                       *(FCNN_2L_FB1_11->name+5)='2';
			                       *(FCNN_2L_FB1_11->name+6)='L';
			                       *(FCNN_2L_FB1_11->name+7)='_';
			                       *(FCNN_2L_FB1_11->name+8)='F';
			                       *(FCNN_2L_FB1_11->name+9)='B';
			                       *(FCNN_2L_FB1_11->name+10)='1';
			                       *(FCNN_2L_FB1_11->name+11)='_';
			                       *(FCNN_2L_FB1_11->name+12)='1';
			                       *(FCNN_2L_FB1_11->name+13)='1';
			                       *(FCNN_2L_FB1_11->name+14)='(';
			                       *(FCNN_2L_FB1_11->name+15)='F';
			                       *(FCNN_2L_FB1_11->name+16)='u';
			                       *(FCNN_2L_FB1_11->name+17)='l';
			                       *(FCNN_2L_FB1_11->name+18)='l';
			                       *(FCNN_2L_FB1_11->name+19)='y';
			                       *(FCNN_2L_FB1_11->name+20)='_';
			                       *(FCNN_2L_FB1_11->name+21)='C';
			                       *(FCNN_2L_FB1_11->name+22)='o';
			                       *(FCNN_2L_FB1_11->name+23)='n';
			                       *(FCNN_2L_FB1_11->name+24)='n';
			                       *(FCNN_2L_FB1_11->name+25)='e';
			                       *(FCNN_2L_FB1_11->name+26)='c';
			                       *(FCNN_2L_FB1_11->name+27)='t';
			                       *(FCNN_2L_FB1_11->name+28)='e';
			                       *(FCNN_2L_FB1_11->name+29)='d';
			                       *(FCNN_2L_FB1_11->name+30)='_';
			                       *(FCNN_2L_FB1_11->name+31)='N';
			                       *(FCNN_2L_FB1_11->name+32)='N';
			                       *(FCNN_2L_FB1_11->name+33)='_';
			                       *(FCNN_2L_FB1_11->name+34)='2';
			                       *(FCNN_2L_FB1_11->name+35)='_';
			                       *(FCNN_2L_FB1_11->name+36)='L';
			                       *(FCNN_2L_FB1_11->name+37)='a';
			                       *(FCNN_2L_FB1_11->name+38)='y';
			                       *(FCNN_2L_FB1_11->name+39)='e';
			                       *(FCNN_2L_FB1_11->name+40)='r';
			                       *(FCNN_2L_FB1_11->name+41)='s';
			                       *(FCNN_2L_FB1_11->name+42)='_';
			                       *(FCNN_2L_FB1_11->name+43)='f';
			                       *(FCNN_2L_FB1_11->name+44)='e';
			                       *(FCNN_2L_FB1_11->name+45)='e';
			                       *(FCNN_2L_FB1_11->name+46)='d';
			                       *(FCNN_2L_FB1_11->name+47)='b';
			                       *(FCNN_2L_FB1_11->name+48)='a';
			                       *(FCNN_2L_FB1_11->name+49)='c';
			                       *(FCNN_2L_FB1_11->name+50)='k';
			                       *(FCNN_2L_FB1_11->name+51)='_';
			                       *(FCNN_2L_FB1_11->name+52)='1';
			                       *(FCNN_2L_FB1_11->name+53)='>';
			                       *(FCNN_2L_FB1_11->name+54)='1';
			                       *(FCNN_2L_FB1_11->name+55)=')';
			                       *(FCNN_2L_FB1_11->name+56)=' ';
			                       FCNN_2L_FB1_11->number_of_Levels=2;
			                       FCNN_2L_FB1_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FB1_11->nodes_per_Level=MAI((long int)FCNN_2L_FB1_11->number_of_Levels);
			                       *(FCNN_2L_FB1_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_11->recurrence=T;
			                       FCNN_2L_FB1_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FB1_11->source=MAI((long int)FCNN_2L_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_11->source+0)=1;
			                       FCNN_2L_FB1_11->destination=MAI((long int)FCNN_2L_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_11->destination+0)=1;
			                       FCNN_2L_FB1_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_11->create_neuron==0) exit_handling(68,1); 
			                       *(FCNN_2L_FB1_11->create_neuron+0)=create_FCNN_2L_FB1_11;
			                       FCNN_2L_FB1_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_11->prepare_input=0;
			                       FCNN_2L_FB1_11->number_linear_output_functions=3;
			                       FCNN_2L_FB1_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_11->node_linear_output==0) exit_handling(68,2);
			                       *(FCNN_2L_FB1_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_11->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_FB1_11->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_11->node_output==0) exit_handling(68,3);
			                       *(FCNN_2L_FB1_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_11->node_output_derivation==0) exit_handling(68,4);
			                       *(FCNN_2L_FB1_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_11->number_of_firing_functions=2;
			                       FCNN_2L_FB1_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_11->firing_neuron==0) exit_handling(68,5);
			                       *(FCNN_2L_FB1_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_11->create_learning_algorithm==0) exit_handling(68,6);
			                       *(FCNN_2L_FB1_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_11);
			                      } /* ; */

/* setting up FCNN_2L_FB1_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_22 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_22;
			                       FCNN_2L_FB1_22=MANTD((long int)1);
			                       FCNN_2L_FB1_22->name=MAC((long int)57);
			                       *(FCNN_2L_FB1_22->name+0)='F';
			                       *(FCNN_2L_FB1_22->name+1)='C';
			                       *(FCNN_2L_FB1_22->name+2)='N';
			                       *(FCNN_2L_FB1_22->name+3)='N';
			                       *(FCNN_2L_FB1_22->name+4)='_';
			                       *(FCNN_2L_FB1_22->name+5)='2';
			                       *(FCNN_2L_FB1_22->name+6)='L';
			                       *(FCNN_2L_FB1_22->name+7)='_';
			                       *(FCNN_2L_FB1_22->name+8)='F';
			                       *(FCNN_2L_FB1_22->name+9)='B';
			                       *(FCNN_2L_FB1_22->name+10)='1';
			                       *(FCNN_2L_FB1_22->name+11)='_';
			                       *(FCNN_2L_FB1_22->name+12)='2';
			                       *(FCNN_2L_FB1_22->name+13)='2';
			                       *(FCNN_2L_FB1_22->name+14)='(';
			                       *(FCNN_2L_FB1_22->name+15)='F';
			                       *(FCNN_2L_FB1_22->name+16)='u';
			                       *(FCNN_2L_FB1_22->name+17)='l';
			                       *(FCNN_2L_FB1_22->name+18)='l';
			                       *(FCNN_2L_FB1_22->name+19)='y';
			                       *(FCNN_2L_FB1_22->name+20)='_';
			                       *(FCNN_2L_FB1_22->name+21)='C';
			                       *(FCNN_2L_FB1_22->name+22)='o';
			                       *(FCNN_2L_FB1_22->name+23)='n';
			                       *(FCNN_2L_FB1_22->name+24)='n';
			                       *(FCNN_2L_FB1_22->name+25)='e';
			                       *(FCNN_2L_FB1_22->name+26)='c';
			                       *(FCNN_2L_FB1_22->name+27)='t';
			                       *(FCNN_2L_FB1_22->name+28)='e';
			                       *(FCNN_2L_FB1_22->name+29)='d';
			                       *(FCNN_2L_FB1_22->name+30)='_';
			                       *(FCNN_2L_FB1_22->name+31)='N';
			                       *(FCNN_2L_FB1_22->name+32)='N';
			                       *(FCNN_2L_FB1_22->name+33)='_';
			                       *(FCNN_2L_FB1_22->name+34)='2';
			                       *(FCNN_2L_FB1_22->name+35)='_';
			                       *(FCNN_2L_FB1_22->name+36)='L';
			                       *(FCNN_2L_FB1_22->name+37)='a';
			                       *(FCNN_2L_FB1_22->name+38)='y';
			                       *(FCNN_2L_FB1_22->name+39)='e';
			                       *(FCNN_2L_FB1_22->name+40)='r';
			                       *(FCNN_2L_FB1_22->name+41)='s';
			                       *(FCNN_2L_FB1_22->name+42)='_';
			                       *(FCNN_2L_FB1_22->name+43)='f';
			                       *(FCNN_2L_FB1_22->name+44)='e';
			                       *(FCNN_2L_FB1_22->name+45)='e';
			                       *(FCNN_2L_FB1_22->name+46)='d';
			                       *(FCNN_2L_FB1_22->name+47)='b';
			                       *(FCNN_2L_FB1_22->name+48)='a';
			                       *(FCNN_2L_FB1_22->name+49)='c';
			                       *(FCNN_2L_FB1_22->name+50)='k';
			                       *(FCNN_2L_FB1_22->name+51)='_';
			                       *(FCNN_2L_FB1_22->name+52)='2';
			                       *(FCNN_2L_FB1_22->name+53)='>';
			                       *(FCNN_2L_FB1_22->name+54)='2';
			                       *(FCNN_2L_FB1_22->name+55)=')';
			                       *(FCNN_2L_FB1_22->name+56)=' ';
			                       FCNN_2L_FB1_22->number_of_Levels=2;
			                       FCNN_2L_FB1_22->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L_FB1_22->nodes_per_Level=MAI((long int)FCNN_2L_FB1_22->number_of_Levels);
			                       *(FCNN_2L_FB1_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_22->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_22->recurrence=T;
			                       FCNN_2L_FB1_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FB1_22->source=MAI((long int)FCNN_2L_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22->source+0)=2;
			                       FCNN_2L_FB1_22->destination=MAI((long int)FCNN_2L_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22->destination+0)=2;
			                       FCNN_2L_FB1_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_22->create_neuron==0) exit_handling(69,1); 
			                       *(FCNN_2L_FB1_22->create_neuron+0)=create_FCNN_2L_FB1_22;
			                       FCNN_2L_FB1_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_22->prepare_input=0;
			                       FCNN_2L_FB1_22->number_linear_output_functions=3;
			                       FCNN_2L_FB1_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22->node_linear_output==0) exit_handling(69,2);
			                       *(FCNN_2L_FB1_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_FB1_22->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_22->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22->node_output==0) exit_handling(69,3);
			                       *(FCNN_2L_FB1_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22->node_output_derivation==0) exit_handling(69,4);
			                       *(FCNN_2L_FB1_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_22->number_of_firing_functions=2;
			                       FCNN_2L_FB1_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22->firing_neuron==0) exit_handling(69,5);
			                       *(FCNN_2L_FB1_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_22->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_22->create_learning_algorithm==0) exit_handling(69,6);
			                       *(FCNN_2L_FB1_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_22);
			                      } /* ; */

/* setting up FCNN_2L_FB1_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_21 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer on 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_21;
			                       FCNN_2L_FB1_21=MANTD((long int)1);
			                       FCNN_2L_FB1_21->name=MAC((long int)57);
			                       *(FCNN_2L_FB1_21->name+0)='F';
			                       *(FCNN_2L_FB1_21->name+1)='C';
			                       *(FCNN_2L_FB1_21->name+2)='N';
			                       *(FCNN_2L_FB1_21->name+3)='N';
			                       *(FCNN_2L_FB1_21->name+4)='_';
			                       *(FCNN_2L_FB1_21->name+5)='2';
			                       *(FCNN_2L_FB1_21->name+6)='L';
			                       *(FCNN_2L_FB1_21->name+7)='_';
			                       *(FCNN_2L_FB1_21->name+8)='F';
			                       *(FCNN_2L_FB1_21->name+9)='B';
			                       *(FCNN_2L_FB1_21->name+10)='1';
			                       *(FCNN_2L_FB1_21->name+11)='_';
			                       *(FCNN_2L_FB1_21->name+12)='2';
			                       *(FCNN_2L_FB1_21->name+13)='1';
			                       *(FCNN_2L_FB1_21->name+14)='(';
			                       *(FCNN_2L_FB1_21->name+15)='F';
			                       *(FCNN_2L_FB1_21->name+16)='u';
			                       *(FCNN_2L_FB1_21->name+17)='l';
			                       *(FCNN_2L_FB1_21->name+18)='l';
			                       *(FCNN_2L_FB1_21->name+19)='y';
			                       *(FCNN_2L_FB1_21->name+20)='_';
			                       *(FCNN_2L_FB1_21->name+21)='C';
			                       *(FCNN_2L_FB1_21->name+22)='o';
			                       *(FCNN_2L_FB1_21->name+23)='n';
			                       *(FCNN_2L_FB1_21->name+24)='n';
			                       *(FCNN_2L_FB1_21->name+25)='e';
			                       *(FCNN_2L_FB1_21->name+26)='c';
			                       *(FCNN_2L_FB1_21->name+27)='t';
			                       *(FCNN_2L_FB1_21->name+28)='e';
			                       *(FCNN_2L_FB1_21->name+29)='d';
			                       *(FCNN_2L_FB1_21->name+30)='_';
			                       *(FCNN_2L_FB1_21->name+31)='N';
			                       *(FCNN_2L_FB1_21->name+32)='N';
			                       *(FCNN_2L_FB1_21->name+33)='_';
			                       *(FCNN_2L_FB1_21->name+34)='2';
			                       *(FCNN_2L_FB1_21->name+35)='_';
			                       *(FCNN_2L_FB1_21->name+36)='L';
			                       *(FCNN_2L_FB1_21->name+37)='a';
			                       *(FCNN_2L_FB1_21->name+38)='y';
			                       *(FCNN_2L_FB1_21->name+39)='e';
			                       *(FCNN_2L_FB1_21->name+40)='r';
			                       *(FCNN_2L_FB1_21->name+41)='s';
			                       *(FCNN_2L_FB1_21->name+42)='_';
			                       *(FCNN_2L_FB1_21->name+43)='f';
			                       *(FCNN_2L_FB1_21->name+44)='e';
			                       *(FCNN_2L_FB1_21->name+45)='e';
			                       *(FCNN_2L_FB1_21->name+46)='d';
			                       *(FCNN_2L_FB1_21->name+47)='b';
			                       *(FCNN_2L_FB1_21->name+48)='a';
			                       *(FCNN_2L_FB1_21->name+49)='c';
			                       *(FCNN_2L_FB1_21->name+50)='k';
			                       *(FCNN_2L_FB1_21->name+51)='_';
			                       *(FCNN_2L_FB1_21->name+52)='2';
			                       *(FCNN_2L_FB1_21->name+53)='>';
			                       *(FCNN_2L_FB1_21->name+54)='1';
			                       *(FCNN_2L_FB1_21->name+55)=')';
			                       *(FCNN_2L_FB1_21->name+56)=' ';
			                       FCNN_2L_FB1_21->number_of_Levels=2;
			                       FCNN_2L_FB1_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FB1_21->nodes_per_Level=MAI((long int)FCNN_2L_FB1_21->number_of_Levels);
			                       *(FCNN_2L_FB1_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_21->recurrence=T;
			                       FCNN_2L_FB1_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_FB1_21->source=MAI((long int)FCNN_2L_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_21->source+0)=2;
			                       FCNN_2L_FB1_21->destination=MAI((long int)FCNN_2L_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_21->destination+0)=1;
			                       FCNN_2L_FB1_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_21->create_neuron==0) exit_handling(70,1); 
			                       *(FCNN_2L_FB1_21->create_neuron+0)=create_FCNN_2L_FB1_21;
			                       FCNN_2L_FB1_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_21->prepare_input=0;
			                       FCNN_2L_FB1_21->number_linear_output_functions=3;
			                       FCNN_2L_FB1_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21->node_linear_output==0) exit_handling(70,2);
			                       *(FCNN_2L_FB1_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FB1_21->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_21->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21->node_output==0) exit_handling(70,3);
			                       *(FCNN_2L_FB1_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21->node_output_derivation==0) exit_handling(70,4);
			                       *(FCNN_2L_FB1_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_21->number_of_firing_functions=2;
			                       FCNN_2L_FB1_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21->firing_neuron==0) exit_handling(70,5);
			                       *(FCNN_2L_FB1_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_FB1_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_FB1_21->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_21->create_learning_algorithm==0) exit_handling(70,6);
			                       *(FCNN_2L_FB1_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_21);
			                      } /* ; */

/* setting up FCNN_2L_FB1_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_22_11 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_22_11;
			                       FCNN_2L_FB1_22_11=MANTD((long int)1);
			                       FCNN_2L_FB1_22_11->name=MAC((long int)68);
			                       *(FCNN_2L_FB1_22_11->name+0)='F';
			                       *(FCNN_2L_FB1_22_11->name+1)='C';
			                       *(FCNN_2L_FB1_22_11->name+2)='N';
			                       *(FCNN_2L_FB1_22_11->name+3)='N';
			                       *(FCNN_2L_FB1_22_11->name+4)='_';
			                       *(FCNN_2L_FB1_22_11->name+5)='2';
			                       *(FCNN_2L_FB1_22_11->name+6)='L';
			                       *(FCNN_2L_FB1_22_11->name+7)='_';
			                       *(FCNN_2L_FB1_22_11->name+8)='F';
			                       *(FCNN_2L_FB1_22_11->name+9)='B';
			                       *(FCNN_2L_FB1_22_11->name+10)='1';
			                       *(FCNN_2L_FB1_22_11->name+11)='_';
			                       *(FCNN_2L_FB1_22_11->name+12)='2';
			                       *(FCNN_2L_FB1_22_11->name+13)='2';
			                       *(FCNN_2L_FB1_22_11->name+14)='_';
			                       *(FCNN_2L_FB1_22_11->name+15)='1';
			                       *(FCNN_2L_FB1_22_11->name+16)='1';
			                       *(FCNN_2L_FB1_22_11->name+17)='(';
			                       *(FCNN_2L_FB1_22_11->name+18)='F';
			                       *(FCNN_2L_FB1_22_11->name+19)='u';
			                       *(FCNN_2L_FB1_22_11->name+20)='l';
			                       *(FCNN_2L_FB1_22_11->name+21)='l';
			                       *(FCNN_2L_FB1_22_11->name+22)='y';
			                       *(FCNN_2L_FB1_22_11->name+23)='_';
			                       *(FCNN_2L_FB1_22_11->name+24)='C';
			                       *(FCNN_2L_FB1_22_11->name+25)='o';
			                       *(FCNN_2L_FB1_22_11->name+26)='n';
			                       *(FCNN_2L_FB1_22_11->name+27)='n';
			                       *(FCNN_2L_FB1_22_11->name+28)='e';
			                       *(FCNN_2L_FB1_22_11->name+29)='c';
			                       *(FCNN_2L_FB1_22_11->name+30)='t';
			                       *(FCNN_2L_FB1_22_11->name+31)='e';
			                       *(FCNN_2L_FB1_22_11->name+32)='d';
			                       *(FCNN_2L_FB1_22_11->name+33)='_';
			                       *(FCNN_2L_FB1_22_11->name+34)='N';
			                       *(FCNN_2L_FB1_22_11->name+35)='N';
			                       *(FCNN_2L_FB1_22_11->name+36)='_';
			                       *(FCNN_2L_FB1_22_11->name+37)='2';
			                       *(FCNN_2L_FB1_22_11->name+38)='_';
			                       *(FCNN_2L_FB1_22_11->name+39)='L';
			                       *(FCNN_2L_FB1_22_11->name+40)='a';
			                       *(FCNN_2L_FB1_22_11->name+41)='y';
			                       *(FCNN_2L_FB1_22_11->name+42)='e';
			                       *(FCNN_2L_FB1_22_11->name+43)='r';
			                       *(FCNN_2L_FB1_22_11->name+44)='s';
			                       *(FCNN_2L_FB1_22_11->name+45)='_';
			                       *(FCNN_2L_FB1_22_11->name+46)='f';
			                       *(FCNN_2L_FB1_22_11->name+47)='e';
			                       *(FCNN_2L_FB1_22_11->name+48)='e';
			                       *(FCNN_2L_FB1_22_11->name+49)='d';
			                       *(FCNN_2L_FB1_22_11->name+50)='b';
			                       *(FCNN_2L_FB1_22_11->name+51)='a';
			                       *(FCNN_2L_FB1_22_11->name+52)='c';
			                       *(FCNN_2L_FB1_22_11->name+53)='k';
			                       *(FCNN_2L_FB1_22_11->name+54)='_';
			                       *(FCNN_2L_FB1_22_11->name+55)='2';
			                       *(FCNN_2L_FB1_22_11->name+56)='>';
			                       *(FCNN_2L_FB1_22_11->name+57)='2';
			                       *(FCNN_2L_FB1_22_11->name+58)='_';
			                       *(FCNN_2L_FB1_22_11->name+59)='a';
			                       *(FCNN_2L_FB1_22_11->name+60)='n';
			                       *(FCNN_2L_FB1_22_11->name+61)='d';
			                       *(FCNN_2L_FB1_22_11->name+62)='_';
			                       *(FCNN_2L_FB1_22_11->name+63)='1';
			                       *(FCNN_2L_FB1_22_11->name+64)='>';
			                       *(FCNN_2L_FB1_22_11->name+65)='1';
			                       *(FCNN_2L_FB1_22_11->name+66)=')';
			                       *(FCNN_2L_FB1_22_11->name+67)=' ';
			                       FCNN_2L_FB1_22_11->number_of_Levels=2;
			                       FCNN_2L_FB1_22_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FB1_22_11->nodes_per_Level=MAI((long int)FCNN_2L_FB1_22_11->number_of_Levels);
			                       *(FCNN_2L_FB1_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_22_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_22_11->recurrence=T;
			                       FCNN_2L_FB1_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FB1_22_11->source=MAI((long int)FCNN_2L_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_11->source+0)=2;
			                       *(FCNN_2L_FB1_22_11->source+1)=1;
			                       FCNN_2L_FB1_22_11->destination=MAI((long int)FCNN_2L_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_11->destination+0)=2;
			                       *(FCNN_2L_FB1_22_11->destination+1)=1;
			                       FCNN_2L_FB1_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->create_neuron==0) exit_handling(71,1); 
			                       *(FCNN_2L_FB1_22_11->create_neuron+0)=create_FCNN_2L_FB1_22_11;
			                       FCNN_2L_FB1_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_22_11->prepare_input=0;
			                       FCNN_2L_FB1_22_11->number_linear_output_functions=3;
			                       FCNN_2L_FB1_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->node_linear_output==0) exit_handling(71,2);
			                       *(FCNN_2L_FB1_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FB1_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->node_output==0) exit_handling(71,3);
			                       *(FCNN_2L_FB1_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->node_output_derivation==0) exit_handling(71,4);
			                       *(FCNN_2L_FB1_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_22_11->number_of_firing_functions=2;
			                       FCNN_2L_FB1_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->firing_neuron==0) exit_handling(71,5);
			                       *(FCNN_2L_FB1_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_22_11->create_learning_algorithm==0) exit_handling(71,6);
			                       *(FCNN_2L_FB1_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_22_11);
			                      } /* ; */

/* setting up FCNN_2L_FB1_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_21_11 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer on 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_21_11;
			                       FCNN_2L_FB1_21_11=MANTD((long int)1);
			                       FCNN_2L_FB1_21_11->name=MAC((long int)68);
			                       *(FCNN_2L_FB1_21_11->name+0)='F';
			                       *(FCNN_2L_FB1_21_11->name+1)='C';
			                       *(FCNN_2L_FB1_21_11->name+2)='N';
			                       *(FCNN_2L_FB1_21_11->name+3)='N';
			                       *(FCNN_2L_FB1_21_11->name+4)='_';
			                       *(FCNN_2L_FB1_21_11->name+5)='2';
			                       *(FCNN_2L_FB1_21_11->name+6)='L';
			                       *(FCNN_2L_FB1_21_11->name+7)='_';
			                       *(FCNN_2L_FB1_21_11->name+8)='F';
			                       *(FCNN_2L_FB1_21_11->name+9)='B';
			                       *(FCNN_2L_FB1_21_11->name+10)='1';
			                       *(FCNN_2L_FB1_21_11->name+11)='_';
			                       *(FCNN_2L_FB1_21_11->name+12)='2';
			                       *(FCNN_2L_FB1_21_11->name+13)='1';
			                       *(FCNN_2L_FB1_21_11->name+14)='_';
			                       *(FCNN_2L_FB1_21_11->name+15)='1';
			                       *(FCNN_2L_FB1_21_11->name+16)='1';
			                       *(FCNN_2L_FB1_21_11->name+17)='(';
			                       *(FCNN_2L_FB1_21_11->name+18)='F';
			                       *(FCNN_2L_FB1_21_11->name+19)='u';
			                       *(FCNN_2L_FB1_21_11->name+20)='l';
			                       *(FCNN_2L_FB1_21_11->name+21)='l';
			                       *(FCNN_2L_FB1_21_11->name+22)='y';
			                       *(FCNN_2L_FB1_21_11->name+23)='_';
			                       *(FCNN_2L_FB1_21_11->name+24)='C';
			                       *(FCNN_2L_FB1_21_11->name+25)='o';
			                       *(FCNN_2L_FB1_21_11->name+26)='n';
			                       *(FCNN_2L_FB1_21_11->name+27)='n';
			                       *(FCNN_2L_FB1_21_11->name+28)='e';
			                       *(FCNN_2L_FB1_21_11->name+29)='c';
			                       *(FCNN_2L_FB1_21_11->name+30)='t';
			                       *(FCNN_2L_FB1_21_11->name+31)='e';
			                       *(FCNN_2L_FB1_21_11->name+32)='d';
			                       *(FCNN_2L_FB1_21_11->name+33)='_';
			                       *(FCNN_2L_FB1_21_11->name+34)='N';
			                       *(FCNN_2L_FB1_21_11->name+35)='N';
			                       *(FCNN_2L_FB1_21_11->name+36)='_';
			                       *(FCNN_2L_FB1_21_11->name+37)='2';
			                       *(FCNN_2L_FB1_21_11->name+38)='_';
			                       *(FCNN_2L_FB1_21_11->name+39)='L';
			                       *(FCNN_2L_FB1_21_11->name+40)='a';
			                       *(FCNN_2L_FB1_21_11->name+41)='y';
			                       *(FCNN_2L_FB1_21_11->name+42)='e';
			                       *(FCNN_2L_FB1_21_11->name+43)='r';
			                       *(FCNN_2L_FB1_21_11->name+44)='s';
			                       *(FCNN_2L_FB1_21_11->name+45)='_';
			                       *(FCNN_2L_FB1_21_11->name+46)='f';
			                       *(FCNN_2L_FB1_21_11->name+47)='e';
			                       *(FCNN_2L_FB1_21_11->name+48)='e';
			                       *(FCNN_2L_FB1_21_11->name+49)='d';
			                       *(FCNN_2L_FB1_21_11->name+50)='b';
			                       *(FCNN_2L_FB1_21_11->name+51)='a';
			                       *(FCNN_2L_FB1_21_11->name+52)='c';
			                       *(FCNN_2L_FB1_21_11->name+53)='k';
			                       *(FCNN_2L_FB1_21_11->name+54)='_';
			                       *(FCNN_2L_FB1_21_11->name+55)='2';
			                       *(FCNN_2L_FB1_21_11->name+56)='>';
			                       *(FCNN_2L_FB1_21_11->name+57)='1';
			                       *(FCNN_2L_FB1_21_11->name+58)='_';
			                       *(FCNN_2L_FB1_21_11->name+59)='a';
			                       *(FCNN_2L_FB1_21_11->name+60)='n';
			                       *(FCNN_2L_FB1_21_11->name+61)='d';
			                       *(FCNN_2L_FB1_21_11->name+62)='_';
			                       *(FCNN_2L_FB1_21_11->name+63)='1';
			                       *(FCNN_2L_FB1_21_11->name+64)='>';
			                       *(FCNN_2L_FB1_21_11->name+65)='1';
			                       *(FCNN_2L_FB1_21_11->name+66)=')';
			                       *(FCNN_2L_FB1_21_11->name+67)=' ';
			                       FCNN_2L_FB1_21_11->number_of_Levels=2;
			                       FCNN_2L_FB1_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback (from both itself and the second Level) */
			                       FCNN_2L_FB1_21_11->nodes_per_Level=MAI((long int)FCNN_2L_FB1_21_11->number_of_Levels);
			                       *(FCNN_2L_FB1_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_21_11->recurrence=T;
			                       FCNN_2L_FB1_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FB1_21_11->source=MAI((long int)FCNN_2L_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_21_11->source+0)=2;
			                       *(FCNN_2L_FB1_21_11->source+1)=1;
			                       FCNN_2L_FB1_21_11->destination=MAI((long int)FCNN_2L_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_21_11->destination+0)=1;
			                       *(FCNN_2L_FB1_21_11->destination+1)=1;
			                       FCNN_2L_FB1_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->create_neuron==0) exit_handling(72,1); 
			                       *(FCNN_2L_FB1_21_11->create_neuron+0)=create_FCNN_2L_FB1_21_11;
			                       FCNN_2L_FB1_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_21_11->prepare_input=0;
			                       FCNN_2L_FB1_21_11->number_linear_output_functions=3;
			                       FCNN_2L_FB1_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->node_linear_output==0) exit_handling(72,2);
			                       *(FCNN_2L_FB1_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FB1_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->node_output==0) exit_handling(72,3);
			                       *(FCNN_2L_FB1_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->node_output_derivation==0) exit_handling(72,4);
			                       *(FCNN_2L_FB1_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_21_11->number_of_firing_functions=2;
			                       FCNN_2L_FB1_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->firing_neuron==0) exit_handling(72,5);
			                       *(FCNN_2L_FB1_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_21_11->create_learning_algorithm==0) exit_handling(72,6);
			                       *(FCNN_2L_FB1_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_21_11);
			                      } /* ; */

/* setting up FCNN_2L_FB1_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_22_21 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer on 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_22_21;
			                       FCNN_2L_FB1_22_21=MANTD((long int)1);
			                       FCNN_2L_FB1_22_21->name=MAC((long int)68);
			                       *(FCNN_2L_FB1_22_21->name+0)='F';
			                       *(FCNN_2L_FB1_22_21->name+1)='C';
			                       *(FCNN_2L_FB1_22_21->name+2)='N';
			                       *(FCNN_2L_FB1_22_21->name+3)='N';
			                       *(FCNN_2L_FB1_22_21->name+4)='_';
			                       *(FCNN_2L_FB1_22_21->name+5)='2';
			                       *(FCNN_2L_FB1_22_21->name+6)='L';
			                       *(FCNN_2L_FB1_22_21->name+7)='_';
			                       *(FCNN_2L_FB1_22_21->name+8)='F';
			                       *(FCNN_2L_FB1_22_21->name+9)='B';
			                       *(FCNN_2L_FB1_22_21->name+10)='1';
			                       *(FCNN_2L_FB1_22_21->name+11)='_';
			                       *(FCNN_2L_FB1_22_21->name+12)='2';
			                       *(FCNN_2L_FB1_22_21->name+13)='2';
			                       *(FCNN_2L_FB1_22_21->name+14)='_';
			                       *(FCNN_2L_FB1_22_21->name+15)='2';
			                       *(FCNN_2L_FB1_22_21->name+16)='1';
			                       *(FCNN_2L_FB1_22_21->name+17)='(';
			                       *(FCNN_2L_FB1_22_21->name+18)='F';
			                       *(FCNN_2L_FB1_22_21->name+19)='u';
			                       *(FCNN_2L_FB1_22_21->name+20)='l';
			                       *(FCNN_2L_FB1_22_21->name+21)='l';
			                       *(FCNN_2L_FB1_22_21->name+22)='y';
			                       *(FCNN_2L_FB1_22_21->name+23)='_';
			                       *(FCNN_2L_FB1_22_21->name+24)='C';
			                       *(FCNN_2L_FB1_22_21->name+25)='o';
			                       *(FCNN_2L_FB1_22_21->name+26)='n';
			                       *(FCNN_2L_FB1_22_21->name+27)='n';
			                       *(FCNN_2L_FB1_22_21->name+28)='e';
			                       *(FCNN_2L_FB1_22_21->name+29)='c';
			                       *(FCNN_2L_FB1_22_21->name+30)='t';
			                       *(FCNN_2L_FB1_22_21->name+31)='e';
			                       *(FCNN_2L_FB1_22_21->name+32)='d';
			                       *(FCNN_2L_FB1_22_21->name+33)='_';
			                       *(FCNN_2L_FB1_22_21->name+34)='N';
			                       *(FCNN_2L_FB1_22_21->name+35)='N';
			                       *(FCNN_2L_FB1_22_21->name+36)='_';
			                       *(FCNN_2L_FB1_22_21->name+37)='2';
			                       *(FCNN_2L_FB1_22_21->name+38)='_';
			                       *(FCNN_2L_FB1_22_21->name+39)='L';
			                       *(FCNN_2L_FB1_22_21->name+40)='a';
			                       *(FCNN_2L_FB1_22_21->name+41)='y';
			                       *(FCNN_2L_FB1_22_21->name+42)='e';
			                       *(FCNN_2L_FB1_22_21->name+43)='r';
			                       *(FCNN_2L_FB1_22_21->name+44)='s';
			                       *(FCNN_2L_FB1_22_21->name+45)='_';
			                       *(FCNN_2L_FB1_22_21->name+46)='f';
			                       *(FCNN_2L_FB1_22_21->name+47)='e';
			                       *(FCNN_2L_FB1_22_21->name+48)='e';
			                       *(FCNN_2L_FB1_22_21->name+48)='d';
			                       *(FCNN_2L_FB1_22_21->name+50)='b';
			                       *(FCNN_2L_FB1_22_21->name+51)='a';
			                       *(FCNN_2L_FB1_22_21->name+52)='c';
			                       *(FCNN_2L_FB1_22_21->name+53)='k';
			                       *(FCNN_2L_FB1_22_21->name+54)='_';
			                       *(FCNN_2L_FB1_22_21->name+55)='2';
			                       *(FCNN_2L_FB1_22_21->name+56)='>';
			                       *(FCNN_2L_FB1_22_21->name+57)='2';
			                       *(FCNN_2L_FB1_22_21->name+58)='_';
			                       *(FCNN_2L_FB1_22_21->name+59)='a';
			                       *(FCNN_2L_FB1_22_21->name+60)='n';
			                       *(FCNN_2L_FB1_22_21->name+61)='d';
			                       *(FCNN_2L_FB1_22_21->name+62)='_';
			                       *(FCNN_2L_FB1_22_21->name+63)='2';
			                       *(FCNN_2L_FB1_22_21->name+64)='>';
			                       *(FCNN_2L_FB1_22_21->name+65)='1';
			                       *(FCNN_2L_FB1_22_21->name+66)=')';
			                       *(FCNN_2L_FB1_22_21->name+67)=' ';
			                       FCNN_2L_FB1_22_21->number_of_Levels=2;
			                       FCNN_2L_FB1_22_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FB1_22_21->nodes_per_Level=MAI((long int)FCNN_2L_FB1_22_21->number_of_Levels);
			                       *(FCNN_2L_FB1_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_22_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_22_21->recurrence=T;
			                       FCNN_2L_FB1_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_FB1_22_21->source=MAI((long int)FCNN_2L_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_21->source+0)=2;
			                       *(FCNN_2L_FB1_22_21->source+1)=2;
			                       FCNN_2L_FB1_22_21->destination=MAI((long int)FCNN_2L_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_21->destination+0)=2;
			                       *(FCNN_2L_FB1_22_21->destination+1)=1;
			                       FCNN_2L_FB1_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->create_neuron==0) exit_handling(73,1); 
			                       *(FCNN_2L_FB1_22_21->create_neuron+0)=create_FCNN_2L_FB1_22_21;
			                       FCNN_2L_FB1_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_22_21->prepare_input=0;
			                       FCNN_2L_FB1_22_21->number_linear_output_functions=3;
			                       FCNN_2L_FB1_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->node_linear_output==0) exit_handling(73,2);
			                       *(FCNN_2L_FB1_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FB1_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->node_output==0) exit_handling(73,3);
			                       *(FCNN_2L_FB1_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->node_output_derivation==0) exit_handling(73,4);
			                       *(FCNN_2L_FB1_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_22_21->number_of_firing_functions=2;
			                       FCNN_2L_FB1_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->firing_neuron==0) exit_handling(73,5);
			                       *(FCNN_2L_FB1_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21->create_learning_algorithm==0) exit_handling(73,6);
			                       *(FCNN_2L_FB1_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_22_21);
			                      } /* ; */

/* setting up FCNN_2L_FB1_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_FB1_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_FB1_22_21_11 (Fully Connected Neural Network with 2 Layers and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_FB1_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_FB1_22_21_11;
			                       FCNN_2L_FB1_22_21_11=MANTD((long int)1);
			                       FCNN_2L_FB1_22_21_11->name=MAC((long int)79);
			                       *(FCNN_2L_FB1_22_21_11->name+0)='F';
			                       *(FCNN_2L_FB1_22_21_11->name+1)='C';
			                       *(FCNN_2L_FB1_22_21_11->name+2)='N';
			                       *(FCNN_2L_FB1_22_21_11->name+3)='N';
			                       *(FCNN_2L_FB1_22_21_11->name+4)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+5)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+6)='L';
			                       *(FCNN_2L_FB1_22_21_11->name+7)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+8)='F';
			                       *(FCNN_2L_FB1_22_21_11->name+9)='B';
			                       *(FCNN_2L_FB1_22_21_11->name+10)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+11)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+12)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+13)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+14)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+15)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+16)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+17)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+18)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+19)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+20)='(';
			                       *(FCNN_2L_FB1_22_21_11->name+21)='F';
			                       *(FCNN_2L_FB1_22_21_11->name+22)='u';
			                       *(FCNN_2L_FB1_22_21_11->name+23)='l';
			                       *(FCNN_2L_FB1_22_21_11->name+24)='l';
			                       *(FCNN_2L_FB1_22_21_11->name+25)='y';
			                       *(FCNN_2L_FB1_22_21_11->name+26)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+27)='C';
			                       *(FCNN_2L_FB1_22_21_11->name+28)='o';
			                       *(FCNN_2L_FB1_22_21_11->name+29)='n';
			                       *(FCNN_2L_FB1_22_21_11->name+30)='n';
			                       *(FCNN_2L_FB1_22_21_11->name+31)='e';
			                       *(FCNN_2L_FB1_22_21_11->name+32)='c';
			                       *(FCNN_2L_FB1_22_21_11->name+33)='t';
			                       *(FCNN_2L_FB1_22_21_11->name+34)='e';
			                       *(FCNN_2L_FB1_22_21_11->name+35)='d';
			                       *(FCNN_2L_FB1_22_21_11->name+36)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+37)='N';
			                       *(FCNN_2L_FB1_22_21_11->name+38)='N';
			                       *(FCNN_2L_FB1_22_21_11->name+39)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+40)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+41)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+42)='L';
			                       *(FCNN_2L_FB1_22_21_11->name+43)='a';
			                       *(FCNN_2L_FB1_22_21_11->name+44)='y';
			                       *(FCNN_2L_FB1_22_21_11->name+45)='e';
			                       *(FCNN_2L_FB1_22_21_11->name+46)='r';
			                       *(FCNN_2L_FB1_22_21_11->name+47)='s';
			                       *(FCNN_2L_FB1_22_21_11->name+48)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+49)='f';
			                       *(FCNN_2L_FB1_22_21_11->name+50)='e';
			                       *(FCNN_2L_FB1_22_21_11->name+51)='e';
			                       *(FCNN_2L_FB1_22_21_11->name+52)='d';
			                       *(FCNN_2L_FB1_22_21_11->name+53)='b';
			                       *(FCNN_2L_FB1_22_21_11->name+54)='a';
			                       *(FCNN_2L_FB1_22_21_11->name+55)='c';
			                       *(FCNN_2L_FB1_22_21_11->name+56)='k';
			                       *(FCNN_2L_FB1_22_21_11->name+57)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+58)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+59)='>';
			                       *(FCNN_2L_FB1_22_21_11->name+60)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+61)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+62)='a';
			                       *(FCNN_2L_FB1_22_21_11->name+63)='n';
			                       *(FCNN_2L_FB1_22_21_11->name+64)='d';
			                       *(FCNN_2L_FB1_22_21_11->name+65)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+66)='2';
			                       *(FCNN_2L_FB1_22_21_11->name+67)='>';
			                       *(FCNN_2L_FB1_22_21_11->name+68)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+69)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+70)='a';
			                       *(FCNN_2L_FB1_22_21_11->name+71)='n';
			                       *(FCNN_2L_FB1_22_21_11->name+72)='d';
			                       *(FCNN_2L_FB1_22_21_11->name+73)='_';
			                       *(FCNN_2L_FB1_22_21_11->name+74)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+75)='>';
			                       *(FCNN_2L_FB1_22_21_11->name+76)='1';
			                       *(FCNN_2L_FB1_22_21_11->name+77)=')';
			                       *(FCNN_2L_FB1_22_21_11->name+78)=' ';
			                       FCNN_2L_FB1_22_21_11->number_of_Levels=2;
			                       FCNN_2L_FB1_22_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_FB1_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_FB1_22_21_11->number_of_Levels);
			                       *(FCNN_2L_FB1_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_FB1_22_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_FB1_22_21_11->recurrence=T;
			                       FCNN_2L_FB1_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_FB1_22_21_11->source=MAI((long int)FCNN_2L_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_21_11->source+0)=2;
			                       *(FCNN_2L_FB1_22_21_11->source+1)=2;
			                       *(FCNN_2L_FB1_22_21_11->source+2)=1;
			                       FCNN_2L_FB1_22_21_11->destination=MAI((long int)FCNN_2L_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_FB1_22_21_11->destination+0)=2;
			                       *(FCNN_2L_FB1_22_21_11->destination+1)=1;
			                       *(FCNN_2L_FB1_22_21_11->destination+2)=1;
			                       FCNN_2L_FB1_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_FB1_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->create_neuron==0) exit_handling(74,1); 
			                       *(FCNN_2L_FB1_22_21_11->create_neuron+0)=create_FCNN_2L_FB1_22_21_11;
			                       FCNN_2L_FB1_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_FB1_22_21_11->prepare_input=0;
			                       FCNN_2L_FB1_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_FB1_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->node_linear_output==0) exit_handling(74,2);
			                       *(FCNN_2L_FB1_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_FB1_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_FB1_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_FB1_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->node_output==0) exit_handling(74,3);
			                       *(FCNN_2L_FB1_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_FB1_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_FB1_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_FB1_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_FB1_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->node_output_derivation==0) exit_handling(74,4);
			                       *(FCNN_2L_FB1_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_FB1_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_FB1_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_FB1_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->firing_neuron==0) exit_handling(74,5);
			                       *(FCNN_2L_FB1_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_FB1_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_FB1_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_FB1_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_FB1_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_FB1_22_21_11->create_learning_algorithm==0) exit_handling(74,6);
			                       *(FCNN_2L_FB1_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_FB1_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_FB1_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_W_FB1_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_11;
			                       FCNN_2L_W_FB1_11=MANTD((long int)1);
			                       FCNN_2L_W_FB1_11->name=MAC((long int)90);
			                       *(FCNN_2L_W_FB1_11->name+0)='F';
			                       *(FCNN_2L_W_FB1_11->name+1)='C';
			                       *(FCNN_2L_W_FB1_11->name+2)='N';
			                       *(FCNN_2L_W_FB1_11->name+3)='N';
			                       *(FCNN_2L_W_FB1_11->name+4)='_';
			                       *(FCNN_2L_W_FB1_11->name+5)='2';
			                       *(FCNN_2L_W_FB1_11->name+6)='L';
			                       *(FCNN_2L_W_FB1_11->name+7)='_';
			                       *(FCNN_2L_W_FB1_11->name+8)='W';
			                       *(FCNN_2L_W_FB1_11->name+9)='_';
			                       *(FCNN_2L_W_FB1_11->name+10)='F';
			                       *(FCNN_2L_W_FB1_11->name+11)='B';
			                       *(FCNN_2L_W_FB1_11->name+12)='1';
			                       *(FCNN_2L_W_FB1_11->name+13)='_';
			                       *(FCNN_2L_W_FB1_11->name+14)='1';
			                       *(FCNN_2L_W_FB1_11->name+15)='1';
			                       *(FCNN_2L_W_FB1_11->name+16)='(';
			                       *(FCNN_2L_W_FB1_11->name+17)='F';
			                       *(FCNN_2L_W_FB1_11->name+18)='u';
			                       *(FCNN_2L_W_FB1_11->name+19)='l';
			                       *(FCNN_2L_W_FB1_11->name+20)='l';
			                       *(FCNN_2L_W_FB1_11->name+21)='y';
			                       *(FCNN_2L_W_FB1_11->name+22)='_';
			                       *(FCNN_2L_W_FB1_11->name+23)='C';
			                       *(FCNN_2L_W_FB1_11->name+24)='o';
			                       *(FCNN_2L_W_FB1_11->name+25)='n';
			                       *(FCNN_2L_W_FB1_11->name+26)='n';
			                       *(FCNN_2L_W_FB1_11->name+27)='e';
			                       *(FCNN_2L_W_FB1_11->name+28)='c';
			                       *(FCNN_2L_W_FB1_11->name+29)='t';
			                       *(FCNN_2L_W_FB1_11->name+30)='e';
			                       *(FCNN_2L_W_FB1_11->name+31)='d';
			                       *(FCNN_2L_W_FB1_11->name+32)='_';
			                       *(FCNN_2L_W_FB1_11->name+33)='N';
			                       *(FCNN_2L_W_FB1_11->name+34)='N';
			                       *(FCNN_2L_W_FB1_11->name+35)='_';
			                       *(FCNN_2L_W_FB1_11->name+36)='2';
			                       *(FCNN_2L_W_FB1_11->name+37)='_';
			                       *(FCNN_2L_W_FB1_11->name+38)='L';
			                       *(FCNN_2L_W_FB1_11->name+39)='a';
			                       *(FCNN_2L_W_FB1_11->name+40)='y';
			                       *(FCNN_2L_W_FB1_11->name+41)='e';
			                       *(FCNN_2L_W_FB1_11->name+42)='r';
			                       *(FCNN_2L_W_FB1_11->name+43)='s';
			                       *(FCNN_2L_W_FB1_11->name+44)='_';
			                       *(FCNN_2L_W_FB1_11->name+45)='r';
			                       *(FCNN_2L_W_FB1_11->name+46)='e';
			                       *(FCNN_2L_W_FB1_11->name+47)='c';
			                       *(FCNN_2L_W_FB1_11->name+48)='e';
			                       *(FCNN_2L_W_FB1_11->name+49)='i';
			                       *(FCNN_2L_W_FB1_11->name+50)='v';
			                       *(FCNN_2L_W_FB1_11->name+51)='i';
			                       *(FCNN_2L_W_FB1_11->name+52)='n';
			                       *(FCNN_2L_W_FB1_11->name+53)='g';
			                       *(FCNN_2L_W_FB1_11->name+54)='_';
			                       *(FCNN_2L_W_FB1_11->name+55)='i';
			                       *(FCNN_2L_W_FB1_11->name+56)='n';
			                       *(FCNN_2L_W_FB1_11->name+57)='p';
			                       *(FCNN_2L_W_FB1_11->name+58)='u';
			                       *(FCNN_2L_W_FB1_11->name+59)='t';
			                       *(FCNN_2L_W_FB1_11->name+60)='_';
			                       *(FCNN_2L_W_FB1_11->name+61)='t';
			                       *(FCNN_2L_W_FB1_11->name+62)='h';
			                       *(FCNN_2L_W_FB1_11->name+63)='r';
			                       *(FCNN_2L_W_FB1_11->name+64)='o';
			                       *(FCNN_2L_W_FB1_11->name+65)='u';
			                       *(FCNN_2L_W_FB1_11->name+66)='g';
			                       *(FCNN_2L_W_FB1_11->name+67)='h';
			                       *(FCNN_2L_W_FB1_11->name+68)='_';
			                       *(FCNN_2L_W_FB1_11->name+69)='W';
			                       *(FCNN_2L_W_FB1_11->name+70)='i';
			                       *(FCNN_2L_W_FB1_11->name+71)='n';
			                       *(FCNN_2L_W_FB1_11->name+72)='d';
			                       *(FCNN_2L_W_FB1_11->name+73)='o';
			                       *(FCNN_2L_W_FB1_11->name+74)='w';
			                       *(FCNN_2L_W_FB1_11->name+75)='_';
			                       *(FCNN_2L_W_FB1_11->name+76)='f';
			                       *(FCNN_2L_W_FB1_11->name+77)='e';
			                       *(FCNN_2L_W_FB1_11->name+78)='e';
			                       *(FCNN_2L_W_FB1_11->name+79)='d';
			                       *(FCNN_2L_W_FB1_11->name+80)='b';
			                       *(FCNN_2L_W_FB1_11->name+81)='a';
			                       *(FCNN_2L_W_FB1_11->name+82)='c';
			                       *(FCNN_2L_W_FB1_11->name+83)='k';
			                       *(FCNN_2L_W_FB1_11->name+84)='_';
			                       *(FCNN_2L_W_FB1_11->name+85)='1';
			                       *(FCNN_2L_W_FB1_11->name+86)='>';
			                       *(FCNN_2L_W_FB1_11->name+87)='1';
			                       *(FCNN_2L_W_FB1_11->name+88)=')';
			                       *(FCNN_2L_W_FB1_11->name+89)=' ';
			                       FCNN_2L_W_FB1_11->number_of_Levels=2;
			                       FCNN_2L_W_FB1_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_11->number_of_Levels);
			                       *(FCNN_2L_W_FB1_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_11->recurrence=T;
			                       FCNN_2L_W_FB1_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FB1_11->source=MAI((long int)FCNN_2L_W_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_11->source+0)=1;
			                       FCNN_2L_W_FB1_11->destination=MAI((long int)FCNN_2L_W_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_11->destination+0)=1;
			                       FCNN_2L_W_FB1_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->create_neuron==0) exit_handling(75,1); 
			                       *(FCNN_2L_W_FB1_11->create_neuron+0)=create_FCNN_2L_FB1_11;
			                       FCNN_2L_W_FB1_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->node_linear_output==0) exit_handling(75,2);
			                       *(FCNN_2L_W_FB1_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->node_output==0) exit_handling(75,3);
			                       *(FCNN_2L_W_FB1_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->node_output_derivation==0) exit_handling(75,4);
			                       *(FCNN_2L_W_FB1_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->firing_neuron==0) exit_handling(75,5);
			                       *(FCNN_2L_W_FB1_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_11->create_learning_algorithm==0) exit_handling(75,6);
			                       *(FCNN_2L_W_FB1_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_22 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_22;
			                       FCNN_2L_W_FB1_22=MANTD((long int)1);
			                       FCNN_2L_W_FB1_22->name=MAC((long int)90);
			                       *(FCNN_2L_W_FB1_22->name+0)='F';
			                       *(FCNN_2L_W_FB1_22->name+1)='C';
			                       *(FCNN_2L_W_FB1_22->name+2)='N';
			                       *(FCNN_2L_W_FB1_22->name+3)='N';
			                       *(FCNN_2L_W_FB1_22->name+4)='_';
			                       *(FCNN_2L_W_FB1_22->name+5)='2';
			                       *(FCNN_2L_W_FB1_22->name+6)='L';
			                       *(FCNN_2L_W_FB1_22->name+7)='_';
			                       *(FCNN_2L_W_FB1_22->name+8)='W';
			                       *(FCNN_2L_W_FB1_22->name+9)='_';
			                       *(FCNN_2L_W_FB1_22->name+10)='F';
			                       *(FCNN_2L_W_FB1_22->name+11)='B';
			                       *(FCNN_2L_W_FB1_22->name+12)='1';
			                       *(FCNN_2L_W_FB1_22->name+13)='_';
			                       *(FCNN_2L_W_FB1_22->name+14)='2';
			                       *(FCNN_2L_W_FB1_22->name+15)='2';
			                       *(FCNN_2L_W_FB1_22->name+16)='(';
			                       *(FCNN_2L_W_FB1_22->name+17)='F';
			                       *(FCNN_2L_W_FB1_22->name+18)='u';
			                       *(FCNN_2L_W_FB1_22->name+19)='l';
			                       *(FCNN_2L_W_FB1_22->name+20)='l';
			                       *(FCNN_2L_W_FB1_22->name+21)='y';
			                       *(FCNN_2L_W_FB1_22->name+22)='_';
			                       *(FCNN_2L_W_FB1_22->name+23)='C';
			                       *(FCNN_2L_W_FB1_22->name+24)='o';
			                       *(FCNN_2L_W_FB1_22->name+25)='n';
			                       *(FCNN_2L_W_FB1_22->name+26)='n';
			                       *(FCNN_2L_W_FB1_22->name+27)='e';
			                       *(FCNN_2L_W_FB1_22->name+28)='c';
			                       *(FCNN_2L_W_FB1_22->name+29)='t';
			                       *(FCNN_2L_W_FB1_22->name+30)='e';
			                       *(FCNN_2L_W_FB1_22->name+31)='d';
			                       *(FCNN_2L_W_FB1_22->name+32)='_';
			                       *(FCNN_2L_W_FB1_22->name+33)='N';
			                       *(FCNN_2L_W_FB1_22->name+34)='N';
			                       *(FCNN_2L_W_FB1_22->name+35)='_';
			                       *(FCNN_2L_W_FB1_22->name+36)='2';
			                       *(FCNN_2L_W_FB1_22->name+37)='_';
			                       *(FCNN_2L_W_FB1_22->name+38)='L';
			                       *(FCNN_2L_W_FB1_22->name+39)='a';
			                       *(FCNN_2L_W_FB1_22->name+40)='y';
			                       *(FCNN_2L_W_FB1_22->name+41)='e';
			                       *(FCNN_2L_W_FB1_22->name+42)='r';
			                       *(FCNN_2L_W_FB1_22->name+43)='s';
			                       *(FCNN_2L_W_FB1_22->name+44)='_';
			                       *(FCNN_2L_W_FB1_22->name+45)='r';
			                       *(FCNN_2L_W_FB1_22->name+46)='e';
			                       *(FCNN_2L_W_FB1_22->name+47)='c';
			                       *(FCNN_2L_W_FB1_22->name+48)='e';
			                       *(FCNN_2L_W_FB1_22->name+49)='i';
			                       *(FCNN_2L_W_FB1_22->name+50)='v';
			                       *(FCNN_2L_W_FB1_22->name+51)='i';
			                       *(FCNN_2L_W_FB1_22->name+52)='n';
			                       *(FCNN_2L_W_FB1_22->name+53)='g';
			                       *(FCNN_2L_W_FB1_22->name+54)='_';
			                       *(FCNN_2L_W_FB1_22->name+55)='i';
			                       *(FCNN_2L_W_FB1_22->name+56)='n';
			                       *(FCNN_2L_W_FB1_22->name+57)='p';
			                       *(FCNN_2L_W_FB1_22->name+58)='u';
			                       *(FCNN_2L_W_FB1_22->name+59)='t';
			                       *(FCNN_2L_W_FB1_22->name+60)='_';
			                       *(FCNN_2L_W_FB1_22->name+61)='t';
			                       *(FCNN_2L_W_FB1_22->name+62)='h';
			                       *(FCNN_2L_W_FB1_22->name+63)='r';
			                       *(FCNN_2L_W_FB1_22->name+64)='o';
			                       *(FCNN_2L_W_FB1_22->name+65)='u';
			                       *(FCNN_2L_W_FB1_22->name+66)='g';
			                       *(FCNN_2L_W_FB1_22->name+67)='h';
			                       *(FCNN_2L_W_FB1_22->name+68)='_';
			                       *(FCNN_2L_W_FB1_22->name+69)='W';
			                       *(FCNN_2L_W_FB1_22->name+70)='i';
			                       *(FCNN_2L_W_FB1_22->name+71)='n';
			                       *(FCNN_2L_W_FB1_22->name+72)='d';
			                       *(FCNN_2L_W_FB1_22->name+73)='o';
			                       *(FCNN_2L_W_FB1_22->name+74)='w';
			                       *(FCNN_2L_W_FB1_22->name+75)='_';
			                       *(FCNN_2L_W_FB1_22->name+76)='f';
			                       *(FCNN_2L_W_FB1_22->name+77)='e';
			                       *(FCNN_2L_W_FB1_22->name+78)='e';
			                       *(FCNN_2L_W_FB1_22->name+79)='d';
			                       *(FCNN_2L_W_FB1_22->name+80)='b';
			                       *(FCNN_2L_W_FB1_22->name+81)='a';
			                       *(FCNN_2L_W_FB1_22->name+82)='c';
			                       *(FCNN_2L_W_FB1_22->name+83)='k';
			                       *(FCNN_2L_W_FB1_22->name+84)='_';
			                       *(FCNN_2L_W_FB1_22->name+85)='2';
			                       *(FCNN_2L_W_FB1_22->name+86)='>';
			                       *(FCNN_2L_W_FB1_22->name+87)='2';
			                       *(FCNN_2L_W_FB1_22->name+88)=')';
			                       *(FCNN_2L_W_FB1_22->name+89)=' ';
			                       FCNN_2L_W_FB1_22->number_of_Levels=2;
			                       FCNN_2L_W_FB1_22->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_22->prepare_input()) */
			                       FCNN_2L_W_FB1_22->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_22->number_of_Levels);
			                       *(FCNN_2L_W_FB1_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_22->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_22->recurrence=T;
			                       FCNN_2L_W_FB1_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FB1_22->source=MAI((long int)FCNN_2L_W_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22->source+0)=2;
			                       FCNN_2L_W_FB1_22->destination=MAI((long int)FCNN_2L_W_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22->destination+0)=2;
			                       FCNN_2L_W_FB1_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->create_neuron==0) exit_handling(76,1); 
			                       *(FCNN_2L_W_FB1_22->create_neuron+0)=create_FCNN_2L_FB1_22;
			                       FCNN_2L_W_FB1_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_22->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_22->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->node_linear_output==0) exit_handling(76,2);
			                       *(FCNN_2L_W_FB1_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_22->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_22->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->node_output==0) exit_handling(76,3);
			                       *(FCNN_2L_W_FB1_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->node_output_derivation==0) exit_handling(76,4);
			                       *(FCNN_2L_W_FB1_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_22->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->firing_neuron==0) exit_handling(76,5);
			                       *(FCNN_2L_W_FB1_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_22->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22->create_learning_algorithm==0) exit_handling(76,6);
			                       *(FCNN_2L_W_FB1_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_22);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_21;
			                       FCNN_2L_W_FB1_21=MANTD((long int)1);
			                       FCNN_2L_W_FB1_21->name=MAC((long int)90);
			                       *(FCNN_2L_W_FB1_21->name+0)='F';
			                       *(FCNN_2L_W_FB1_21->name+1)='C';
			                       *(FCNN_2L_W_FB1_21->name+2)='N';
			                       *(FCNN_2L_W_FB1_21->name+3)='N';
			                       *(FCNN_2L_W_FB1_21->name+4)='_';
			                       *(FCNN_2L_W_FB1_21->name+5)='2';
			                       *(FCNN_2L_W_FB1_21->name+6)='L';
			                       *(FCNN_2L_W_FB1_21->name+7)='_';
			                       *(FCNN_2L_W_FB1_21->name+8)='W';
			                       *(FCNN_2L_W_FB1_21->name+9)='_';
			                       *(FCNN_2L_W_FB1_21->name+10)='F';
			                       *(FCNN_2L_W_FB1_21->name+11)='B';
			                       *(FCNN_2L_W_FB1_21->name+12)='1';
			                       *(FCNN_2L_W_FB1_21->name+13)='_';
			                       *(FCNN_2L_W_FB1_21->name+14)='2';
			                       *(FCNN_2L_W_FB1_21->name+15)='1';
			                       *(FCNN_2L_W_FB1_21->name+16)='(';
			                       *(FCNN_2L_W_FB1_21->name+17)='F';
			                       *(FCNN_2L_W_FB1_21->name+18)='u';
			                       *(FCNN_2L_W_FB1_21->name+19)='l';
			                       *(FCNN_2L_W_FB1_21->name+20)='l';
			                       *(FCNN_2L_W_FB1_21->name+21)='y';
			                       *(FCNN_2L_W_FB1_21->name+22)='_';
			                       *(FCNN_2L_W_FB1_21->name+23)='C';
			                       *(FCNN_2L_W_FB1_21->name+24)='o';
			                       *(FCNN_2L_W_FB1_21->name+25)='n';
			                       *(FCNN_2L_W_FB1_21->name+26)='n';
			                       *(FCNN_2L_W_FB1_21->name+27)='e';
			                       *(FCNN_2L_W_FB1_21->name+28)='c';
			                       *(FCNN_2L_W_FB1_21->name+29)='t';
			                       *(FCNN_2L_W_FB1_21->name+30)='e';
			                       *(FCNN_2L_W_FB1_21->name+31)='d';
			                       *(FCNN_2L_W_FB1_21->name+32)='_';
			                       *(FCNN_2L_W_FB1_21->name+33)='N';
			                       *(FCNN_2L_W_FB1_21->name+34)='N';
			                       *(FCNN_2L_W_FB1_21->name+35)='_';
			                       *(FCNN_2L_W_FB1_21->name+36)='2';
			                       *(FCNN_2L_W_FB1_21->name+37)='_';
			                       *(FCNN_2L_W_FB1_21->name+38)='L';
			                       *(FCNN_2L_W_FB1_21->name+39)='a';
			                       *(FCNN_2L_W_FB1_21->name+40)='y';
			                       *(FCNN_2L_W_FB1_21->name+41)='e';
			                       *(FCNN_2L_W_FB1_21->name+42)='r';
			                       *(FCNN_2L_W_FB1_21->name+43)='s';
			                       *(FCNN_2L_W_FB1_21->name+44)='_';
			                       *(FCNN_2L_W_FB1_21->name+45)='r';
			                       *(FCNN_2L_W_FB1_21->name+46)='e';
			                       *(FCNN_2L_W_FB1_21->name+47)='c';
			                       *(FCNN_2L_W_FB1_21->name+48)='e';
			                       *(FCNN_2L_W_FB1_21->name+49)='i';
			                       *(FCNN_2L_W_FB1_21->name+50)='v';
			                       *(FCNN_2L_W_FB1_21->name+51)='i';
			                       *(FCNN_2L_W_FB1_21->name+52)='n';
			                       *(FCNN_2L_W_FB1_21->name+53)='g';
			                       *(FCNN_2L_W_FB1_21->name+54)='_';
			                       *(FCNN_2L_W_FB1_21->name+55)='i';
			                       *(FCNN_2L_W_FB1_21->name+56)='n';
			                       *(FCNN_2L_W_FB1_21->name+57)='p';
			                       *(FCNN_2L_W_FB1_21->name+58)='u';
			                       *(FCNN_2L_W_FB1_21->name+59)='t';
			                       *(FCNN_2L_W_FB1_21->name+60)='_';
			                       *(FCNN_2L_W_FB1_21->name+61)='t';
			                       *(FCNN_2L_W_FB1_21->name+62)='h';
			                       *(FCNN_2L_W_FB1_21->name+63)='r';
			                       *(FCNN_2L_W_FB1_21->name+64)='o';
			                       *(FCNN_2L_W_FB1_21->name+65)='u';
			                       *(FCNN_2L_W_FB1_21->name+66)='g';
			                       *(FCNN_2L_W_FB1_21->name+67)='h';
			                       *(FCNN_2L_W_FB1_21->name+68)='_';
			                       *(FCNN_2L_W_FB1_21->name+69)='W';
			                       *(FCNN_2L_W_FB1_21->name+70)='i';
			                       *(FCNN_2L_W_FB1_21->name+71)='n';
			                       *(FCNN_2L_W_FB1_21->name+72)='d';
			                       *(FCNN_2L_W_FB1_21->name+73)='o';
			                       *(FCNN_2L_W_FB1_21->name+74)='w';
			                       *(FCNN_2L_W_FB1_21->name+75)='_';
			                       *(FCNN_2L_W_FB1_21->name+76)='f';
			                       *(FCNN_2L_W_FB1_21->name+77)='e';
			                       *(FCNN_2L_W_FB1_21->name+78)='e';
			                       *(FCNN_2L_W_FB1_21->name+79)='d';
			                       *(FCNN_2L_W_FB1_21->name+80)='b';
			                       *(FCNN_2L_W_FB1_21->name+81)='a';
			                       *(FCNN_2L_W_FB1_21->name+82)='c';
			                       *(FCNN_2L_W_FB1_21->name+83)='k';
			                       *(FCNN_2L_W_FB1_21->name+84)='_';
			                       *(FCNN_2L_W_FB1_21->name+85)='2';
			                       *(FCNN_2L_W_FB1_21->name+86)='>';
			                       *(FCNN_2L_W_FB1_21->name+87)='1';
			                       *(FCNN_2L_W_FB1_21->name+88)=')';
			                       *(FCNN_2L_W_FB1_21->name+89)=' ';
			                       FCNN_2L_W_FB1_21->number_of_Levels=2;
			                       FCNN_2L_W_FB1_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_21->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_21->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_21->number_of_Levels);
			                       *(FCNN_2L_W_FB1_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_21->recurrence=T;
			                       FCNN_2L_W_FB1_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_FB1_21->source=MAI((long int)FCNN_2L_W_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_21->source+0)=2;
			                       FCNN_2L_W_FB1_21->destination=MAI((long int)FCNN_2L_W_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_21->destination+0)=1;
			                       FCNN_2L_W_FB1_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->create_neuron==0) exit_handling(77,1); 
			                       *(FCNN_2L_W_FB1_21->create_neuron+0)=create_FCNN_2L_FB1_21;
			                       FCNN_2L_W_FB1_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_21->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->node_linear_output==0) exit_handling(77,2);
			                       *(FCNN_2L_W_FB1_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->node_output==0) exit_handling(77,3);
			                       *(FCNN_2L_W_FB1_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->node_output_derivation==0) exit_handling(77,4);
			                       *(FCNN_2L_W_FB1_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_21->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->firing_neuron==0) exit_handling(77,5);
			                       *(FCNN_2L_W_FB1_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_W_FB1_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_W_FB1_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21->create_learning_algorithm==0) exit_handling(77,6);
			                       *(FCNN_2L_W_FB1_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_21);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_22_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_22_11;
			                       FCNN_2L_W_FB1_22_11=MANTD((long int)1);
			                       FCNN_2L_W_FB1_22_11->name=MAC((long int)101);
			                       *(FCNN_2L_W_FB1_22_11->name+0)='F';
			                       *(FCNN_2L_W_FB1_22_11->name+1)='C';
			                       *(FCNN_2L_W_FB1_22_11->name+2)='N';
			                       *(FCNN_2L_W_FB1_22_11->name+3)='N';
			                       *(FCNN_2L_W_FB1_22_11->name+4)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+5)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+6)='L';
			                       *(FCNN_2L_W_FB1_22_11->name+7)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+8)='W';
			                       *(FCNN_2L_W_FB1_22_11->name+9)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+10)='F';
			                       *(FCNN_2L_W_FB1_22_11->name+11)='B';
			                       *(FCNN_2L_W_FB1_22_11->name+12)='1';
			                       *(FCNN_2L_W_FB1_22_11->name+13)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+14)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+15)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+16)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+17)='1';
			                       *(FCNN_2L_W_FB1_22_11->name+18)='1';
			                       *(FCNN_2L_W_FB1_22_11->name+19)='(';
			                       *(FCNN_2L_W_FB1_22_11->name+20)='F';
			                       *(FCNN_2L_W_FB1_22_11->name+21)='u';
			                       *(FCNN_2L_W_FB1_22_11->name+22)='l';
			                       *(FCNN_2L_W_FB1_22_11->name+23)='l';
			                       *(FCNN_2L_W_FB1_22_11->name+24)='y';
			                       *(FCNN_2L_W_FB1_22_11->name+25)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+26)='C';
			                       *(FCNN_2L_W_FB1_22_11->name+27)='o';
			                       *(FCNN_2L_W_FB1_22_11->name+28)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+29)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+30)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+31)='c';
			                       *(FCNN_2L_W_FB1_22_11->name+32)='t';
			                       *(FCNN_2L_W_FB1_22_11->name+33)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+34)='d';
			                       *(FCNN_2L_W_FB1_22_11->name+35)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+36)='N';
			                       *(FCNN_2L_W_FB1_22_11->name+37)='N';
			                       *(FCNN_2L_W_FB1_22_11->name+38)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+39)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+40)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+41)='L';
			                       *(FCNN_2L_W_FB1_22_11->name+42)='a';
			                       *(FCNN_2L_W_FB1_22_11->name+43)='y';
			                       *(FCNN_2L_W_FB1_22_11->name+44)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+45)='r';
			                       *(FCNN_2L_W_FB1_22_11->name+46)='s';
			                       *(FCNN_2L_W_FB1_22_11->name+47)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+48)='r';
			                       *(FCNN_2L_W_FB1_22_11->name+49)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+50)='c';
			                       *(FCNN_2L_W_FB1_22_11->name+51)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+52)='i';
			                       *(FCNN_2L_W_FB1_22_11->name+53)='v';
			                       *(FCNN_2L_W_FB1_22_11->name+54)='i';
			                       *(FCNN_2L_W_FB1_22_11->name+55)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+56)='g';
			                       *(FCNN_2L_W_FB1_22_11->name+57)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+58)='i';
			                       *(FCNN_2L_W_FB1_22_11->name+59)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+60)='p';
			                       *(FCNN_2L_W_FB1_22_11->name+61)='u';
			                       *(FCNN_2L_W_FB1_22_11->name+62)='t';
			                       *(FCNN_2L_W_FB1_22_11->name+63)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+64)='t';
			                       *(FCNN_2L_W_FB1_22_11->name+65)='h';
			                       *(FCNN_2L_W_FB1_22_11->name+66)='r';
			                       *(FCNN_2L_W_FB1_22_11->name+67)='o';
			                       *(FCNN_2L_W_FB1_22_11->name+68)='u';
			                       *(FCNN_2L_W_FB1_22_11->name+69)='g';
			                       *(FCNN_2L_W_FB1_22_11->name+70)='h';
			                       *(FCNN_2L_W_FB1_22_11->name+71)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+72)='W';
			                       *(FCNN_2L_W_FB1_22_11->name+73)='i';
			                       *(FCNN_2L_W_FB1_22_11->name+74)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+75)='d';
			                       *(FCNN_2L_W_FB1_22_11->name+76)='o';
			                       *(FCNN_2L_W_FB1_22_11->name+77)='w';
			                       *(FCNN_2L_W_FB1_22_11->name+78)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+79)='f';
			                       *(FCNN_2L_W_FB1_22_11->name+80)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+81)='e';
			                       *(FCNN_2L_W_FB1_22_11->name+82)='d';
			                       *(FCNN_2L_W_FB1_22_11->name+83)='b';
			                       *(FCNN_2L_W_FB1_22_11->name+84)='a';
			                       *(FCNN_2L_W_FB1_22_11->name+85)='c';
			                       *(FCNN_2L_W_FB1_22_11->name+86)='k';
			                       *(FCNN_2L_W_FB1_22_11->name+87)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+88)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+89)='>';
			                       *(FCNN_2L_W_FB1_22_11->name+90)='2';
			                       *(FCNN_2L_W_FB1_22_11->name+91)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+92)='a';
			                       *(FCNN_2L_W_FB1_22_11->name+93)='n';
			                       *(FCNN_2L_W_FB1_22_11->name+94)='d';
			                       *(FCNN_2L_W_FB1_22_11->name+95)='_';
			                       *(FCNN_2L_W_FB1_22_11->name+96)='1';
			                       *(FCNN_2L_W_FB1_22_11->name+97)='>';
			                       *(FCNN_2L_W_FB1_22_11->name+98)='1';
			                       *(FCNN_2L_W_FB1_22_11->name+99)=')';
			                       *(FCNN_2L_W_FB1_22_11->name+100)=' ';
			                       FCNN_2L_W_FB1_22_11->number_of_Levels=2;
			                       FCNN_2L_W_FB1_22_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_22_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_22_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_22_11->number_of_Levels);
			                       *(FCNN_2L_W_FB1_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_22_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_22_11->recurrence=T;
			                       FCNN_2L_W_FB1_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FB1_22_11->source=MAI((long int)FCNN_2L_W_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_11->source+0)=2;
			                       *(FCNN_2L_W_FB1_22_11->source+1)=1;
			                       FCNN_2L_W_FB1_22_11->destination=MAI((long int)FCNN_2L_W_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_11->destination+0)=2;
			                       *(FCNN_2L_W_FB1_22_11->destination+1)=1;
			                       FCNN_2L_W_FB1_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->create_neuron==0) exit_handling(78,1); 
			                       *(FCNN_2L_W_FB1_22_11->create_neuron+0)=create_FCNN_2L_FB1_22_11;
			                       FCNN_2L_W_FB1_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_22_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_22_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->node_linear_output==0) exit_handling(78,2);
			                       *(FCNN_2L_W_FB1_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->node_output==0) exit_handling(78,3);
			                       *(FCNN_2L_W_FB1_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->node_output_derivation==0) exit_handling(78,4);
			                       *(FCNN_2L_W_FB1_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_22_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->firing_neuron==0) exit_handling(78,5);
			                       *(FCNN_2L_W_FB1_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_11->create_learning_algorithm==0) exit_handling(78,6);
			                       *(FCNN_2L_W_FB1_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_22_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_21_11;
			                       FCNN_2L_W_FB1_21_11=MANTD((long int)1);
			                       FCNN_2L_W_FB1_21_11->name=MAC((long int)101);
			                       *(FCNN_2L_W_FB1_21_11->name+0)='F';
			                       *(FCNN_2L_W_FB1_21_11->name+1)='C';
			                       *(FCNN_2L_W_FB1_21_11->name+2)='N';
			                       *(FCNN_2L_W_FB1_21_11->name+3)='N';
			                       *(FCNN_2L_W_FB1_21_11->name+4)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+5)='2';
			                       *(FCNN_2L_W_FB1_21_11->name+6)='L';
			                       *(FCNN_2L_W_FB1_21_11->name+7)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+8)='W';
			                       *(FCNN_2L_W_FB1_21_11->name+9)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+10)='F';
			                       *(FCNN_2L_W_FB1_21_11->name+11)='B';
			                       *(FCNN_2L_W_FB1_21_11->name+12)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+13)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+14)='2';
			                       *(FCNN_2L_W_FB1_21_11->name+15)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+16)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+17)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+18)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+19)='(';
			                       *(FCNN_2L_W_FB1_21_11->name+20)='F';
			                       *(FCNN_2L_W_FB1_21_11->name+21)='u';
			                       *(FCNN_2L_W_FB1_21_11->name+22)='l';
			                       *(FCNN_2L_W_FB1_21_11->name+23)='l';
			                       *(FCNN_2L_W_FB1_21_11->name+24)='y';
			                       *(FCNN_2L_W_FB1_21_11->name+25)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+26)='C';
			                       *(FCNN_2L_W_FB1_21_11->name+27)='o';
			                       *(FCNN_2L_W_FB1_21_11->name+28)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+29)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+30)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+31)='c';
			                       *(FCNN_2L_W_FB1_21_11->name+32)='t';
			                       *(FCNN_2L_W_FB1_21_11->name+33)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+34)='d';
			                       *(FCNN_2L_W_FB1_21_11->name+35)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+36)='N';
			                       *(FCNN_2L_W_FB1_21_11->name+37)='N';
			                       *(FCNN_2L_W_FB1_21_11->name+38)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+39)='2';
			                       *(FCNN_2L_W_FB1_21_11->name+40)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+41)='L';
			                       *(FCNN_2L_W_FB1_21_11->name+42)='a';
			                       *(FCNN_2L_W_FB1_21_11->name+43)='y';
			                       *(FCNN_2L_W_FB1_21_11->name+44)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+45)='r';
			                       *(FCNN_2L_W_FB1_21_11->name+46)='s';
			                       *(FCNN_2L_W_FB1_21_11->name+47)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+48)='r';
			                       *(FCNN_2L_W_FB1_21_11->name+49)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+50)='c';
			                       *(FCNN_2L_W_FB1_21_11->name+51)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+52)='i';
			                       *(FCNN_2L_W_FB1_21_11->name+53)='v';
			                       *(FCNN_2L_W_FB1_21_11->name+54)='i';
			                       *(FCNN_2L_W_FB1_21_11->name+55)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+56)='g';
			                       *(FCNN_2L_W_FB1_21_11->name+57)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+58)='i';
			                       *(FCNN_2L_W_FB1_21_11->name+59)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+60)='p';
			                       *(FCNN_2L_W_FB1_21_11->name+61)='u';
			                       *(FCNN_2L_W_FB1_21_11->name+62)='t';
			                       *(FCNN_2L_W_FB1_21_11->name+63)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+64)='t';
			                       *(FCNN_2L_W_FB1_21_11->name+65)='h';
			                       *(FCNN_2L_W_FB1_21_11->name+66)='r';
			                       *(FCNN_2L_W_FB1_21_11->name+67)='o';
			                       *(FCNN_2L_W_FB1_21_11->name+68)='u';
			                       *(FCNN_2L_W_FB1_21_11->name+69)='g';
			                       *(FCNN_2L_W_FB1_21_11->name+70)='h';
			                       *(FCNN_2L_W_FB1_21_11->name+71)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+72)='W';
			                       *(FCNN_2L_W_FB1_21_11->name+73)='i';
			                       *(FCNN_2L_W_FB1_21_11->name+74)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+75)='d';
			                       *(FCNN_2L_W_FB1_21_11->name+76)='o';
			                       *(FCNN_2L_W_FB1_21_11->name+77)='w';
			                       *(FCNN_2L_W_FB1_21_11->name+78)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+79)='f';
			                       *(FCNN_2L_W_FB1_21_11->name+80)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+81)='e';
			                       *(FCNN_2L_W_FB1_21_11->name+82)='d';
			                       *(FCNN_2L_W_FB1_21_11->name+83)='b';
			                       *(FCNN_2L_W_FB1_21_11->name+84)='a';
			                       *(FCNN_2L_W_FB1_21_11->name+85)='c';
			                       *(FCNN_2L_W_FB1_21_11->name+86)='k';
			                       *(FCNN_2L_W_FB1_21_11->name+87)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+88)='2';
			                       *(FCNN_2L_W_FB1_21_11->name+89)='>';
			                       *(FCNN_2L_W_FB1_21_11->name+90)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+91)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+92)='a';
			                       *(FCNN_2L_W_FB1_21_11->name+93)='n';
			                       *(FCNN_2L_W_FB1_21_11->name+94)='d';
			                       *(FCNN_2L_W_FB1_21_11->name+95)='_';
			                       *(FCNN_2L_W_FB1_21_11->name+96)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+97)='>';
			                       *(FCNN_2L_W_FB1_21_11->name+98)='1';
			                       *(FCNN_2L_W_FB1_21_11->name+99)=')';
			                       *(FCNN_2L_W_FB1_21_11->name+100)=' ';
			                       FCNN_2L_W_FB1_21_11->number_of_Levels=2;
			                       FCNN_2L_W_FB1_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_21_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_21_11->number_of_Levels);
			                       *(FCNN_2L_W_FB1_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_21_11->recurrence=T;
			                       FCNN_2L_W_FB1_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FB1_21_11->source=MAI((long int)FCNN_2L_W_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_21_11->source+0)=2;
			                       *(FCNN_2L_W_FB1_21_11->source+1)=1;
			                       FCNN_2L_W_FB1_21_11->destination=MAI((long int)FCNN_2L_W_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_21_11->destination+0)=1;
			                       *(FCNN_2L_W_FB1_21_11->destination+1)=1;
			                       FCNN_2L_W_FB1_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->create_neuron==0) exit_handling(79,1); 
			                       *(FCNN_2L_W_FB1_21_11->create_neuron+0)=create_FCNN_2L_FB1_21_11;
			                       FCNN_2L_W_FB1_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->node_linear_output==0) exit_handling(79,2);
			                       *(FCNN_2L_W_FB1_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->node_output==0) exit_handling(79,3);
			                       *(FCNN_2L_W_FB1_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->node_output_derivation==0) exit_handling(79,4);
			                       *(FCNN_2L_W_FB1_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->firing_neuron==0) exit_handling(79,5);
			                       *(FCNN_2L_W_FB1_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_21_11->create_learning_algorithm==0) exit_handling(79,6);
			                       *(FCNN_2L_W_FB1_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_21_11);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_22_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_22_21;
			                       FCNN_2L_W_FB1_22_21=MANTD((long int)1);
			                       FCNN_2L_W_FB1_22_21->name=MAC((long int)101);
			                       *(FCNN_2L_W_FB1_22_21->name+0)='F';
			                       *(FCNN_2L_W_FB1_22_21->name+1)='C';
			                       *(FCNN_2L_W_FB1_22_21->name+2)='N';
			                       *(FCNN_2L_W_FB1_22_21->name+3)='N';
			                       *(FCNN_2L_W_FB1_22_21->name+4)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+5)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+6)='L';
			                       *(FCNN_2L_W_FB1_22_21->name+7)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+8)='W';
			                       *(FCNN_2L_W_FB1_22_21->name+9)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+10)='F';
			                       *(FCNN_2L_W_FB1_22_21->name+11)='B';
			                       *(FCNN_2L_W_FB1_22_21->name+12)='1';
			                       *(FCNN_2L_W_FB1_22_21->name+13)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+14)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+15)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+16)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+17)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+18)='1';
			                       *(FCNN_2L_W_FB1_22_21->name+19)='(';
			                       *(FCNN_2L_W_FB1_22_21->name+20)='F';
			                       *(FCNN_2L_W_FB1_22_21->name+21)='u';
			                       *(FCNN_2L_W_FB1_22_21->name+22)='l';
			                       *(FCNN_2L_W_FB1_22_21->name+23)='l';
			                       *(FCNN_2L_W_FB1_22_21->name+24)='y';
			                       *(FCNN_2L_W_FB1_22_21->name+25)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+26)='C';
			                       *(FCNN_2L_W_FB1_22_21->name+27)='o';
			                       *(FCNN_2L_W_FB1_22_21->name+28)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+29)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+30)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+31)='c';
			                       *(FCNN_2L_W_FB1_22_21->name+32)='t';
			                       *(FCNN_2L_W_FB1_22_21->name+33)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+34)='d';
			                       *(FCNN_2L_W_FB1_22_21->name+35)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+36)='N';
			                       *(FCNN_2L_W_FB1_22_21->name+37)='N';
			                       *(FCNN_2L_W_FB1_22_21->name+38)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+39)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+40)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+41)='L';
			                       *(FCNN_2L_W_FB1_22_21->name+42)='a';
			                       *(FCNN_2L_W_FB1_22_21->name+43)='y';
			                       *(FCNN_2L_W_FB1_22_21->name+44)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+45)='r';
			                       *(FCNN_2L_W_FB1_22_21->name+46)='s';
			                       *(FCNN_2L_W_FB1_22_21->name+47)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+48)='r';
			                       *(FCNN_2L_W_FB1_22_21->name+49)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+50)='c';
			                       *(FCNN_2L_W_FB1_22_21->name+51)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+52)='i';
			                       *(FCNN_2L_W_FB1_22_21->name+53)='v';
			                       *(FCNN_2L_W_FB1_22_21->name+54)='i';
			                       *(FCNN_2L_W_FB1_22_21->name+55)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+56)='g';
			                       *(FCNN_2L_W_FB1_22_21->name+57)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+58)='i';
			                       *(FCNN_2L_W_FB1_22_21->name+59)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+60)='p';
			                       *(FCNN_2L_W_FB1_22_21->name+61)='u';
			                       *(FCNN_2L_W_FB1_22_21->name+62)='t';
			                       *(FCNN_2L_W_FB1_22_21->name+63)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+64)='t';
			                       *(FCNN_2L_W_FB1_22_21->name+65)='h';
			                       *(FCNN_2L_W_FB1_22_21->name+66)='r';
			                       *(FCNN_2L_W_FB1_22_21->name+67)='o';
			                       *(FCNN_2L_W_FB1_22_21->name+68)='u';
			                       *(FCNN_2L_W_FB1_22_21->name+69)='g';
			                       *(FCNN_2L_W_FB1_22_21->name+70)='h';
			                       *(FCNN_2L_W_FB1_22_21->name+71)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+72)='W';
			                       *(FCNN_2L_W_FB1_22_21->name+73)='i';
			                       *(FCNN_2L_W_FB1_22_21->name+74)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+75)='d';
			                       *(FCNN_2L_W_FB1_22_21->name+76)='o';
			                       *(FCNN_2L_W_FB1_22_21->name+77)='w';
			                       *(FCNN_2L_W_FB1_22_21->name+78)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+79)='f';
			                       *(FCNN_2L_W_FB1_22_21->name+80)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+81)='e';
			                       *(FCNN_2L_W_FB1_22_21->name+82)='d';
			                       *(FCNN_2L_W_FB1_22_21->name+83)='b';
			                       *(FCNN_2L_W_FB1_22_21->name+84)='a';
			                       *(FCNN_2L_W_FB1_22_21->name+85)='c';
			                       *(FCNN_2L_W_FB1_22_21->name+86)='k';
			                       *(FCNN_2L_W_FB1_22_21->name+87)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+88)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+89)='>';
			                       *(FCNN_2L_W_FB1_22_21->name+90)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+91)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+92)='a';
			                       *(FCNN_2L_W_FB1_22_21->name+93)='n';
			                       *(FCNN_2L_W_FB1_22_21->name+94)='d';
			                       *(FCNN_2L_W_FB1_22_21->name+95)='_';
			                       *(FCNN_2L_W_FB1_22_21->name+96)='2';
			                       *(FCNN_2L_W_FB1_22_21->name+97)='>';
			                       *(FCNN_2L_W_FB1_22_21->name+98)='1';
			                       *(FCNN_2L_W_FB1_22_21->name+99)=')';
			                       *(FCNN_2L_W_FB1_22_21->name+100)=' ';
			                       FCNN_2L_W_FB1_22_21->number_of_Levels=2;
			                       FCNN_2L_W_FB1_22_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_22_21->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_22_21->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_22_21->number_of_Levels);
			                       *(FCNN_2L_W_FB1_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_22_21->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_22_21->recurrence=T;
			                       FCNN_2L_W_FB1_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_FB1_22_21->source=MAI((long int)FCNN_2L_W_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_21->source+0)=2;
			                       *(FCNN_2L_W_FB1_22_21->source+1)=2;
			                       FCNN_2L_W_FB1_22_21->destination=MAI((long int)FCNN_2L_W_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_21->destination+0)=2;
			                       *(FCNN_2L_W_FB1_22_21->destination+1)=1;
			                       FCNN_2L_W_FB1_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->create_neuron==0) exit_handling(80,1); 
			                       *(FCNN_2L_W_FB1_22_21->create_neuron+0)=create_FCNN_2L_FB1_22_21;
			                       FCNN_2L_W_FB1_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_22_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_22_21->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->node_linear_output==0) exit_handling(80,2);
			                       *(FCNN_2L_W_FB1_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->node_output==0) exit_handling(80,3);
			                       *(FCNN_2L_W_FB1_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->node_output_derivation==0) exit_handling(80,4);
			                       *(FCNN_2L_W_FB1_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_22_21->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->firing_neuron==0) exit_handling(80,5);
			                       *(FCNN_2L_W_FB1_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21->create_learning_algorithm==0) exit_handling(80,6);
			                       *(FCNN_2L_W_FB1_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_22_21);
			                      } /* ; */

/* setting up FCNN_2L_W_FB1_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_FB1_22_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radius, and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_FB1_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_FB1_22_21_11;
			                       FCNN_2L_W_FB1_22_21_11=MANTD((long int)1);
			                       FCNN_2L_W_FB1_22_21_11->name=MAC((long int)112);
			                       *(FCNN_2L_W_FB1_22_21_11->name+0)='F';
			                       *(FCNN_2L_W_FB1_22_21_11->name+1)='C';
			                       *(FCNN_2L_W_FB1_22_21_11->name+2)='N';
			                       *(FCNN_2L_W_FB1_22_21_11->name+3)='N';
			                       *(FCNN_2L_W_FB1_22_21_11->name+4)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+5)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+6)='L';
			                       *(FCNN_2L_W_FB1_22_21_11->name+7)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+8)='W';
			                       *(FCNN_2L_W_FB1_22_21_11->name+9)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+10)='F';
			                       *(FCNN_2L_W_FB1_22_21_11->name+11)='B';
			                       *(FCNN_2L_W_FB1_22_21_11->name+12)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+13)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+14)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+15)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+16)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+17)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+18)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+19)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+20)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+21)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+22)='(';
			                       *(FCNN_2L_W_FB1_22_21_11->name+23)='F';
			                       *(FCNN_2L_W_FB1_22_21_11->name+24)='u';
			                       *(FCNN_2L_W_FB1_22_21_11->name+25)='l';
			                       *(FCNN_2L_W_FB1_22_21_11->name+26)='l';
			                       *(FCNN_2L_W_FB1_22_21_11->name+27)='y';
			                       *(FCNN_2L_W_FB1_22_21_11->name+28)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+29)='C';
			                       *(FCNN_2L_W_FB1_22_21_11->name+30)='o';
			                       *(FCNN_2L_W_FB1_22_21_11->name+31)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+32)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+33)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+34)='c';
			                       *(FCNN_2L_W_FB1_22_21_11->name+35)='t';
			                       *(FCNN_2L_W_FB1_22_21_11->name+36)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+37)='d';
			                       *(FCNN_2L_W_FB1_22_21_11->name+38)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+39)='N';
			                       *(FCNN_2L_W_FB1_22_21_11->name+40)='N';
			                       *(FCNN_2L_W_FB1_22_21_11->name+41)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+42)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+43)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+44)='L';
			                       *(FCNN_2L_W_FB1_22_21_11->name+45)='a';
			                       *(FCNN_2L_W_FB1_22_21_11->name+46)='y';
			                       *(FCNN_2L_W_FB1_22_21_11->name+47)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+48)='r';
			                       *(FCNN_2L_W_FB1_22_21_11->name+49)='s';
			                       *(FCNN_2L_W_FB1_22_21_11->name+50)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+51)='r';
			                       *(FCNN_2L_W_FB1_22_21_11->name+52)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+53)='c';
			                       *(FCNN_2L_W_FB1_22_21_11->name+54)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+55)='i';
			                       *(FCNN_2L_W_FB1_22_21_11->name+56)='v';
			                       *(FCNN_2L_W_FB1_22_21_11->name+57)='i';
			                       *(FCNN_2L_W_FB1_22_21_11->name+58)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+59)='g';
			                       *(FCNN_2L_W_FB1_22_21_11->name+60)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+61)='i';
			                       *(FCNN_2L_W_FB1_22_21_11->name+62)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+63)='p';
			                       *(FCNN_2L_W_FB1_22_21_11->name+64)='u';
			                       *(FCNN_2L_W_FB1_22_21_11->name+65)='t';
			                       *(FCNN_2L_W_FB1_22_21_11->name+66)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+67)='t';
			                       *(FCNN_2L_W_FB1_22_21_11->name+68)='h';
			                       *(FCNN_2L_W_FB1_22_21_11->name+69)='r';
			                       *(FCNN_2L_W_FB1_22_21_11->name+70)='o';
			                       *(FCNN_2L_W_FB1_22_21_11->name+71)='u';
			                       *(FCNN_2L_W_FB1_22_21_11->name+72)='g';
			                       *(FCNN_2L_W_FB1_22_21_11->name+73)='h';
			                       *(FCNN_2L_W_FB1_22_21_11->name+74)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+75)='W';
			                       *(FCNN_2L_W_FB1_22_21_11->name+76)='i';
			                       *(FCNN_2L_W_FB1_22_21_11->name+77)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+78)='d';
			                       *(FCNN_2L_W_FB1_22_21_11->name+79)='o';
			                       *(FCNN_2L_W_FB1_22_21_11->name+80)='w';
			                       *(FCNN_2L_W_FB1_22_21_11->name+81)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+82)='f';
			                       *(FCNN_2L_W_FB1_22_21_11->name+83)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+84)='e';
			                       *(FCNN_2L_W_FB1_22_21_11->name+85)='d';
			                       *(FCNN_2L_W_FB1_22_21_11->name+86)='b';
			                       *(FCNN_2L_W_FB1_22_21_11->name+87)='a';
			                       *(FCNN_2L_W_FB1_22_21_11->name+88)='c';
			                       *(FCNN_2L_W_FB1_22_21_11->name+89)='k';
			                       *(FCNN_2L_W_FB1_22_21_11->name+90)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+91)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+92)='>';
			                       *(FCNN_2L_W_FB1_22_21_11->name+93)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+94)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+95)='a';
			                       *(FCNN_2L_W_FB1_22_21_11->name+96)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+97)='d';
			                       *(FCNN_2L_W_FB1_22_21_11->name+98)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+99)='2';
			                       *(FCNN_2L_W_FB1_22_21_11->name+100)='>';
			                       *(FCNN_2L_W_FB1_22_21_11->name+101)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+102)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+103)='a';
			                       *(FCNN_2L_W_FB1_22_21_11->name+104)='n';
			                       *(FCNN_2L_W_FB1_22_21_11->name+105)='d';
			                       *(FCNN_2L_W_FB1_22_21_11->name+106)='_';
			                       *(FCNN_2L_W_FB1_22_21_11->name+107)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+108)='>';
			                       *(FCNN_2L_W_FB1_22_21_11->name+109)='1';
			                       *(FCNN_2L_W_FB1_22_21_11->name+110)=')';
			                       *(FCNN_2L_W_FB1_22_21_11->name+111)=' ';
			                       FCNN_2L_W_FB1_22_21_11->number_of_Levels=2;
			                       FCNN_2L_W_FB1_22_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_FB1_22_21_11->prepare_input()) as well from feedback */
			                       FCNN_2L_W_FB1_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_FB1_22_21_11->number_of_Levels);
			                       *(FCNN_2L_W_FB1_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_FB1_22_21_11->nodes_per_Level+1)=0; /* means there is the same number of nodes in the 2nd Level as there are inputs */
			                       FCNN_2L_W_FB1_22_21_11->recurrence=T;
			                       FCNN_2L_W_FB1_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_W_FB1_22_21_11->source=MAI((long int)FCNN_2L_W_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_21_11->source+0)=2;
			                       *(FCNN_2L_W_FB1_22_21_11->source+1)=2;
			                       *(FCNN_2L_W_FB1_22_21_11->source+2)=1;
			                       FCNN_2L_W_FB1_22_21_11->destination=MAI((long int)FCNN_2L_W_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_FB1_22_21_11->destination+0)=2;
			                       *(FCNN_2L_W_FB1_22_21_11->destination+1)=1;
			                       *(FCNN_2L_W_FB1_22_21_11->destination+2)=1;
			                       FCNN_2L_W_FB1_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_FB1_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->create_neuron==0) exit_handling(81,1); 
			                       *(FCNN_2L_W_FB1_22_21_11->create_neuron+0)=create_FCNN_2L_FB1_22_21_11;
			                       FCNN_2L_W_FB1_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_FB1_22_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_FB1_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_FB1_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->node_linear_output==0) exit_handling(81,2);
			                       *(FCNN_2L_W_FB1_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_FB1_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_FB1_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_FB1_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->node_output==0) exit_handling(81,3);
			                       *(FCNN_2L_W_FB1_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_FB1_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->node_output_derivation==0) exit_handling(81,4);
			                       *(FCNN_2L_W_FB1_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_FB1_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_FB1_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_FB1_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->firing_neuron==0) exit_handling(81,5);
			                       *(FCNN_2L_W_FB1_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_FB1_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_FB1_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_FB1_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_FB1_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_FB1_22_21_11->create_learning_algorithm==0) exit_handling(81,6);
			                       *(FCNN_2L_W_FB1_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_FB1_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_FB1_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_1out_FB1_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_11;
			                       FCNN_2L_1out_FB1_11=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_11->name=MAC((long int)71);
			                       *(FCNN_2L_1out_FB1_11->name+0)='F';
			                       *(FCNN_2L_1out_FB1_11->name+1)='C';
			                       *(FCNN_2L_1out_FB1_11->name+2)='N';
			                       *(FCNN_2L_1out_FB1_11->name+3)='N';
			                       *(FCNN_2L_1out_FB1_11->name+4)='_';
			                       *(FCNN_2L_1out_FB1_11->name+5)='2';
			                       *(FCNN_2L_1out_FB1_11->name+6)='L';
			                       *(FCNN_2L_1out_FB1_11->name+7)='_';
			                       *(FCNN_2L_1out_FB1_11->name+8)='1';
			                       *(FCNN_2L_1out_FB1_11->name+9)='o';
			                       *(FCNN_2L_1out_FB1_11->name+10)='u';
			                       *(FCNN_2L_1out_FB1_11->name+11)='t';
			                       *(FCNN_2L_1out_FB1_11->name+12)='_';
			                       *(FCNN_2L_1out_FB1_11->name+13)='F';
			                       *(FCNN_2L_1out_FB1_11->name+14)='B';
			                       *(FCNN_2L_1out_FB1_11->name+15)='1';
			                       *(FCNN_2L_1out_FB1_11->name+16)='_';
			                       *(FCNN_2L_1out_FB1_11->name+17)='1';
			                       *(FCNN_2L_1out_FB1_11->name+18)='1';
			                       *(FCNN_2L_1out_FB1_11->name+19)='(';
			                       *(FCNN_2L_1out_FB1_11->name+20)='F';
			                       *(FCNN_2L_1out_FB1_11->name+21)='u';
			                       *(FCNN_2L_1out_FB1_11->name+22)='l';
			                       *(FCNN_2L_1out_FB1_11->name+23)='l';
			                       *(FCNN_2L_1out_FB1_11->name+24)='y';
			                       *(FCNN_2L_1out_FB1_11->name+25)='_';
			                       *(FCNN_2L_1out_FB1_11->name+26)='C';
			                       *(FCNN_2L_1out_FB1_11->name+27)='o';
			                       *(FCNN_2L_1out_FB1_11->name+28)='n';
			                       *(FCNN_2L_1out_FB1_11->name+29)='n';
			                       *(FCNN_2L_1out_FB1_11->name+30)='e';
			                       *(FCNN_2L_1out_FB1_11->name+31)='c';
			                       *(FCNN_2L_1out_FB1_11->name+32)='t';
			                       *(FCNN_2L_1out_FB1_11->name+33)='e';
			                       *(FCNN_2L_1out_FB1_11->name+34)='d';
			                       *(FCNN_2L_1out_FB1_11->name+35)='_';
			                       *(FCNN_2L_1out_FB1_11->name+36)='N';
			                       *(FCNN_2L_1out_FB1_11->name+37)='N';
			                       *(FCNN_2L_1out_FB1_11->name+38)='_';
			                       *(FCNN_2L_1out_FB1_11->name+39)='2';
			                       *(FCNN_2L_1out_FB1_11->name+40)='_';
			                       *(FCNN_2L_1out_FB1_11->name+41)='L';
			                       *(FCNN_2L_1out_FB1_11->name+42)='a';
			                       *(FCNN_2L_1out_FB1_11->name+43)='y';
			                       *(FCNN_2L_1out_FB1_11->name+44)='e';
			                       *(FCNN_2L_1out_FB1_11->name+45)='r';
			                       *(FCNN_2L_1out_FB1_11->name+46)='s';
			                       *(FCNN_2L_1out_FB1_11->name+47)='_';
			                       *(FCNN_2L_1out_FB1_11->name+48)='1';
			                       *(FCNN_2L_1out_FB1_11->name+49)='_';
			                       *(FCNN_2L_1out_FB1_11->name+50)='o';
			                       *(FCNN_2L_1out_FB1_11->name+51)='u';
			                       *(FCNN_2L_1out_FB1_11->name+52)='t';
			                       *(FCNN_2L_1out_FB1_11->name+53)='p';
			                       *(FCNN_2L_1out_FB1_11->name+54)='u';
			                       *(FCNN_2L_1out_FB1_11->name+55)='t';
			                       *(FCNN_2L_1out_FB1_11->name+56)='_';
			                       *(FCNN_2L_1out_FB1_11->name+57)='f';
			                       *(FCNN_2L_1out_FB1_11->name+58)='e';
			                       *(FCNN_2L_1out_FB1_11->name+59)='e';
			                       *(FCNN_2L_1out_FB1_11->name+60)='d';
			                       *(FCNN_2L_1out_FB1_11->name+61)='b';
			                       *(FCNN_2L_1out_FB1_11->name+62)='a';
			                       *(FCNN_2L_1out_FB1_11->name+63)='c';
			                       *(FCNN_2L_1out_FB1_11->name+64)='k';
			                       *(FCNN_2L_1out_FB1_11->name+65)='_';
			                       *(FCNN_2L_1out_FB1_11->name+66)='1';
			                       *(FCNN_2L_1out_FB1_11->name+67)='>';
			                       *(FCNN_2L_1out_FB1_11->name+68)='1';
			                       *(FCNN_2L_1out_FB1_11->name+69)=')';
			                       *(FCNN_2L_1out_FB1_11->name+70)=' ';
			                       FCNN_2L_1out_FB1_11->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FB1_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_11->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_11->recurrence=T;
			                       FCNN_2L_1out_FB1_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FB1_11->source=MAI((long int)FCNN_2L_1out_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_11->source+0)=1;
			                       FCNN_2L_1out_FB1_11->destination=MAI((long int)FCNN_2L_1out_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_11->destination+0)=1;
			                       FCNN_2L_1out_FB1_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->create_neuron==0) exit_handling(82,1); 
			                       *(FCNN_2L_1out_FB1_11->create_neuron+0)=create_FCNN_2L_1out_FB1_11;
			                       FCNN_2L_1out_FB1_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_11->prepare_input=0;
			                       FCNN_2L_1out_FB1_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->node_linear_output==0) exit_handling(82,2);
			                       *(FCNN_2L_1out_FB1_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_11->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_1out_FB1_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->node_output==0) exit_handling(82,3);
			                       *(FCNN_2L_1out_FB1_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->node_output_derivation==0) exit_handling(82,4);
			                       *(FCNN_2L_1out_FB1_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->firing_neuron==0) exit_handling(82,5);
			                       *(FCNN_2L_1out_FB1_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_11->create_learning_algorithm==0) exit_handling(82,6);
			                       *(FCNN_2L_1out_FB1_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_22 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_22;
			                       FCNN_2L_1out_FB1_22=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_22->name=MAC((long int)71);
			                       *(FCNN_2L_1out_FB1_22->name+0)='F';
			                       *(FCNN_2L_1out_FB1_22->name+1)='C';
			                       *(FCNN_2L_1out_FB1_22->name+2)='N';
			                       *(FCNN_2L_1out_FB1_22->name+3)='N';
			                       *(FCNN_2L_1out_FB1_22->name+4)='_';
			                       *(FCNN_2L_1out_FB1_22->name+5)='2';
			                       *(FCNN_2L_1out_FB1_22->name+6)='L';
			                       *(FCNN_2L_1out_FB1_22->name+7)='_';
			                       *(FCNN_2L_1out_FB1_22->name+8)='1';
			                       *(FCNN_2L_1out_FB1_22->name+9)='o';
			                       *(FCNN_2L_1out_FB1_22->name+10)='u';
			                       *(FCNN_2L_1out_FB1_22->name+11)='t';
			                       *(FCNN_2L_1out_FB1_22->name+12)='_';
			                       *(FCNN_2L_1out_FB1_22->name+13)='F';
			                       *(FCNN_2L_1out_FB1_22->name+14)='B';
			                       *(FCNN_2L_1out_FB1_22->name+15)='1';
			                       *(FCNN_2L_1out_FB1_22->name+16)='_';
			                       *(FCNN_2L_1out_FB1_22->name+17)='2';
			                       *(FCNN_2L_1out_FB1_22->name+18)='2';
			                       *(FCNN_2L_1out_FB1_22->name+19)='(';
			                       *(FCNN_2L_1out_FB1_22->name+20)='F';
			                       *(FCNN_2L_1out_FB1_22->name+21)='u';
			                       *(FCNN_2L_1out_FB1_22->name+22)='l';
			                       *(FCNN_2L_1out_FB1_22->name+23)='l';
			                       *(FCNN_2L_1out_FB1_22->name+24)='y';
			                       *(FCNN_2L_1out_FB1_22->name+25)='_';
			                       *(FCNN_2L_1out_FB1_22->name+26)='C';
			                       *(FCNN_2L_1out_FB1_22->name+27)='o';
			                       *(FCNN_2L_1out_FB1_22->name+28)='n';
			                       *(FCNN_2L_1out_FB1_22->name+29)='n';
			                       *(FCNN_2L_1out_FB1_22->name+30)='e';
			                       *(FCNN_2L_1out_FB1_22->name+31)='c';
			                       *(FCNN_2L_1out_FB1_22->name+32)='t';
			                       *(FCNN_2L_1out_FB1_22->name+33)='e';
			                       *(FCNN_2L_1out_FB1_22->name+34)='d';
			                       *(FCNN_2L_1out_FB1_22->name+35)='_';
			                       *(FCNN_2L_1out_FB1_22->name+36)='N';
			                       *(FCNN_2L_1out_FB1_22->name+37)='N';
			                       *(FCNN_2L_1out_FB1_22->name+38)='_';
			                       *(FCNN_2L_1out_FB1_22->name+39)='2';
			                       *(FCNN_2L_1out_FB1_22->name+40)='_';
			                       *(FCNN_2L_1out_FB1_22->name+41)='L';
			                       *(FCNN_2L_1out_FB1_22->name+42)='a';
			                       *(FCNN_2L_1out_FB1_22->name+43)='y';
			                       *(FCNN_2L_1out_FB1_22->name+44)='e';
			                       *(FCNN_2L_1out_FB1_22->name+45)='r';
			                       *(FCNN_2L_1out_FB1_22->name+46)='s';
			                       *(FCNN_2L_1out_FB1_22->name+47)='_';
			                       *(FCNN_2L_1out_FB1_22->name+48)='1';
			                       *(FCNN_2L_1out_FB1_22->name+49)='_';
			                       *(FCNN_2L_1out_FB1_22->name+50)='o';
			                       *(FCNN_2L_1out_FB1_22->name+51)='u';
			                       *(FCNN_2L_1out_FB1_22->name+52)='t';
			                       *(FCNN_2L_1out_FB1_22->name+53)='p';
			                       *(FCNN_2L_1out_FB1_22->name+54)='u';
			                       *(FCNN_2L_1out_FB1_22->name+55)='t';
			                       *(FCNN_2L_1out_FB1_22->name+56)='_';
			                       *(FCNN_2L_1out_FB1_22->name+57)='f';
			                       *(FCNN_2L_1out_FB1_22->name+58)='e';
			                       *(FCNN_2L_1out_FB1_22->name+59)='e';
			                       *(FCNN_2L_1out_FB1_22->name+60)='d';
			                       *(FCNN_2L_1out_FB1_22->name+61)='b';
			                       *(FCNN_2L_1out_FB1_22->name+62)='a';
			                       *(FCNN_2L_1out_FB1_22->name+63)='c';
			                       *(FCNN_2L_1out_FB1_22->name+64)='k';
			                       *(FCNN_2L_1out_FB1_22->name+65)='_';
			                       *(FCNN_2L_1out_FB1_22->name+66)='2';
			                       *(FCNN_2L_1out_FB1_22->name+67)='>';
			                       *(FCNN_2L_1out_FB1_22->name+68)='2';
			                       *(FCNN_2L_1out_FB1_22->name+69)=')';
			                       *(FCNN_2L_1out_FB1_22->name+70)=' ';
			                       FCNN_2L_1out_FB1_22->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_22->inputs_per_first_Level_node=2; /* means all inputs are associated with all 1st Level nodes */
			                       FCNN_2L_1out_FB1_22->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_22->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_22->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_22->recurrence=T;
			                       FCNN_2L_1out_FB1_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FB1_22->source=MAI((long int)FCNN_2L_1out_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22->source+0)=2;
			                       FCNN_2L_1out_FB1_22->destination=MAI((long int)FCNN_2L_1out_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22->destination+0)=2;
			                       FCNN_2L_1out_FB1_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->create_neuron==0) exit_handling(83,1); 
			                       *(FCNN_2L_1out_FB1_22->create_neuron+0)=create_FCNN_2L_1out_FB1_22;
			                       FCNN_2L_1out_FB1_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_22->prepare_input=0;
			                       FCNN_2L_1out_FB1_22->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->node_linear_output==0) exit_handling(83,2);
			                       *(FCNN_2L_1out_FB1_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FB1_22->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_22->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->node_output==0) exit_handling(83,3);
			                       *(FCNN_2L_1out_FB1_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->node_output_derivation==0) exit_handling(83,4);
			                       *(FCNN_2L_1out_FB1_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_22->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->firing_neuron==0) exit_handling(83,5);
			                       *(FCNN_2L_1out_FB1_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_22->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22->create_learning_algorithm==0) exit_handling(83,6);
			                       *(FCNN_2L_1out_FB1_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_22);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_21 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto the 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_21;
			                       FCNN_2L_1out_FB1_21=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_21->name=MAC((long int)71);
			                       *(FCNN_2L_1out_FB1_21->name+0)='F';
			                       *(FCNN_2L_1out_FB1_21->name+1)='C';
			                       *(FCNN_2L_1out_FB1_21->name+2)='N';
			                       *(FCNN_2L_1out_FB1_21->name+3)='N';
			                       *(FCNN_2L_1out_FB1_21->name+4)='_';
			                       *(FCNN_2L_1out_FB1_21->name+5)='2';
			                       *(FCNN_2L_1out_FB1_21->name+6)='L';
			                       *(FCNN_2L_1out_FB1_21->name+7)='_';
			                       *(FCNN_2L_1out_FB1_21->name+8)='1';
			                       *(FCNN_2L_1out_FB1_21->name+9)='o';
			                       *(FCNN_2L_1out_FB1_21->name+10)='u';
			                       *(FCNN_2L_1out_FB1_21->name+11)='t';
			                       *(FCNN_2L_1out_FB1_21->name+12)='_';
			                       *(FCNN_2L_1out_FB1_21->name+13)='F';
			                       *(FCNN_2L_1out_FB1_21->name+14)='B';
			                       *(FCNN_2L_1out_FB1_21->name+15)='1';
			                       *(FCNN_2L_1out_FB1_21->name+16)='_';
			                       *(FCNN_2L_1out_FB1_21->name+17)='2';
			                       *(FCNN_2L_1out_FB1_21->name+18)='1';
			                       *(FCNN_2L_1out_FB1_21->name+19)='(';
			                       *(FCNN_2L_1out_FB1_21->name+20)='F';
			                       *(FCNN_2L_1out_FB1_21->name+21)='u';
			                       *(FCNN_2L_1out_FB1_21->name+22)='l';
			                       *(FCNN_2L_1out_FB1_21->name+23)='l';
			                       *(FCNN_2L_1out_FB1_21->name+24)='y';
			                       *(FCNN_2L_1out_FB1_21->name+25)='_';
			                       *(FCNN_2L_1out_FB1_21->name+26)='C';
			                       *(FCNN_2L_1out_FB1_21->name+27)='o';
			                       *(FCNN_2L_1out_FB1_21->name+28)='n';
			                       *(FCNN_2L_1out_FB1_21->name+29)='n';
			                       *(FCNN_2L_1out_FB1_21->name+30)='e';
			                       *(FCNN_2L_1out_FB1_21->name+31)='c';
			                       *(FCNN_2L_1out_FB1_21->name+32)='t';
			                       *(FCNN_2L_1out_FB1_21->name+33)='e';
			                       *(FCNN_2L_1out_FB1_21->name+34)='d';
			                       *(FCNN_2L_1out_FB1_21->name+35)='_';
			                       *(FCNN_2L_1out_FB1_21->name+36)='N';
			                       *(FCNN_2L_1out_FB1_21->name+37)='N';
			                       *(FCNN_2L_1out_FB1_21->name+38)='_';
			                       *(FCNN_2L_1out_FB1_21->name+39)='2';
			                       *(FCNN_2L_1out_FB1_21->name+40)='_';
			                       *(FCNN_2L_1out_FB1_21->name+41)='L';
			                       *(FCNN_2L_1out_FB1_21->name+42)='a';
			                       *(FCNN_2L_1out_FB1_21->name+43)='y';
			                       *(FCNN_2L_1out_FB1_21->name+44)='e';
			                       *(FCNN_2L_1out_FB1_21->name+45)='r';
			                       *(FCNN_2L_1out_FB1_21->name+46)='s';
			                       *(FCNN_2L_1out_FB1_21->name+47)='_';
			                       *(FCNN_2L_1out_FB1_21->name+48)='1';
			                       *(FCNN_2L_1out_FB1_21->name+49)='_';
			                       *(FCNN_2L_1out_FB1_21->name+50)='o';
			                       *(FCNN_2L_1out_FB1_21->name+51)='u';
			                       *(FCNN_2L_1out_FB1_21->name+52)='t';
			                       *(FCNN_2L_1out_FB1_21->name+53)='p';
			                       *(FCNN_2L_1out_FB1_21->name+54)='u';
			                       *(FCNN_2L_1out_FB1_21->name+55)='t';
			                       *(FCNN_2L_1out_FB1_21->name+56)='_';
			                       *(FCNN_2L_1out_FB1_21->name+57)='f';
			                       *(FCNN_2L_1out_FB1_21->name+58)='e';
			                       *(FCNN_2L_1out_FB1_21->name+59)='e';
			                       *(FCNN_2L_1out_FB1_21->name+60)='d';
			                       *(FCNN_2L_1out_FB1_21->name+61)='b';
			                       *(FCNN_2L_1out_FB1_21->name+62)='a';
			                       *(FCNN_2L_1out_FB1_21->name+63)='c';
			                       *(FCNN_2L_1out_FB1_21->name+64)='k';
			                       *(FCNN_2L_1out_FB1_21->name+65)='_';
			                       *(FCNN_2L_1out_FB1_21->name+66)='2';
			                       *(FCNN_2L_1out_FB1_21->name+67)='>';
			                       *(FCNN_2L_1out_FB1_21->name+68)='1';
			                       *(FCNN_2L_1out_FB1_21->name+69)=')';
			                       *(FCNN_2L_1out_FB1_21->name+70)=' ';
			                       FCNN_2L_1out_FB1_21->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FB1_21->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_21->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_21->recurrence=T;
			                       FCNN_2L_1out_FB1_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_1out_FB1_21->source=MAI((long int)FCNN_2L_1out_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_21->source+0)=2;
			                       FCNN_2L_1out_FB1_21->destination=MAI((long int)FCNN_2L_1out_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_21->destination+0)=1;
			                       FCNN_2L_1out_FB1_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->create_neuron==0) exit_handling(84,1); 
			                       *(FCNN_2L_1out_FB1_21->create_neuron+0)=create_FCNN_2L_1out_FB1_21;
			                       FCNN_2L_1out_FB1_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_21->prepare_input=0;
			                       FCNN_2L_1out_FB1_21->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->node_linear_output==0) exit_handling(84,2);
			                       *(FCNN_2L_1out_FB1_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FB1_21->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_21->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->node_output==0) exit_handling(84,3);
			                       *(FCNN_2L_1out_FB1_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->node_output_derivation==0) exit_handling(84,4);
			                       *(FCNN_2L_1out_FB1_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_21->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->firing_neuron==0) exit_handling(84,5);
			                       *(FCNN_2L_1out_FB1_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_1out_FB1_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_1out_FB1_21->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21->create_learning_algorithm==0) exit_handling(84,6);
			                       *(FCNN_2L_1out_FB1_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_21);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_22_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_22_11;
			                       FCNN_2L_1out_FB1_22_11=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_22_11->name=MAC((long int)78);
			                       *(FCNN_2L_1out_FB1_22_11->name+0)='F';
			                       *(FCNN_2L_1out_FB1_22_11->name+1)='C';
			                       *(FCNN_2L_1out_FB1_22_11->name+2)='N';
			                       *(FCNN_2L_1out_FB1_22_11->name+3)='N';
			                       *(FCNN_2L_1out_FB1_22_11->name+4)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+5)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+6)='L';
			                       *(FCNN_2L_1out_FB1_22_11->name+7)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+8)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+9)='o';
			                       *(FCNN_2L_1out_FB1_22_11->name+10)='u';
			                       *(FCNN_2L_1out_FB1_22_11->name+11)='t';
			                       *(FCNN_2L_1out_FB1_22_11->name+12)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+13)='F';
			                       *(FCNN_2L_1out_FB1_22_11->name+14)='B';
			                       *(FCNN_2L_1out_FB1_22_11->name+15)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+16)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+17)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+18)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+19)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+20)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+21)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+22)='(';
			                       *(FCNN_2L_1out_FB1_22_11->name+23)='F';
			                       *(FCNN_2L_1out_FB1_22_11->name+24)='u';
			                       *(FCNN_2L_1out_FB1_22_11->name+25)='l';
			                       *(FCNN_2L_1out_FB1_22_11->name+26)='l';
			                       *(FCNN_2L_1out_FB1_22_11->name+27)='y';
			                       *(FCNN_2L_1out_FB1_22_11->name+28)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+29)='C';
			                       *(FCNN_2L_1out_FB1_22_11->name+30)='o';
			                       *(FCNN_2L_1out_FB1_22_11->name+31)='n';
			                       *(FCNN_2L_1out_FB1_22_11->name+32)='n';
			                       *(FCNN_2L_1out_FB1_22_11->name+33)='e';
			                       *(FCNN_2L_1out_FB1_22_11->name+34)='c';
			                       *(FCNN_2L_1out_FB1_22_11->name+35)='t';
			                       *(FCNN_2L_1out_FB1_22_11->name+36)='e';
			                       *(FCNN_2L_1out_FB1_22_11->name+37)='d';
			                       *(FCNN_2L_1out_FB1_22_11->name+38)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+39)='N';
			                       *(FCNN_2L_1out_FB1_22_11->name+40)='N';
			                       *(FCNN_2L_1out_FB1_22_11->name+41)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+42)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+43)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+44)='L';
			                       *(FCNN_2L_1out_FB1_22_11->name+45)='a';
			                       *(FCNN_2L_1out_FB1_22_11->name+46)='y';
			                       *(FCNN_2L_1out_FB1_22_11->name+47)='e';
			                       *(FCNN_2L_1out_FB1_22_11->name+48)='r';
			                       *(FCNN_2L_1out_FB1_22_11->name+49)='s';
			                       *(FCNN_2L_1out_FB1_22_11->name+50)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+51)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+52)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+53)='o';
			                       *(FCNN_2L_1out_FB1_22_11->name+54)='u';
			                       *(FCNN_2L_1out_FB1_22_11->name+55)='t';
			                       *(FCNN_2L_1out_FB1_22_11->name+56)='p';
			                       *(FCNN_2L_1out_FB1_22_11->name+57)='u';
			                       *(FCNN_2L_1out_FB1_22_11->name+58)='t';
			                       *(FCNN_2L_1out_FB1_22_11->name+59)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+60)='f';
			                       *(FCNN_2L_1out_FB1_22_11->name+61)='e';
			                       *(FCNN_2L_1out_FB1_22_11->name+62)='e';
			                       *(FCNN_2L_1out_FB1_22_11->name+63)='d';
			                       *(FCNN_2L_1out_FB1_22_11->name+64)='b';
			                       *(FCNN_2L_1out_FB1_22_11->name+65)='a';
			                       *(FCNN_2L_1out_FB1_22_11->name+66)='c';
			                       *(FCNN_2L_1out_FB1_22_11->name+67)='k';
			                       *(FCNN_2L_1out_FB1_22_11->name+68)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+69)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+70)='>';
			                       *(FCNN_2L_1out_FB1_22_11->name+71)='2';
			                       *(FCNN_2L_1out_FB1_22_11->name+72)='_';
			                       *(FCNN_2L_1out_FB1_22_11->name+73)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+74)='>';
			                       *(FCNN_2L_1out_FB1_22_11->name+75)='1';
			                       *(FCNN_2L_1out_FB1_22_11->name+76)=')';
			                       *(FCNN_2L_1out_FB1_22_11->name+77)=' ';
			                       FCNN_2L_1out_FB1_22_11->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_22_11->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FB1_22_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_22_11->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_22_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_22_11->recurrence=T;
			                       FCNN_2L_1out_FB1_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FB1_22_11->source=MAI((long int)FCNN_2L_1out_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_11->source+0)=2;
			                       *(FCNN_2L_1out_FB1_22_11->source+1)=1;
			                       FCNN_2L_1out_FB1_22_11->destination=MAI((long int)FCNN_2L_1out_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_11->destination+0)=2;
			                       *(FCNN_2L_1out_FB1_22_11->destination+1)=1;
			                       FCNN_2L_1out_FB1_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->create_neuron==0) exit_handling(85,1); 
			                       *(FCNN_2L_1out_FB1_22_11->create_neuron+0)=create_FCNN_2L_1out_FB1_22_11;
			                       FCNN_2L_1out_FB1_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_22_11->prepare_input=0;
			                       FCNN_2L_1out_FB1_22_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->node_linear_output==0) exit_handling(85,2);
			                       *(FCNN_2L_1out_FB1_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FB1_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->node_output==0) exit_handling(85,3);
			                       *(FCNN_2L_1out_FB1_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->node_output_derivation==0) exit_handling(85,4);
			                       *(FCNN_2L_1out_FB1_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_22_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->firing_neuron==0) exit_handling(85,5);
			                       *(FCNN_2L_1out_FB1_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_11->create_learning_algorithm==0) exit_handling(85,6);
			                       *(FCNN_2L_1out_FB1_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_22_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_21_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_21_11;
			                       FCNN_2L_1out_FB1_21_11=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_21_11->name=MAC((long int)78);
			                       *(FCNN_2L_1out_FB1_21_11->name+0)='F';
			                       *(FCNN_2L_1out_FB1_21_11->name+1)='C';
			                       *(FCNN_2L_1out_FB1_21_11->name+2)='N';
			                       *(FCNN_2L_1out_FB1_21_11->name+3)='N';
			                       *(FCNN_2L_1out_FB1_21_11->name+4)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+5)='2';
			                       *(FCNN_2L_1out_FB1_21_11->name+6)='L';
			                       *(FCNN_2L_1out_FB1_21_11->name+7)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+8)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+9)='o';
			                       *(FCNN_2L_1out_FB1_21_11->name+10)='u';
			                       *(FCNN_2L_1out_FB1_21_11->name+11)='t';
			                       *(FCNN_2L_1out_FB1_21_11->name+12)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+13)='F';
			                       *(FCNN_2L_1out_FB1_21_11->name+14)='B';
			                       *(FCNN_2L_1out_FB1_21_11->name+15)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+16)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+17)='2';
			                       *(FCNN_2L_1out_FB1_21_11->name+18)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+19)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+20)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+21)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+22)='(';
			                       *(FCNN_2L_1out_FB1_21_11->name+23)='F';
			                       *(FCNN_2L_1out_FB1_21_11->name+24)='u';
			                       *(FCNN_2L_1out_FB1_21_11->name+25)='l';
			                       *(FCNN_2L_1out_FB1_21_11->name+26)='l';
			                       *(FCNN_2L_1out_FB1_21_11->name+27)='y';
			                       *(FCNN_2L_1out_FB1_21_11->name+28)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+29)='C';
			                       *(FCNN_2L_1out_FB1_21_11->name+30)='o';
			                       *(FCNN_2L_1out_FB1_21_11->name+31)='n';
			                       *(FCNN_2L_1out_FB1_21_11->name+32)='n';
			                       *(FCNN_2L_1out_FB1_21_11->name+33)='e';
			                       *(FCNN_2L_1out_FB1_21_11->name+34)='c';
			                       *(FCNN_2L_1out_FB1_21_11->name+35)='t';
			                       *(FCNN_2L_1out_FB1_21_11->name+36)='e';
			                       *(FCNN_2L_1out_FB1_21_11->name+37)='d';
			                       *(FCNN_2L_1out_FB1_21_11->name+38)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+39)='N';
			                       *(FCNN_2L_1out_FB1_21_11->name+40)='N';
			                       *(FCNN_2L_1out_FB1_21_11->name+41)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+42)='2';
			                       *(FCNN_2L_1out_FB1_21_11->name+43)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+44)='L';
			                       *(FCNN_2L_1out_FB1_21_11->name+45)='a';
			                       *(FCNN_2L_1out_FB1_21_11->name+46)='y';
			                       *(FCNN_2L_1out_FB1_21_11->name+47)='e';
			                       *(FCNN_2L_1out_FB1_21_11->name+48)='r';
			                       *(FCNN_2L_1out_FB1_21_11->name+49)='s';
			                       *(FCNN_2L_1out_FB1_21_11->name+50)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+51)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+52)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+53)='o';
			                       *(FCNN_2L_1out_FB1_21_11->name+54)='u';
			                       *(FCNN_2L_1out_FB1_21_11->name+55)='t';
			                       *(FCNN_2L_1out_FB1_21_11->name+56)='p';
			                       *(FCNN_2L_1out_FB1_21_11->name+57)='u';
			                       *(FCNN_2L_1out_FB1_21_11->name+58)='t';
			                       *(FCNN_2L_1out_FB1_21_11->name+59)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+60)='f';
			                       *(FCNN_2L_1out_FB1_21_11->name+61)='e';
			                       *(FCNN_2L_1out_FB1_21_11->name+62)='e';
			                       *(FCNN_2L_1out_FB1_21_11->name+63)='d';
			                       *(FCNN_2L_1out_FB1_21_11->name+64)='b';
			                       *(FCNN_2L_1out_FB1_21_11->name+65)='a';
			                       *(FCNN_2L_1out_FB1_21_11->name+66)='c';
			                       *(FCNN_2L_1out_FB1_21_11->name+67)='k';
			                       *(FCNN_2L_1out_FB1_21_11->name+68)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+69)='2';
			                       *(FCNN_2L_1out_FB1_21_11->name+70)='>';
			                       *(FCNN_2L_1out_FB1_21_11->name+71)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+72)='_';
			                       *(FCNN_2L_1out_FB1_21_11->name+73)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+74)='>';
			                       *(FCNN_2L_1out_FB1_21_11->name+75)='1';
			                       *(FCNN_2L_1out_FB1_21_11->name+76)=')';
			                       *(FCNN_2L_1out_FB1_21_11->name+77)=' ';
			                       FCNN_2L_1out_FB1_21_11->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedbacks */
			                       FCNN_2L_1out_FB1_21_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_21_11->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_21_11->recurrence=T;
			                       FCNN_2L_1out_FB1_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FB1_21_11->source=MAI((long int)FCNN_2L_1out_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_21_11->source+0)=2;
			                       *(FCNN_2L_1out_FB1_21_11->source+1)=1;
			                       FCNN_2L_1out_FB1_21_11->destination=MAI((long int)FCNN_2L_1out_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_21_11->destination+0)=1;
			                       *(FCNN_2L_1out_FB1_21_11->destination+1)=1;
			                       FCNN_2L_1out_FB1_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->create_neuron==0) exit_handling(86,1); 
			                       *(FCNN_2L_1out_FB1_21_11->create_neuron+0)=create_FCNN_2L_1out_FB1_21_11;
			                       FCNN_2L_1out_FB1_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_21_11->prepare_input=0;
			                       FCNN_2L_1out_FB1_21_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->node_linear_output==0) exit_handling(86,2);
			                       *(FCNN_2L_1out_FB1_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FB1_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->node_output==0) exit_handling(86,3);
			                       *(FCNN_2L_1out_FB1_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->node_output_derivation==0) exit_handling(86,4);
			                       *(FCNN_2L_1out_FB1_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_21_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->firing_neuron==0) exit_handling(86,5);
			                       *(FCNN_2L_1out_FB1_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_21_11->create_learning_algorithm==0) exit_handling(86,6);
			                       *(FCNN_2L_1out_FB1_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_21_11);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_22_21 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_22_21;
			                       FCNN_2L_1out_FB1_22_21=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_22_21->name=MAC((long int)78);
			                       *(FCNN_2L_1out_FB1_22_21->name+0)='F';
			                       *(FCNN_2L_1out_FB1_22_21->name+1)='C';
			                       *(FCNN_2L_1out_FB1_22_21->name+2)='N';
			                       *(FCNN_2L_1out_FB1_22_21->name+3)='N';
			                       *(FCNN_2L_1out_FB1_22_21->name+4)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+5)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+6)='L';
			                       *(FCNN_2L_1out_FB1_22_21->name+7)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+8)='1';
			                       *(FCNN_2L_1out_FB1_22_21->name+9)='o';
			                       *(FCNN_2L_1out_FB1_22_21->name+10)='u';
			                       *(FCNN_2L_1out_FB1_22_21->name+11)='t';
			                       *(FCNN_2L_1out_FB1_22_21->name+12)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+13)='F';
			                       *(FCNN_2L_1out_FB1_22_21->name+14)='B';
			                       *(FCNN_2L_1out_FB1_22_21->name+15)='1';
			                       *(FCNN_2L_1out_FB1_22_21->name+16)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+17)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+18)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+19)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+20)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+21)='1';
			                       *(FCNN_2L_1out_FB1_22_21->name+22)='(';
			                       *(FCNN_2L_1out_FB1_22_21->name+23)='F';
			                       *(FCNN_2L_1out_FB1_22_21->name+24)='u';
			                       *(FCNN_2L_1out_FB1_22_21->name+25)='l';
			                       *(FCNN_2L_1out_FB1_22_21->name+26)='l';
			                       *(FCNN_2L_1out_FB1_22_21->name+27)='y';
			                       *(FCNN_2L_1out_FB1_22_21->name+28)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+29)='C';
			                       *(FCNN_2L_1out_FB1_22_21->name+30)='o';
			                       *(FCNN_2L_1out_FB1_22_21->name+31)='n';
			                       *(FCNN_2L_1out_FB1_22_21->name+32)='n';
			                       *(FCNN_2L_1out_FB1_22_21->name+33)='e';
			                       *(FCNN_2L_1out_FB1_22_21->name+34)='c';
			                       *(FCNN_2L_1out_FB1_22_21->name+35)='t';
			                       *(FCNN_2L_1out_FB1_22_21->name+36)='e';
			                       *(FCNN_2L_1out_FB1_22_21->name+37)='d';
			                       *(FCNN_2L_1out_FB1_22_21->name+38)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+39)='N';
			                       *(FCNN_2L_1out_FB1_22_21->name+40)='N';
			                       *(FCNN_2L_1out_FB1_22_21->name+41)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+42)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+43)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+44)='L';
			                       *(FCNN_2L_1out_FB1_22_21->name+45)='a';
			                       *(FCNN_2L_1out_FB1_22_21->name+46)='y';
			                       *(FCNN_2L_1out_FB1_22_21->name+47)='e';
			                       *(FCNN_2L_1out_FB1_22_21->name+48)='r';
			                       *(FCNN_2L_1out_FB1_22_21->name+49)='s';
			                       *(FCNN_2L_1out_FB1_22_21->name+50)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+51)='1';
			                       *(FCNN_2L_1out_FB1_22_21->name+52)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+53)='o';
			                       *(FCNN_2L_1out_FB1_22_21->name+54)='u';
			                       *(FCNN_2L_1out_FB1_22_21->name+55)='t';
			                       *(FCNN_2L_1out_FB1_22_21->name+56)='p';
			                       *(FCNN_2L_1out_FB1_22_21->name+57)='u';
			                       *(FCNN_2L_1out_FB1_22_21->name+58)='t';
			                       *(FCNN_2L_1out_FB1_22_21->name+59)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+60)='f';
			                       *(FCNN_2L_1out_FB1_22_21->name+61)='e';
			                       *(FCNN_2L_1out_FB1_22_21->name+62)='e';
			                       *(FCNN_2L_1out_FB1_22_21->name+63)='d';
			                       *(FCNN_2L_1out_FB1_22_21->name+64)='b';
			                       *(FCNN_2L_1out_FB1_22_21->name+65)='a';
			                       *(FCNN_2L_1out_FB1_22_21->name+66)='c';
			                       *(FCNN_2L_1out_FB1_22_21->name+67)='k';
			                       *(FCNN_2L_1out_FB1_22_21->name+68)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+69)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+70)='>';
			                       *(FCNN_2L_1out_FB1_22_21->name+71)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+72)='_';
			                       *(FCNN_2L_1out_FB1_22_21->name+73)='2';
			                       *(FCNN_2L_1out_FB1_22_21->name+74)='>';
			                       *(FCNN_2L_1out_FB1_22_21->name+75)='1';
			                       *(FCNN_2L_1out_FB1_22_21->name+76)=')';
			                       *(FCNN_2L_1out_FB1_22_21->name+77)=' ';
			                       FCNN_2L_1out_FB1_22_21->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_22_21->inputs_per_first_Level_node=2*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedback */
			                       FCNN_2L_1out_FB1_22_21->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_22_21->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_22_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_22_21->recurrence=T;
			                       FCNN_2L_1out_FB1_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_1out_FB1_22_21->source=MAI((long int)FCNN_2L_1out_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_21->source+0)=2;
			                       *(FCNN_2L_1out_FB1_22_21->source+1)=2;
			                       FCNN_2L_1out_FB1_22_21->destination=MAI((long int)FCNN_2L_1out_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_21->destination+0)=2;
			                       *(FCNN_2L_1out_FB1_22_21->destination+1)=1;
			                       FCNN_2L_1out_FB1_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->create_neuron==0) exit_handling(87,1); 
			                       *(FCNN_2L_1out_FB1_22_21->create_neuron+0)=create_FCNN_2L_1out_FB1_22_21;
			                       FCNN_2L_1out_FB1_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_22_21->prepare_input=0;
			                       FCNN_2L_1out_FB1_22_21->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->node_linear_output==0) exit_handling(87,2);
			                       *(FCNN_2L_1out_FB1_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_1out_FB1_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->node_output==0) exit_handling(87,3);
			                       *(FCNN_2L_1out_FB1_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->node_output_derivation==0) exit_handling(87,4);
			                       *(FCNN_2L_1out_FB1_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_22_21->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->firing_neuron==0) exit_handling(87,5);
			                       *(FCNN_2L_1out_FB1_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21->create_learning_algorithm==0) exit_handling(87,6);
			                       *(FCNN_2L_1out_FB1_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_22_21);
			                      } /* ; */

/* setting up FCNN_2L_1out_FB1_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_1out_FB1_22_21_11 (Fully Connected Neural Network with 2 Layers and only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_1out_FB1_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_1out_FB1_22_21_11;
			                       FCNN_2L_1out_FB1_22_21_11=MANTD((long int)1);
			                       FCNN_2L_1out_FB1_22_21_11->name=MAC((long int)85);
			                       *(FCNN_2L_1out_FB1_22_21_11->name+0)='F';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+1)='C';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+2)='N';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+3)='N';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+4)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+5)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+6)='L';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+7)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+8)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+9)='o';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+10)='u';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+11)='t';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+12)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+13)='F';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+14)='B';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+15)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+16)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+17)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+18)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+19)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+20)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+21)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+22)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+23)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+24)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+25)='(';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+26)='F';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+27)='u';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+28)='l';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+29)='l';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+30)='y';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+31)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+32)='C';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+33)='o';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+34)='n';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+35)='n';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+36)='e';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+37)='c';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+38)='t';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+39)='e';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+40)='d';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+41)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+42)='N';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+43)='N';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+44)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+45)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+46)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+47)='L';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+48)='a';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+49)='y';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+50)='e';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+51)='r';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+52)='s';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+53)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+54)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+55)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+56)='o';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+57)='u';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+58)='t';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+59)='p';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+60)='u';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+61)='t';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+62)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+63)='f';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+64)='e';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+65)='e';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+66)='d';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+67)='b';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+68)='a';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+69)='c';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+70)='k';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+71)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+72)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+73)='>';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+74)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+75)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+76)='2';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+77)='>';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+78)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+79)='_';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+80)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+81)='>';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+82)='1';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+83)=')';
			                       *(FCNN_2L_1out_FB1_22_21_11->name+84)=' ';
			                       FCNN_2L_1out_FB1_22_21_11->number_of_Levels=2;
			                       FCNN_2L_1out_FB1_22_21_11->inputs_per_first_Level_node=3*0; /* means all inputs are associated with all 1st Level nodes plus inputs from feedbacks */
			                       FCNN_2L_1out_FB1_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_1out_FB1_22_21_11->number_of_Levels);
			                       *(FCNN_2L_1out_FB1_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_1out_FB1_22_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_1out_FB1_22_21_11->recurrence=T;
			                       FCNN_2L_1out_FB1_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_1out_FB1_22_21_11->source=MAI((long int)FCNN_2L_1out_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_21_11->source+0)=2;
			                       *(FCNN_2L_1out_FB1_22_21_11->source+1)=2;
			                       *(FCNN_2L_1out_FB1_22_21_11->source+2)=1;
			                       FCNN_2L_1out_FB1_22_21_11->destination=MAI((long int)FCNN_2L_1out_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_1out_FB1_22_21_11->destination+0)=2;
			                       *(FCNN_2L_1out_FB1_22_21_11->destination+1)=1;
			                       *(FCNN_2L_1out_FB1_22_21_11->destination+2)=1;
			                       FCNN_2L_1out_FB1_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_1out_FB1_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->create_neuron==0) exit_handling(88,1); 
			                       *(FCNN_2L_1out_FB1_22_21_11->create_neuron+0)=create_FCNN_2L_1out_FB1_22_21_11;
			                       FCNN_2L_1out_FB1_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_1out_FB1_22_21_11->prepare_input=0;
			                       FCNN_2L_1out_FB1_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_1out_FB1_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->node_linear_output==0) exit_handling(88,2);
			                       *(FCNN_2L_1out_FB1_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_1out_FB1_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_1out_FB1_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->node_output==0) exit_handling(88,3);
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_1out_FB1_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->node_output_derivation==0) exit_handling(88,4);
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_1out_FB1_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_1out_FB1_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_1out_FB1_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->firing_neuron==0) exit_handling(88,5);
			                       *(FCNN_2L_1out_FB1_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_1out_FB1_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_1out_FB1_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_1out_FB1_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_1out_FB1_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_1out_FB1_22_21_11->create_learning_algorithm==0) exit_handling(88,6);
			                       *(FCNN_2L_1out_FB1_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_1out_FB1_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_1out_FB1_22_21_11);
			                      } /* ; */


/* setting up FCNN_2L_W_1out_FB1_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_11;
			                       FCNN_2L_W_1out_FB1_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_11->name=MAC((long int)104);
			                       *(FCNN_2L_W_1out_FB1_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_11->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+19)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+20)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+21)='(';
			                       *(FCNN_2L_W_1out_FB1_11->name+22)='F';
			                       *(FCNN_2L_W_1out_FB1_11->name+23)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+24)='l';
			                       *(FCNN_2L_W_1out_FB1_11->name+25)='l';
			                       *(FCNN_2L_W_1out_FB1_11->name+26)='y';
			                       *(FCNN_2L_W_1out_FB1_11->name+27)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+28)='C';
			                       *(FCNN_2L_W_1out_FB1_11->name+29)='o';
			                       *(FCNN_2L_W_1out_FB1_11->name+30)='n';
			                       *(FCNN_2L_W_1out_FB1_11->name+31)='n';
			                       *(FCNN_2L_W_1out_FB1_11->name+32)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+33)='c';
			                       *(FCNN_2L_W_1out_FB1_11->name+34)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+36)='d';
			                       *(FCNN_2L_W_1out_FB1_11->name+37)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+38)='N';
			                       *(FCNN_2L_W_1out_FB1_11->name+39)='N';
			                       *(FCNN_2L_W_1out_FB1_11->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+41)='2';
			                       *(FCNN_2L_W_1out_FB1_11->name+42)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+43)='L';
			                       *(FCNN_2L_W_1out_FB1_11->name+44)='a';
			                       *(FCNN_2L_W_1out_FB1_11->name+45)='y';
			                       *(FCNN_2L_W_1out_FB1_11->name+46)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+47)='r';
			                       *(FCNN_2L_W_1out_FB1_11->name+48)='s';
			                       *(FCNN_2L_W_1out_FB1_11->name+49)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_11->name+51)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+52)='c';
			                       *(FCNN_2L_W_1out_FB1_11->name+53)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+54)='i';
			                       *(FCNN_2L_W_1out_FB1_11->name+55)='v';
			                       *(FCNN_2L_W_1out_FB1_11->name+56)='i';
			                       *(FCNN_2L_W_1out_FB1_11->name+57)='n';
			                       *(FCNN_2L_W_1out_FB1_11->name+58)='g';
			                       *(FCNN_2L_W_1out_FB1_11->name+59)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+60)='i';
			                       *(FCNN_2L_W_1out_FB1_11->name+61)='n';
			                       *(FCNN_2L_W_1out_FB1_11->name+62)='p';
			                       *(FCNN_2L_W_1out_FB1_11->name+63)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+64)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+65)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+66)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+67)='h';
			                       *(FCNN_2L_W_1out_FB1_11->name+68)='r';
			                       *(FCNN_2L_W_1out_FB1_11->name+69)='o';
			                       *(FCNN_2L_W_1out_FB1_11->name+70)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+71)='g';
			                       *(FCNN_2L_W_1out_FB1_11->name+72)='h';
			                       *(FCNN_2L_W_1out_FB1_11->name+73)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+74)='W';
			                       *(FCNN_2L_W_1out_FB1_11->name+75)='i';
			                       *(FCNN_2L_W_1out_FB1_11->name+76)='n';
			                       *(FCNN_2L_W_1out_FB1_11->name+77)='d';
			                       *(FCNN_2L_W_1out_FB1_11->name+78)='o';
			                       *(FCNN_2L_W_1out_FB1_11->name+79)='w';
			                       *(FCNN_2L_W_1out_FB1_11->name+80)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+81)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+82)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+83)='o';
			                       *(FCNN_2L_W_1out_FB1_11->name+84)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+85)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+86)='p';
			                       *(FCNN_2L_W_1out_FB1_11->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_11->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_11->name+89)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+90)='f';
			                       *(FCNN_2L_W_1out_FB1_11->name+91)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+92)='e';
			                       *(FCNN_2L_W_1out_FB1_11->name+93)='d';
			                       *(FCNN_2L_W_1out_FB1_11->name+94)='b';
			                       *(FCNN_2L_W_1out_FB1_11->name+95)='a';
			                       *(FCNN_2L_W_1out_FB1_11->name+96)='c';
			                       *(FCNN_2L_W_1out_FB1_11->name+97)='k';
			                       *(FCNN_2L_W_1out_FB1_11->name+98)='_';
			                       *(FCNN_2L_W_1out_FB1_11->name+99)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+100)='>';
			                       *(FCNN_2L_W_1out_FB1_11->name+101)='1';
			                       *(FCNN_2L_W_1out_FB1_11->name+102)=')';
			                       *(FCNN_2L_W_1out_FB1_11->name+103)=' ';
			                       FCNN_2L_W_1out_FB1_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_11->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FB1_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_11->recurrence=T;
			                       FCNN_2L_W_1out_FB1_11->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FB1_11->source=MAI((long int)FCNN_2L_W_1out_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_11->source+0)=1;
			                       FCNN_2L_W_1out_FB1_11->destination=MAI((long int)FCNN_2L_W_1out_FB1_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_11->destination+0)=1;
			                       FCNN_2L_W_1out_FB1_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->create_neuron==0) exit_handling(89,1); 
			                       *(FCNN_2L_W_1out_FB1_11->create_neuron+0)=create_FCNN_2L_1out_FB1_11;
			                       FCNN_2L_W_1out_FB1_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->node_linear_output==0) exit_handling(89,2);
			                       *(FCNN_2L_W_1out_FB1_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->node_output==0) exit_handling(89,3);
			                       *(FCNN_2L_W_1out_FB1_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->node_output_derivation==0) exit_handling(89,4);
			                       *(FCNN_2L_W_1out_FB1_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->firing_neuron==0) exit_handling(89,5);
			                       *(FCNN_2L_W_1out_FB1_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_11->create_learning_algorithm==0) exit_handling(89,6);
			                       *(FCNN_2L_W_1out_FB1_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_22 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_22 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_22;
			                       FCNN_2L_W_1out_FB1_22=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_22->name=MAC((long int)104);
			                       *(FCNN_2L_W_1out_FB1_22->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_22->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_22->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_22->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_22->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_22->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_22->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_22->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_22->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_22->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_22->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_22->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+20)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+21)='(';
			                       *(FCNN_2L_W_1out_FB1_22->name+22)='F';
			                       *(FCNN_2L_W_1out_FB1_22->name+23)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+24)='l';
			                       *(FCNN_2L_W_1out_FB1_22->name+25)='l';
			                       *(FCNN_2L_W_1out_FB1_22->name+26)='y';
			                       *(FCNN_2L_W_1out_FB1_22->name+27)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+28)='C';
			                       *(FCNN_2L_W_1out_FB1_22->name+29)='o';
			                       *(FCNN_2L_W_1out_FB1_22->name+30)='n';
			                       *(FCNN_2L_W_1out_FB1_22->name+31)='n';
			                       *(FCNN_2L_W_1out_FB1_22->name+32)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+33)='c';
			                       *(FCNN_2L_W_1out_FB1_22->name+34)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+36)='d';
			                       *(FCNN_2L_W_1out_FB1_22->name+37)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+38)='N';
			                       *(FCNN_2L_W_1out_FB1_22->name+39)='N';
			                       *(FCNN_2L_W_1out_FB1_22->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+41)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+42)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+43)='L';
			                       *(FCNN_2L_W_1out_FB1_22->name+44)='a';
			                       *(FCNN_2L_W_1out_FB1_22->name+45)='y';
			                       *(FCNN_2L_W_1out_FB1_22->name+46)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+47)='r';
			                       *(FCNN_2L_W_1out_FB1_22->name+48)='s';
			                       *(FCNN_2L_W_1out_FB1_22->name+49)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_22->name+51)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+52)='c';
			                       *(FCNN_2L_W_1out_FB1_22->name+53)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+54)='i';
			                       *(FCNN_2L_W_1out_FB1_22->name+55)='v';
			                       *(FCNN_2L_W_1out_FB1_22->name+56)='i';
			                       *(FCNN_2L_W_1out_FB1_22->name+57)='n';
			                       *(FCNN_2L_W_1out_FB1_22->name+58)='g';
			                       *(FCNN_2L_W_1out_FB1_22->name+59)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+60)='i';
			                       *(FCNN_2L_W_1out_FB1_22->name+61)='n';
			                       *(FCNN_2L_W_1out_FB1_22->name+62)='p';
			                       *(FCNN_2L_W_1out_FB1_22->name+63)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+64)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+65)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+66)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+67)='h';
			                       *(FCNN_2L_W_1out_FB1_22->name+68)='r';
			                       *(FCNN_2L_W_1out_FB1_22->name+69)='o';
			                       *(FCNN_2L_W_1out_FB1_22->name+70)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+71)='g';
			                       *(FCNN_2L_W_1out_FB1_22->name+72)='h';
			                       *(FCNN_2L_W_1out_FB1_22->name+73)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+74)='W';
			                       *(FCNN_2L_W_1out_FB1_22->name+75)='i';
			                       *(FCNN_2L_W_1out_FB1_22->name+76)='n';
			                       *(FCNN_2L_W_1out_FB1_22->name+77)='d';
			                       *(FCNN_2L_W_1out_FB1_22->name+78)='o';
			                       *(FCNN_2L_W_1out_FB1_22->name+79)='w';
			                       *(FCNN_2L_W_1out_FB1_22->name+80)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+81)='1';
			                       *(FCNN_2L_W_1out_FB1_22->name+82)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+83)='o';
			                       *(FCNN_2L_W_1out_FB1_22->name+84)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+85)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+86)='p';
			                       *(FCNN_2L_W_1out_FB1_22->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_22->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_22->name+89)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+90)='f';
			                       *(FCNN_2L_W_1out_FB1_22->name+91)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+92)='e';
			                       *(FCNN_2L_W_1out_FB1_22->name+93)='d';
			                       *(FCNN_2L_W_1out_FB1_22->name+94)='b';
			                       *(FCNN_2L_W_1out_FB1_22->name+95)='a';
			                       *(FCNN_2L_W_1out_FB1_22->name+96)='c';
			                       *(FCNN_2L_W_1out_FB1_22->name+97)='k';
			                       *(FCNN_2L_W_1out_FB1_22->name+98)='_';
			                       *(FCNN_2L_W_1out_FB1_22->name+99)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+100)='>';
			                       *(FCNN_2L_W_1out_FB1_22->name+101)='2';
			                       *(FCNN_2L_W_1out_FB1_22->name+102)=')';
			                       *(FCNN_2L_W_1out_FB1_22->name+103)=' ';
			                       FCNN_2L_W_1out_FB1_22->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_22->inputs_per_first_Level_node=-5; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_22->prepare_input()) */
			                       FCNN_2L_W_1out_FB1_22->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_22->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_22->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_22->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_22->recurrence=T;
			                       FCNN_2L_W_1out_FB1_22->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FB1_22->source=MAI((long int)FCNN_2L_W_1out_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22->source+0)=2;
			                       FCNN_2L_W_1out_FB1_22->destination=MAI((long int)FCNN_2L_W_1out_FB1_22->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22->destination+0)=2;
			                       FCNN_2L_W_1out_FB1_22->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_22->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->create_neuron==0) exit_handling(100,1); 
			                       *(FCNN_2L_W_1out_FB1_22->create_neuron+0)=create_FCNN_2L_1out_FB1_22;
			                       FCNN_2L_W_1out_FB1_22->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_22->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_22->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_22->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->node_linear_output==0) exit_handling(100,2);
			                       *(FCNN_2L_W_1out_FB1_22->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_22->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_22->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->node_output==0) exit_handling(100,3);
			                       *(FCNN_2L_W_1out_FB1_22->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_22->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_22->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_22->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_22->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->node_output_derivation==0) exit_handling(100,4);
			                       *(FCNN_2L_W_1out_FB1_22->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_22->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_22->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->firing_neuron==0) exit_handling(100,5);
			                       *(FCNN_2L_W_1out_FB1_22->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_22->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_22->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_22->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22->create_learning_algorithm==0) exit_handling(100,6);
			                       *(FCNN_2L_W_1out_FB1_22->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_22->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_22);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto the 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_21;
			                       FCNN_2L_W_1out_FB1_21=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_21->name=MAC((long int)104);
			                       *(FCNN_2L_W_1out_FB1_21->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_21->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_21->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_21->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_21->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_21->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_21->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_21->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_21->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_21->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_21->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_21->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_21->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_21->name+20)='1';
			                       *(FCNN_2L_W_1out_FB1_21->name+21)='(';
			                       *(FCNN_2L_W_1out_FB1_21->name+22)='F';
			                       *(FCNN_2L_W_1out_FB1_21->name+23)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+24)='l';
			                       *(FCNN_2L_W_1out_FB1_21->name+25)='l';
			                       *(FCNN_2L_W_1out_FB1_21->name+26)='y';
			                       *(FCNN_2L_W_1out_FB1_21->name+27)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+28)='C';
			                       *(FCNN_2L_W_1out_FB1_21->name+29)='o';
			                       *(FCNN_2L_W_1out_FB1_21->name+30)='n';
			                       *(FCNN_2L_W_1out_FB1_21->name+31)='n';
			                       *(FCNN_2L_W_1out_FB1_21->name+32)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+33)='c';
			                       *(FCNN_2L_W_1out_FB1_21->name+34)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+36)='d';
			                       *(FCNN_2L_W_1out_FB1_21->name+37)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+38)='N';
			                       *(FCNN_2L_W_1out_FB1_21->name+39)='N';
			                       *(FCNN_2L_W_1out_FB1_21->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+41)='2';
			                       *(FCNN_2L_W_1out_FB1_21->name+42)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+43)='L';
			                       *(FCNN_2L_W_1out_FB1_21->name+44)='a';
			                       *(FCNN_2L_W_1out_FB1_21->name+45)='y';
			                       *(FCNN_2L_W_1out_FB1_21->name+46)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+47)='r';
			                       *(FCNN_2L_W_1out_FB1_21->name+48)='s';
			                       *(FCNN_2L_W_1out_FB1_21->name+49)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_21->name+51)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+52)='c';
			                       *(FCNN_2L_W_1out_FB1_21->name+53)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+54)='i';
			                       *(FCNN_2L_W_1out_FB1_21->name+55)='v';
			                       *(FCNN_2L_W_1out_FB1_21->name+56)='i';
			                       *(FCNN_2L_W_1out_FB1_21->name+57)='n';
			                       *(FCNN_2L_W_1out_FB1_21->name+58)='g';
			                       *(FCNN_2L_W_1out_FB1_21->name+59)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+60)='i';
			                       *(FCNN_2L_W_1out_FB1_21->name+61)='n';
			                       *(FCNN_2L_W_1out_FB1_21->name+62)='p';
			                       *(FCNN_2L_W_1out_FB1_21->name+63)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+64)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+65)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+66)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+67)='h';
			                       *(FCNN_2L_W_1out_FB1_21->name+68)='r';
			                       *(FCNN_2L_W_1out_FB1_21->name+69)='o';
			                       *(FCNN_2L_W_1out_FB1_21->name+70)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+71)='g';
			                       *(FCNN_2L_W_1out_FB1_21->name+72)='h';
			                       *(FCNN_2L_W_1out_FB1_21->name+73)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+74)='W';
			                       *(FCNN_2L_W_1out_FB1_21->name+75)='i';
			                       *(FCNN_2L_W_1out_FB1_21->name+76)='n';
			                       *(FCNN_2L_W_1out_FB1_21->name+77)='d';
			                       *(FCNN_2L_W_1out_FB1_21->name+78)='o';
			                       *(FCNN_2L_W_1out_FB1_21->name+79)='w';
			                       *(FCNN_2L_W_1out_FB1_21->name+80)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+81)='1';
			                       *(FCNN_2L_W_1out_FB1_21->name+82)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+83)='o';
			                       *(FCNN_2L_W_1out_FB1_21->name+84)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+85)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+86)='p';
			                       *(FCNN_2L_W_1out_FB1_21->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_21->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_21->name+89)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+90)='f';
			                       *(FCNN_2L_W_1out_FB1_21->name+91)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+92)='e';
			                       *(FCNN_2L_W_1out_FB1_21->name+93)='d';
			                       *(FCNN_2L_W_1out_FB1_21->name+94)='b';
			                       *(FCNN_2L_W_1out_FB1_21->name+95)='a';
			                       *(FCNN_2L_W_1out_FB1_21->name+96)='c';
			                       *(FCNN_2L_W_1out_FB1_21->name+97)='k';
			                       *(FCNN_2L_W_1out_FB1_21->name+98)='_';
			                       *(FCNN_2L_W_1out_FB1_21->name+99)='2';
			                       *(FCNN_2L_W_1out_FB1_21->name+100)='>';
			                       *(FCNN_2L_W_1out_FB1_21->name+101)='1';
			                       *(FCNN_2L_W_1out_FB1_21->name+102)=')';
			                       *(FCNN_2L_W_1out_FB1_21->name+103)=' ';
			                       FCNN_2L_W_1out_FB1_21->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_21->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FB1_21->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_21->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_21->recurrence=T;
			                       FCNN_2L_W_1out_FB1_21->number_of_recurrent_connected_layers=1;
			                       FCNN_2L_W_1out_FB1_21->source=MAI((long int)FCNN_2L_W_1out_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_21->source+0)=2;
			                       FCNN_2L_W_1out_FB1_21->destination=MAI((long int)FCNN_2L_W_1out_FB1_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_21->destination+0)=1;
			                       FCNN_2L_W_1out_FB1_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->create_neuron==0) exit_handling(101,1); 
			                       *(FCNN_2L_W_1out_FB1_21->create_neuron+0)=create_FCNN_2L_1out_FB1_21;
			                       FCNN_2L_W_1out_FB1_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_21->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->node_linear_output==0) exit_handling(101,2);
			                       *(FCNN_2L_W_1out_FB1_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_21->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->node_output==0) exit_handling(101,3);
			                       *(FCNN_2L_W_1out_FB1_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->node_output_derivation==0) exit_handling(101,4);
			                       *(FCNN_2L_W_1out_FB1_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_21->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->firing_neuron==0) exit_handling(101,5);
			                       *(FCNN_2L_W_1out_FB1_21->firing_neuron+0)=firing_standard_neuron;
			                       *(FCNN_2L_W_1out_FB1_21->firing_neuron+1)=firing_recurrent_neuron;
			                       FCNN_2L_W_1out_FB1_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21->create_learning_algorithm==0) exit_handling(101,6);
			                       *(FCNN_2L_W_1out_FB1_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_21);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_22_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_22_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_22_11;
			                       FCNN_2L_W_1out_FB1_22_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_22_11->name=MAC((long int)111);
			                       *(FCNN_2L_W_1out_FB1_22_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+20)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+21)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+22)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+23)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+24)='(';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+25)='F';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+26)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+27)='l';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+28)='l';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+29)='y';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+30)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+31)='C';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+32)='o';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+33)='n';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+34)='n';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+36)='c';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+37)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+38)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+39)='d';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+41)='N';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+42)='N';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+43)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+44)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+45)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+46)='L';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+47)='a';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+48)='y';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+49)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+51)='s';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+52)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+53)='r';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+54)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+55)='c';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+56)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+57)='i';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+58)='v';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+59)='i';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+60)='n';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+61)='g';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+62)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+63)='i';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+64)='n';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+65)='p';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+66)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+67)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+68)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+69)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+70)='h';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+71)='r';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+72)='o';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+73)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+74)='g';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+75)='h';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+76)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+77)='W';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+78)='i';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+79)='n';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+80)='d';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+81)='o';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+82)='w';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+83)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+84)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+85)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+86)='o';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+89)='p';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+90)='u';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+91)='t';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+92)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+93)='f';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+94)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+95)='e';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+96)='d';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+97)='b';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+98)='a';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+99)='c';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+100)='k';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+101)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+102)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+103)='>';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+104)='2';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+105)='_';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+106)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+107)='>';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+108)='1';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+109)=')';
			                       *(FCNN_2L_W_1out_FB1_22_11->name+110)=' ';
			                       FCNN_2L_W_1out_FB1_22_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_22_11->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_22_11->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FB1_22_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_22_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_22_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_22_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_22_11->recurrence=T;
			                       FCNN_2L_W_1out_FB1_22_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FB1_22_11->source=MAI((long int)FCNN_2L_W_1out_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_11->source+1)=1;
			                       FCNN_2L_W_1out_FB1_22_11->destination=MAI((long int)FCNN_2L_W_1out_FB1_22_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_11->destination+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_11->destination+1)=1;
			                       FCNN_2L_W_1out_FB1_22_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_22_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->create_neuron==0) exit_handling(102,1); 
			                       *(FCNN_2L_W_1out_FB1_22_11->create_neuron+0)=create_FCNN_2L_1out_FB1_22_11;
			                       FCNN_2L_W_1out_FB1_22_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_22_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_22_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_22_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->node_linear_output==0) exit_handling(102,2);
			                       *(FCNN_2L_W_1out_FB1_22_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_22_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_22_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->node_output==0) exit_handling(102,3);
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_22_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->node_output_derivation==0) exit_handling(102,4);
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_22_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_22_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->firing_neuron==0) exit_handling(102,5);
			                       *(FCNN_2L_W_1out_FB1_22_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_22_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_22_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_22_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_11->create_learning_algorithm==0) exit_handling(102,6);
			                       *(FCNN_2L_W_1out_FB1_22_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_22_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_22_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_21_11;
			                       FCNN_2L_W_1out_FB1_21_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_21_11->name=MAC((long int)111);
			                       *(FCNN_2L_W_1out_FB1_21_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+20)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+21)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+22)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+23)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+24)='(';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+25)='F';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+26)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+27)='l';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+28)='l';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+29)='y';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+30)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+31)='C';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+32)='o';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+33)='n';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+34)='n';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+36)='c';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+37)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+38)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+39)='d';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+41)='N';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+42)='N';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+43)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+44)='2';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+45)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+46)='L';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+47)='a';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+48)='y';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+49)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+51)='s';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+52)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+53)='r';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+54)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+55)='c';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+56)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+57)='i';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+58)='v';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+59)='i';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+60)='n';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+61)='g';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+62)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+63)='i';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+64)='n';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+65)='p';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+66)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+67)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+68)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+69)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+70)='h';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+71)='r';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+72)='o';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+73)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+74)='g';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+75)='h';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+76)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+77)='W';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+78)='i';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+79)='n';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+80)='d';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+81)='o';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+82)='w';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+83)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+84)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+85)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+86)='o';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+89)='p';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+90)='u';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+91)='t';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+92)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+93)='f';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+94)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+95)='e';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+96)='d';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+97)='b';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+98)='a';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+99)='c';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+100)='k';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+101)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+102)='2';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+103)='>';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+104)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+105)='_';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+106)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+104)='>';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+108)='1';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+109)=')';
			                       *(FCNN_2L_W_1out_FB1_21_11->name+110)=' ';
			                       FCNN_2L_W_1out_FB1_21_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_21_11->prepare_input()) plus inputs from feedbacks */
			                       FCNN_2L_W_1out_FB1_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_21_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_21_11->recurrence=T;
			                       FCNN_2L_W_1out_FB1_21_11->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FB1_21_11->source=MAI((long int)FCNN_2L_W_1out_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_21_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FB1_21_11->source+1)=1;
			                       FCNN_2L_W_1out_FB1_21_11->destination=MAI((long int)FCNN_2L_W_1out_FB1_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_21_11->destination+0)=1;
			                       *(FCNN_2L_W_1out_FB1_21_11->destination+1)=1;
			                       FCNN_2L_W_1out_FB1_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->create_neuron==0) exit_handling(103,1); 
			                       *(FCNN_2L_W_1out_FB1_21_11->create_neuron+0)=create_FCNN_2L_1out_FB1_21_11;
			                       FCNN_2L_W_1out_FB1_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->node_linear_output==0) exit_handling(103,2);
			                       *(FCNN_2L_W_1out_FB1_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->node_output==0) exit_handling(103,3);
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->node_output_derivation==0) exit_handling(103,4);
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->firing_neuron==0) exit_handling(103,5);
			                       *(FCNN_2L_W_1out_FB1_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_21_11->create_learning_algorithm==0) exit_handling(103,6);
			                       *(FCNN_2L_W_1out_FB1_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_21_11);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_22_21 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_21_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_22_21 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_21_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_22_21;
			                       FCNN_2L_W_1out_FB1_22_21=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_22_21->name=MAC((long int)111);
			                       *(FCNN_2L_W_1out_FB1_22_21->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+20)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+21)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+22)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+23)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+24)='(';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+25)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+26)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+27)='l';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+28)='l';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+29)='y';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+30)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+31)='C';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+32)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+33)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+34)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+35)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+36)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+37)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+38)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+39)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+40)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+41)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+42)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+43)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+44)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+45)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+46)='L';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+47)='a';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+48)='y';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+49)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+50)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+51)='s';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+52)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+53)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+54)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+55)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+56)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+57)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+58)='v';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+59)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+60)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+61)='g';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+62)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+63)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+64)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+65)='p';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+66)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+67)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+68)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+69)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+70)='h';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+71)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+72)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+73)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+74)='g';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+75)='h';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+76)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+77)='W';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+78)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+79)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+80)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+81)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+82)='w';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+83)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+84)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+85)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+86)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+87)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+88)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+89)='p';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+90)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+91)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+92)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+93)='f';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+94)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+95)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+96)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+97)='b';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+98)='a';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+99)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+100)='k';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+101)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+102)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+103)='>';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+104)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+105)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+106)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+107)='>';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+108)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+109)=')';
			                       *(FCNN_2L_W_1out_FB1_22_21->name+110)=' ';
			                       FCNN_2L_W_1out_FB1_22_21->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_22_21->inputs_per_first_Level_node=-5+0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_22_21->prepare_input()) plus inputs from feedback */
			                       FCNN_2L_W_1out_FB1_22_21->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_22_21->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_22_21->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_22_21->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_22_21->recurrence=T;
			                       FCNN_2L_W_1out_FB1_22_21->number_of_recurrent_connected_layers=2;
			                       FCNN_2L_W_1out_FB1_22_21->source=MAI((long int)FCNN_2L_W_1out_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_21->source+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_21->source+1)=2;
			                       FCNN_2L_W_1out_FB1_22_21->destination=MAI((long int)FCNN_2L_W_1out_FB1_22_21->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_21->destination+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_21->destination+1)=1;
			                       FCNN_2L_W_1out_FB1_22_21->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_22_21->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->create_neuron==0) exit_handling(104,1); 
			                       *(FCNN_2L_W_1out_FB1_22_21->create_neuron+0)=create_FCNN_2L_1out_FB1_22_21;
			                       FCNN_2L_W_1out_FB1_22_21->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_22_21->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_22_21->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_22_21->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->node_linear_output==0) exit_handling(104,2);
			                       *(FCNN_2L_W_1out_FB1_22_21->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_linear_output+2)=highest_weighted_input;
				                       FCNN_2L_W_1out_FB1_22_21->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_22_21->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->node_output==0) exit_handling(104,3);
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_22_21->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->node_output_derivation==0) exit_handling(104,4);
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_22_21->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_22_21->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->firing_neuron==0) exit_handling(104,5);
			                       *(FCNN_2L_W_1out_FB1_22_21->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_22_21->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_22_21->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_22_21->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21->create_learning_algorithm==0) exit_handling(104,6);
			                       *(FCNN_2L_W_1out_FB1_22_21->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_22_21->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_22_21);
			                      } /* ; */

/* setting up FCNN_2L_W_1out_FB1_22_21_11 descriptor */
/* neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_21_11_descriptor() sets up neuron_type_descriptor for FCNN_2L_W_1out_FB1_22_21_11 (Fully Connected Neural Network with 2 Layers and input through window function-each of neurones inside neuron population receives input from associated input and its neighborns within distance window radiusand only one output=only one last layer's node and feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) from 2nd layer onto itself and from 2nd layer onto 1st layer and from 1st layer onto itself) class of neurones */
neuron_type_descriptor* setup_FCNN_2L_W_1out_FB1_22_21_11_descriptor()
			                     {
			                       neuron_type_descriptor* FCNN_2L_W_1out_FB1_22_21_11;
			                       FCNN_2L_W_1out_FB1_22_21_11=MANTD((long int)1);
			                       FCNN_2L_W_1out_FB1_22_21_11->name=MAC((long int)118);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+0)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+1)='C';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+2)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+3)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+4)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+5)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+6)='L';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+7)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+8)='W';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+9)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+10)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+11)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+12)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+13)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+14)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+15)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+16)='B';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+17)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+18)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+19)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+20)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+21)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+22)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+23)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+24)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+25)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+26)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+27)='(';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+28)='F';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+29)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+30)='l';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+31)='l';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+32)='y';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+33)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+34)='C';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+35)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+36)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+37)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+38)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+39)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+40)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+41)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+42)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+43)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+44)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+45)='N';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+46)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+47)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+48)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+49)='L';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+50)='a';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+51)='y';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+52)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+53)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+54)='s';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+55)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+56)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+57)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+58)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+59)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+60)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+61)='v';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+62)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+63)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+64)='g';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+65)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+66)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+67)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+68)='p';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+69)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+70)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+71)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+72)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+73)='h';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+74)='r';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+75)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+76)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+77)='g';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+78)='h';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+79)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+80)='W';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+81)='i';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+82)='n';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+83)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+84)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+85)='w';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+86)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+87)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+88)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+89)='o';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+90)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+91)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+92)='p';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+93)='u';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+94)='t';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+95)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+96)='f';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+97)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+98)='e';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+99)='d';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+100)='b';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+101)='a';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+102)='c';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+103)='k';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+104)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+105)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+106)='>';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+107)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+108)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+109)='2';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+110)='>';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+111)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+112)='_';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+113)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+114)='>';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+115)='1';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+116)=')';
			                       *(FCNN_2L_W_1out_FB1_22_21_11->name+117)=' ';
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_Levels=2;
			                       FCNN_2L_W_1out_FB1_22_21_11->inputs_per_first_Level_node=-5+2*0; /* means the input associated with (particular that) neuron (inside neuron_population) and its neighborns (inputs) within distance window_radius (defined with call of FCNN_2L_W_1out_FB1_22_21_11->prepare_input()) plus inputs from feedbacks */
			                       FCNN_2L_W_1out_FB1_22_21_11->nodes_per_Level=MAI((long int)FCNN_2L_W_1out_FB1_22_21_11->number_of_Levels);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(FCNN_2L_W_1out_FB1_22_21_11->nodes_per_Level+1)=1; /* just one output = just one node in the last layer */
			                       FCNN_2L_W_1out_FB1_22_21_11->recurrence=T;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_recurrent_connected_layers=3;
			                       FCNN_2L_W_1out_FB1_22_21_11->source=MAI((long int)FCNN_2L_W_1out_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->source+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->source+1)=2;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->source+2)=1;
			                       FCNN_2L_W_1out_FB1_22_21_11->destination=MAI((long int)FCNN_2L_W_1out_FB1_22_21_11->number_of_recurrent_connected_layers);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->destination+0)=2;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->destination+1)=1;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->destination+2)=1;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_functions_for_creating_neuron=1;
			                       FCNN_2L_W_1out_FB1_22_21_11->create_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->create_neuron==0) exit_handling(105,1); 
			                       *(FCNN_2L_W_1out_FB1_22_21_11->create_neuron+0)=create_FCNN_2L_1out_FB1_22_21_11;
			                       FCNN_2L_W_1out_FB1_22_21_11->create_neuron_population=create_neuron_population;
			                       FCNN_2L_W_1out_FB1_22_21_11->prepare_input=preparing_neuron_population_neuron_inputs_through_window;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_linear_output_functions=3;
			                       FCNN_2L_W_1out_FB1_22_21_11->node_linear_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_linear_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->node_linear_output==0) exit_handling(105,2);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_linear_output+2)=highest_weighted_input;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_node_output_functions=4;
			                       FCNN_2L_W_1out_FB1_22_21_11->node_output=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->node_output==0) exit_handling(105,3);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output+0)=exp_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output+1)=exp_positive_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output+2)=treasureholded_node_output;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output+3)=unchanged_linear_node_output;
			                       FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_of_node_output_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation==0) exit_handling(105,4);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation+0)=exp_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation+2)=treasureholded_node_output_derivation;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->node_output_derivation+3)=unchanged_linear_node_output_derivation;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_firing_functions=2;
			                       FCNN_2L_W_1out_FB1_22_21_11->firing_neuron=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_of_firing_functions*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->firing_neuron==0) exit_handling(105,5);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->firing_neuron+0)=firing_feedback_neuron;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->firing_neuron+1)=firing_recurrent_neuron_with_feedback;
			                       FCNN_2L_W_1out_FB1_22_21_11->number_of_learning_algorithms=2;
			                       FCNN_2L_W_1out_FB1_22_21_11->create_learning_algorithm=(void**)testmalloc((size_t)FCNN_2L_W_1out_FB1_22_21_11->number_of_learning_algorithms*sizeof(void*));
			                       if(FCNN_2L_W_1out_FB1_22_21_11->create_learning_algorithm==0) exit_handling(105,6);
			                       *(FCNN_2L_W_1out_FB1_22_21_11->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(FCNN_2L_W_1out_FB1_22_21_11->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       return(FCNN_2L_W_1out_FB1_22_21_11);
			                      } /* ; */


/* Convolutional NNs */

/* setting up convolutional_layer_neuron descriptor */
/* neuron_type_descriptor* setup_convolutional_layer_neuron_descriptor() sets up neuron_type_descriptor for convolutional_layer_neuron class of neurones, used in simulation of CNs (Convolutional NNs) */
/* adviced when input is combined output of other neurones */
/* prepare input function takes whole input fuzzy set as 3D where the 3rd dimension presents different outputs each presenting 2D picture */
/* spatial neighborhood is preserved by taking always all pixel (outputs) with the same 2D coordinate (inside the output pictures of each output) together */
neuron_type_descriptor* setup_convolutional_layer_neuron_descriptor()
			                     {
			                       neuron_type_descriptor* convolutional_layer_neuron;
			                       convolutional_layer_neuron=MANTD((long int)1);
			                       convolutional_layer_neuron->name=MAC((long int)30);
			                       convolutional_layer_neuron->name="convolutional_layer_neuron ";
			                       convolutional_layer_neuron->number_of_Levels=1;
			                       convolutional_layer_neuron->inputs_per_first_Level_node=-6; /* means the input is defined with input window radius (defined with call of convolutional_layer_neuron->prepare_input()) */
			                       convolutional_layer_neuron->nodes_per_Level=MAI((long int)convolutional_layer_neuron->number_of_Levels);
			                       *(convolutional_layer_neuron->nodes_per_Level+0)=1; /* just one node */
			                       convolutional_layer_neuron->recurrence=F;
			                       convolutional_layer_neuron->number_of_recurrent_connected_layers=0;
			                       convolutional_layer_neuron->source=0;
			                       convolutional_layer_neuron->destination=0;
			                       convolutional_layer_neuron->number_of_functions_for_creating_neuron=1;
			                       convolutional_layer_neuron->create_neuron=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(convolutional_layer_neuron->create_neuron==0) exit_handling(1003,1); 
			                       *(convolutional_layer_neuron->create_neuron+0)=create_FCNN_1L_1out;
			                       convolutional_layer_neuron->create_neuron_population=create_neuron_population; /* vertical_resolution should be replaced with overlaping_radius presenting number of pixels overlaping in each dimension (for example if overlaping_radius means overlaping with each neighbor (left, right, upper, lower) with 2 pixels) */
				                      convolutional_layer_neuron->create_neuron_population_from_nucleotide_base=create_convolutional_layer_neuron_population_from_nucleotide_base; /* inside nucleotide base's handling_input dimensions should be stored first horisontal_dimension, and then vertical_dimension */
		                        convolutional_layer_neuron->prepare_input=preparing_neuron_population_input_by_preserving_spatial_neighborhood_for_convolutional_layer_neuron;
			                       convolutional_layer_neuron->number_linear_output_functions=4;
			                       convolutional_layer_neuron->node_linear_output=(void**)testmalloc((size_t)convolutional_layer_neuron->number_linear_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_linear_output==0) exit_handling(1003,2);
			                       *(convolutional_layer_neuron->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(convolutional_layer_neuron->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(convolutional_layer_neuron->node_linear_output+2)=highest_weighted_input;
			                       *(convolutional_layer_neuron->node_linear_output+3)=RBF_exp;
			                       convolutional_layer_neuron->number_of_node_output_functions=5;
			                       convolutional_layer_neuron->node_output=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_output==0) exit_handling(1003,3);
			                       *(convolutional_layer_neuron->node_output+0)=exp_node_output;
			                       *(convolutional_layer_neuron->node_output+1)=exp_positive_node_output;
			                       *(convolutional_layer_neuron->node_output+2)=tgh_node_output;
			                       *(convolutional_layer_neuron->node_output+3)=treasureholded_node_output;
			                       *(convolutional_layer_neuron->node_output+4)=unchanged_linear_node_output;
			                       convolutional_layer_neuron->node_output_derivation=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_output_derivation==0) exit_handling(1003,4);
			                       *(convolutional_layer_neuron->node_output_derivation+0)=exp_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+4)=unchanged_linear_node_output_derivation;
			                       convolutional_layer_neuron->number_of_firing_functions=1;
			                       convolutional_layer_neuron->firing_neuron=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_firing_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->firing_neuron==0) exit_handling(1003,5);
			                       *(convolutional_layer_neuron->firing_neuron)=firing_standard_neuron;
			                       convolutional_layer_neuron->number_of_learning_algorithms=3;
			                       convolutional_layer_neuron->create_learning_algorithm=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_learning_algorithms*sizeof(void*));
			                       if(convolutional_layer_neuron->create_learning_algorithm==0) exit_handling(1003,6);
			                       *(convolutional_layer_neuron->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(convolutional_layer_neuron->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(convolutional_layer_neuron->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(convolutional_layer_neuron);
			                      } /* ; */

/* neuron_type_descriptor* setup_convolutional_layer_neuron_descriptor1() sets up neuron_type_descriptor for convolutional_layer_neuron class of neurones, used in simulation of CNs (Convolutional NNs) similar to convolutional_layer_neuron_descriptor just with another function for preparing input */
/* adviced when input is the original picture */
/* prepare input function takes whole input fuzzy set as one big 2D picture */
neuron_type_descriptor* setup_convolutional_layer_neuron_descriptor1()
			                     {
			                       neuron_type_descriptor* convolutional_layer_neuron;
			                       convolutional_layer_neuron=MANTD((long int)1);
			                       convolutional_layer_neuron->name=MAC((long int)31);
			                       convolutional_layer_neuron->name="convolutional_layer_neuron1 ";
			                       convolutional_layer_neuron->number_of_Levels=1;
			                       convolutional_layer_neuron->inputs_per_first_Level_node=-6; /* means the input is defined with input window radius (defined with call of convolutional_layer_neuron->prepare_input()) */
			                       convolutional_layer_neuron->nodes_per_Level=MAI((long int)convolutional_layer_neuron->number_of_Levels);
			                       *(convolutional_layer_neuron->nodes_per_Level+0)=1; /* just one node */
			                       convolutional_layer_neuron->recurrence=F;
			                       convolutional_layer_neuron->number_of_recurrent_connected_layers=0;
			                       convolutional_layer_neuron->source=0;
			                       convolutional_layer_neuron->destination=0;
			                       convolutional_layer_neuron->number_of_functions_for_creating_neuron=1;
			                       convolutional_layer_neuron->create_neuron=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(convolutional_layer_neuron->create_neuron==0) exit_handling(1003,7); 
			                       *(convolutional_layer_neuron->create_neuron+0)=create_FCNN_1L_1out;
			                       convolutional_layer_neuron->create_neuron_population=create_neuron_population; /* vertical_resolution should be replaced with overlaping_radius presenting number of pixels overlaping in each dimension (for example if overlaping_radius means overlaping with each neighbor (left, right, upper, lower) with 2 pixels) */
				                      convolutional_layer_neuron->create_neuron_population_from_nucleotide_base=create_convolutional_layer_neuron_population_from_nucleotide_base; /* inside nucleotide base's handling_input dimensions should be stored first horisontal_dimension, and then vertical_dimension */
		                        convolutional_layer_neuron->prepare_input=preparing_neuron_population_input_for_convolutional_layer_neuron;
			                       convolutional_layer_neuron->number_linear_output_functions=4;
			                       convolutional_layer_neuron->node_linear_output=(void**)testmalloc((size_t)convolutional_layer_neuron->number_linear_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_linear_output==0) exit_handling(1003,8);
			                       *(convolutional_layer_neuron->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(convolutional_layer_neuron->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(convolutional_layer_neuron->node_linear_output+2)=highest_weighted_input;
			                       *(convolutional_layer_neuron->node_linear_output+3)=RBF_exp;
			                       convolutional_layer_neuron->number_of_node_output_functions=5;
			                       convolutional_layer_neuron->node_output=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_output==0) exit_handling(1003,9);
			                       *(convolutional_layer_neuron->node_output+0)=exp_node_output;
			                       *(convolutional_layer_neuron->node_output+1)=exp_positive_node_output;
			                       *(convolutional_layer_neuron->node_output+2)=tgh_node_output;
			                       *(convolutional_layer_neuron->node_output+3)=treasureholded_node_output;
			                       *(convolutional_layer_neuron->node_output+4)=unchanged_linear_node_output;
			                       convolutional_layer_neuron->node_output_derivation=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->node_output_derivation==0) exit_handling(1003,10);
			                       *(convolutional_layer_neuron->node_output_derivation+0)=exp_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       *(convolutional_layer_neuron->node_output_derivation+4)=unchanged_linear_node_output_derivation;
			                       convolutional_layer_neuron->number_of_firing_functions=1;
			                       convolutional_layer_neuron->firing_neuron=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_firing_functions*sizeof(void*));
			                       if(convolutional_layer_neuron->firing_neuron==0) exit_handling(1003,11);
			                       *(convolutional_layer_neuron->firing_neuron)=firing_standard_neuron;
			                       convolutional_layer_neuron->number_of_learning_algorithms=3;
			                       convolutional_layer_neuron->create_learning_algorithm=(void**)testmalloc((size_t)convolutional_layer_neuron->number_of_learning_algorithms*sizeof(void*));
			                       if(convolutional_layer_neuron->create_learning_algorithm==0) exit_handling(1003,12);
			                       *(convolutional_layer_neuron->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(convolutional_layer_neuron->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(convolutional_layer_neuron->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       return(convolutional_layer_neuron);
			                      } /* ; */

/* setting up averaging_layer_neuron descriptor */
/* neuron_type_descriptor* setup_averaging_layer_neuron_descriptor() sets up neuron_type_descriptor for averaging_layer_neuron class of neurones, used in simulation of CNs (Convolutional NNs) */
neuron_type_descriptor* setup_averaging_layer_neuron_descriptor()
			                     {
			                       neuron_type_descriptor* averaging_layer_neuron;
			                       averaging_layer_neuron=MANTD((long int)1);
			                       averaging_layer_neuron->name=MAC((long int)26);
			                       averaging_layer_neuron->name="averaging_layer_neuron ";
			                       averaging_layer_neuron->number_of_Levels=1;
			                       averaging_layer_neuron->inputs_per_first_Level_node=-6; /* means the input is defined with input window radius (defined with call of averaging_layer_neuron->prepare_input()) */
			                       averaging_layer_neuron->nodes_per_Level=MAI((long int)averaging_layer_neuron->number_of_Levels);
			                       *(averaging_layer_neuron->nodes_per_Level+0)=1; /* just one node */
			                       averaging_layer_neuron->recurrence=F;
			                       averaging_layer_neuron->number_of_recurrent_connected_layers=0;
			                       averaging_layer_neuron->source=0;
			                       averaging_layer_neuron->destination=0;
			                       averaging_layer_neuron->number_of_functions_for_creating_neuron=2;
			                       averaging_layer_neuron->create_neuron=(void**)testmalloc((size_t)averaging_layer_neuron->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(averaging_layer_neuron->create_neuron==0) exit_handling(1004,1); 
			                       *(averaging_layer_neuron->create_neuron+0)=create_FCNN_1L_1out;
			                       *(averaging_layer_neuron->create_neuron+1)=create_FCNN_1L_1out_fixed_weights;
			                       averaging_layer_neuron->create_neuron_population=create_neuron_population; /* vertical_resolution should be replaced with overlaping_radius presenting number of pixels overlaping in each dimension (for example if overlaping_radius means overlaping with each neighbor (left, right, upper, lower) with 2 pixels) */ 
			                       averaging_layer_neuron->create_neuron_population_from_nucleotide_base=create_convolutional_layer_neuron_population_from_nucleotide_base; /* this function suits also for averaging layer neuron populations */
			                       averaging_layer_neuron->prepare_input=preparing_neuron_population_input_for_convolutional_layer_neuron;
			                       averaging_layer_neuron->number_linear_output_functions=4;
			                       averaging_layer_neuron->node_linear_output=(void**)testmalloc((size_t)averaging_layer_neuron->number_linear_output_functions*sizeof(void*));
			                       if(averaging_layer_neuron->node_linear_output==0) exit_handling(1004,2);
			                       *(averaging_layer_neuron->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(averaging_layer_neuron->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(averaging_layer_neuron->node_linear_output+2)=highest_weighted_input;
			                       *(averaging_layer_neuron->node_linear_output+3)=RBF_exp;
			                       averaging_layer_neuron->number_of_node_output_functions=5;
			                       averaging_layer_neuron->node_output=(void**)testmalloc((size_t)averaging_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(averaging_layer_neuron->node_output==0) exit_handling(1004,3);
			                       *(averaging_layer_neuron->node_output+0)=exp_node_output;
			                       *(averaging_layer_neuron->node_output+1)=exp_positive_node_output;
			                       *(averaging_layer_neuron->node_output+2)=tgh_node_output;
			                       *(averaging_layer_neuron->node_output+3)=treasureholded_node_output;
			                       *(averaging_layer_neuron->node_output+4)=unchanged_linear_node_output;
			                       averaging_layer_neuron->node_output_derivation=(void**)testmalloc((size_t)averaging_layer_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(averaging_layer_neuron->node_output_derivation==0) exit_handling(1004,4);
			                       *(averaging_layer_neuron->node_output_derivation+0)=exp_node_output_derivation;
			                       *(averaging_layer_neuron->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(averaging_layer_neuron->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(averaging_layer_neuron->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       *(averaging_layer_neuron->node_output_derivation+4)=unchanged_linear_node_output_derivation;
			                       averaging_layer_neuron->number_of_firing_functions=1;
			                       averaging_layer_neuron->firing_neuron=(void**)testmalloc((size_t)averaging_layer_neuron->number_of_firing_functions*sizeof(void*));
			                       if(averaging_layer_neuron->firing_neuron==0) exit_handling(1004,5);
			                       *(averaging_layer_neuron->firing_neuron+0)=firing_standard_neuron;
			                       averaging_layer_neuron->number_of_learning_algorithms=5;
			                       averaging_layer_neuron->create_learning_algorithm=(void**)testmalloc((size_t)averaging_layer_neuron->number_of_learning_algorithms*sizeof(void*));
			                       if(averaging_layer_neuron->create_learning_algorithm==0) exit_handling(1004,6);
			                       *(averaging_layer_neuron->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(averaging_layer_neuron->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(averaging_layer_neuron->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       *(averaging_layer_neuron->create_learning_algorithm+3)=BP_without_learning_algorithm_setup;
			                       *(averaging_layer_neuron->create_learning_algorithm+4)=no_learning_neuron_learning_algorithm_setup;
			                       return(averaging_layer_neuron);
			                      } /* ; */


/* setting up simple_neuron descriptor */
/* neuron_type_descriptor* setup_simple_neuron_descriptor() sets up neuron_type_descriptor for simple_neuron class of neurones, used in simulation of CNs (Convolutional NNs) */
neuron_type_descriptor* setup_simple_neuron_descriptor()
			                     {
			                       neuron_type_descriptor* simple_neuron;
			                       simple_neuron=MANTD((long int)1);
			                       simple_neuron->name=MAC((long int)17);
			                       simple_neuron->name="simple_neuron ";
			                       simple_neuron->number_of_Levels=1;
			                       simple_neuron->inputs_per_first_Level_node=0; /* means all inputs are associated with all 1st Level nodes */
			                       simple_neuron->nodes_per_Level=MAI((long int)simple_neuron->number_of_Levels);
			                       *(simple_neuron->nodes_per_Level+0)=1; /* just one node */
			                       simple_neuron->recurrence=F;
			                       simple_neuron->number_of_recurrent_connected_layers=0;
			                       simple_neuron->source=0;
			                       simple_neuron->destination=0;
			                       simple_neuron->number_of_functions_for_creating_neuron=2;
			                       simple_neuron->create_neuron=(void**)testmalloc((size_t)simple_neuron->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(simple_neuron->create_neuron==0) exit_handling(106,1); 
			                       *(simple_neuron->create_neuron+0)=create_FCNN_1L_1out;
			                       *(simple_neuron->create_neuron+1)=create_FCNN_1L_1out_fixed_weights;
			                       simple_neuron->create_neuron_population=create_neuron_population; /* vertical_resolution should be replaced with overlaping_radius presenting number of pixels overlaping in each dimension (for example if overlaping_radius means overlaping with each neighbor (left, right, upper, lower) with 2 pixels) */ 
			                       simple_neuron->create_neuron_population_from_nucleotide_base=create_convolutional_layer_neuron_population_from_nucleotide_base; /* this function is porposed for neuron populations whose neurones overlapping their input (fields). Therefore nucleotide_base's elements: handling_input, overlaping_in_each_dimension, and window_side_lenght must be filled overlaping_in_each_dimension=0, while handling_input(vector dimensions) and window side_lenght must be combined that window_side_lenght is greater or equal to each dimension inside handling_input. */
			                       simple_neuron->prepare_input=0;
			                       simple_neuron->number_linear_output_functions=7;
			                       simple_neuron->node_linear_output=(void**)testmalloc((size_t)simple_neuron->number_linear_output_functions*sizeof(void*));
			                       if(simple_neuron->node_linear_output==0) exit_handling(106,2);
			                       *(simple_neuron->node_linear_output+0)=sum_of_all_weighted_inputs;
			                       *(simple_neuron->node_linear_output+1)=product_of_all_weighted_inputs;
			                       *(simple_neuron->node_linear_output+2)=highest_weighted_input;
			                       *(simple_neuron->node_linear_output+3)=RBF_exp;
			                       *(simple_neuron->node_linear_output+4)=entropy_Reyni;
			                       *(simple_neuron->node_linear_output+5)=entropy_Deluce_Termini;
			                       *(simple_neuron->node_linear_output+6)=sum_of_all_times_exponent_of_last_weighted_inputs;
				                       simple_neuron->number_of_node_output_functions=5;
			                       simple_neuron->node_output=(void**)testmalloc((size_t)simple_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(simple_neuron->node_output==0) exit_handling(106,3);
			                       *(simple_neuron->node_output+0)=exp_node_output;
			                       *(simple_neuron->node_output+1)=exp_positive_node_output;
			                       *(simple_neuron->node_output+2)=tgh_node_output;
			                       *(simple_neuron->node_output+3)=treasureholded_node_output;
			                       *(simple_neuron->node_output+4)=unchanged_linear_node_output;
			                       simple_neuron->node_output_derivation=(void**)testmalloc((size_t)simple_neuron->number_of_node_output_functions*sizeof(void*));
			                       if(simple_neuron->node_output_derivation==0) exit_handling(106,4);
			                       *(simple_neuron->node_output_derivation+0)=exp_node_output_derivation;
			                       *(simple_neuron->node_output_derivation+1)=exp_positive_node_output_derivation;
			                       *(simple_neuron->node_output_derivation+2)=tgh_node_output_derivation;
			                       *(simple_neuron->node_output_derivation+3)=treasureholded_node_output_derivation;
			                       *(simple_neuron->node_output_derivation+4)=unchanged_linear_node_output_derivation;
			                       simple_neuron->number_of_firing_functions=1;
			                       simple_neuron->firing_neuron=(void**)testmalloc((size_t)simple_neuron->number_of_firing_functions*sizeof(void*));
			                       if(simple_neuron->firing_neuron==0) exit_handling(106,5);
			                       *(simple_neuron->firing_neuron+0)=firing_standard_neuron;
			                       simple_neuron->number_of_learning_algorithms=8;
			                       simple_neuron->create_learning_algorithm=(void**)testmalloc((size_t)simple_neuron->number_of_learning_algorithms*sizeof(void*));
			                       if(simple_neuron->create_learning_algorithm==0) exit_handling(106,6);
			                       *(simple_neuron->create_learning_algorithm+0)=BP_neuron_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+1)=weight_shaking_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+2)=BP_RBF_exp_neuron_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+3)=BP_entropy_Deluce_Termini_neuron_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+4)=BP_entropy_Reyni_neuron_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+5)=BP_without_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+6)=no_learning_neuron_learning_algorithm_setup;
			                       *(simple_neuron->create_learning_algorithm+7)=BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm_setup;
			                       return(simple_neuron);
			                      } /* ; */



/* common functions for almost all types of neurones */

void *creating_neuron_population_output(neuron_population *np)
/* creates neuron population's output fuzzy set whose fuzzy objects are neuron population's neurones' output fuzzy objects in the same order as neurones inside neuron population */
    {
      int i;
      np->output=MAFS((long int)1);
      np->output->name=MAC((long int)7);
      *(np->output->name+0)='O';
      *(np->output->name+1)='U';
      *(np->output->name+2)='T';
      *(np->output->name+3)='P';
      *(np->output->name+4)='U';
      *(np->output->name+5)='T';
      *(np->output->name+6)=' ';
      np->output->number_of_objects=np->number_of_neurones;
      np->output->objects=MApFO((long int)np->output->number_of_objects);
      for(i=0; ioutput->number_of_objects; i++)
         *(np->output->objects+i)=(*(np->neurones))->output;
     } /* ; */
      
enum Bool setup_weights_pointers(Level* actual_Level, Level *previous_Level)
/* fill pointers of actual_level's nodes' characteristics (weights) toward previous_Level's nodes. Characteristics (weights) of each actual_Level's node points toward each of previous_Level's nodes (it means each actual_Level's node consists pointers toward all previous_Level nodes). In the case any actual_Level's node has different number of characteristics (weights) than previous_Level has nodes F=0 is returned. Otherwise T=1 i returned. */
         {
	   enum Bool check=T;
	   int i,j;
	   for(j=0; jnumber_of_nodes; j++)
	      {
		for(i=0, (*(actual_Level->nodes+j))->actual=(*(actual_Level->nodes+j))->first; (inumber_of_nodes)&&((*(actual_Level->nodes+j))->actual!=0); i++, (*(actual_Level->nodes+j))->actual=(*(actual_Level->nodes+j))->actual->follow)
		   (*(actual_Level->nodes+j))->actual->set=*(previous_Level->nodes+i);
		if(((*(actual_Level->nodes+j))->actual!=0)||(i!=previous_Level->number_of_nodes)) check=F;
	       };
	   return(check);
	  } /* ; */

float even_minus_odd(fuzzy_object *node, int Level_number)
/* Sum of weighted odd inputs is substracted from sum of weighted even inputs. 0 is taken as even number! first_characteristic points on 0 input, first_characteristic->follow points on 1st input etc. */
       {
         float sum=0.0;
         int i;
         if(Level_number==1)
           for(node->actual=node->first, i=0; node->actual!=0; i++, node->actual=node->actual->follow)
              sum+=(float)pow((double)-1,(double)i)*((*((float*)(node->actual->set))))*node->actual->membership;
         else
           for(node->actual=node->first, i=0; node->actual!=0; i++, node->actual=node->actual->follow)
              sum+=(float)pow((double)-1,(double)i)*node->actual->set->m.notes*node->actual->membership;
         return(sum);
         } /* ; */

float Max_output_node(fuzzy_object *node)
/* calculate Maximum of all weighted inputs into the node and DOESN'T WRITE into node's m.notes */
      {
        register float weighted_input, Max=-10.0;
        for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
            {
              weighted_input=node->actual->set->m.notes*node->actual->membership;
              if(weighted_input>Max) Max=weighted_input;
             };
         return(Max);
        } /* ; */

float exp_node_output(float linear_output)
/* node's output is non-linearised using exponential function y(x)=-1+1/(1+e^(-node_output_e_exponent*x)); where node_output_e_exponent is declared as extern and preset on 5.0. Output is also filtered with treasurehold set up over common/extern variable "treasureholdadd". */
/* THRESHOLD MUSN'T BE FORGOTEN TO BE SETUP as outputs are between -1 and 1 so threshold should be -1.0 */
      {
        extern char node_output_type;
        node_output_type='E';
        return(node_output(linear_output));
       } /* ; */

float exp_node_output_derivation(float value)
/* output is the first derivation of exp_node_output() function for the given value */
      {
        extern char node_output_type;
        node_output_type='E';
        return(node_output_derivation(value));
       } /* ; */

float exp_positive_node_output(float linear_output)
/* node's output is non-linearised using exponential function y(x)=1/(1+e^(-node_output_e_exponent*x)). Output is also filtered with treasurehold set up over common/extern variable "treasureholdadd". */
      {
        extern char node_output_type;
        node_output_type='e';
        return(node_output(linear_output));
       } /* ; */

float exp_positive_node_output_derivation(float value)
/* output is the first derivation of exp_node_output() function for the given value */
      {
        extern char node_output_type;
        node_output_type='e';
        return(node_output_derivation(value));
       } /* ; */

float tgh_node_output(float linear_output)
/* node's output is non-linearised using tanges hiperbolic function y(x)=(tgh(2*x*PI-PI)+1)/2. Output is also filtered with treasurehold set up over common/extern variable "treasureholdadd". */
      {
        extern char node_output_type;
        node_output_type='t';
        return(node_output(linear_output));
       } /* ; */

float tgh_node_output_derivation(float value)
/* output is the first derivation of tgh_node_output() function for the given value */
      {
        extern char node_output_type;
        node_output_type='t';
        return(node_output_derivation(value));
       } /* ; */

float treasureholded_node_output(float linear_output)
/* node's output is non-linearised through filtering with treasurehold set up over common/extern variable "treasureholdadd". */
      {
        extern char node_output_type;
        node_output_type='l';
        return(node_output(linear_output));
       } /* ; */

float treasureholded_node_output_derivation(float value)
/* output is the first derivation of treasureholded_node_output() function for the given value */
      {
        extern char node_output_type;
        node_output_type='l';
        return(node_output_derivation(value));
       } /* ; */

float unchanged_linear_node_output(float linear_output)
/* output is unchanged linear node output */
     {
       /* return((linear_output>1.0)?1.0:(linear_output<0.0)?0.00001:linear_output); */
       return(linear_output);
      } /* ; */

float unchanged_linear_node_output_derivation(float value)
/* output is the first derivation of unchanged_linear_node_output() function for the given value */
     {
       return(1.0);
      } /* ; */

neuron *create_FCNN_1L_1out(fuzzy_set *input)
/* create the neuron of FCNN with only 1 layer and only 1 characteristic in the output fuzzy object type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to one node). Output fuzzy object consists just one characteristics as there are nodes in the first and only Level. */
          {
            neuron *head;
            int i,j;
            /*float *weights;
	    	enum Bool check;*/
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=1;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	head->first_Level->number_of_nodes=1;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
          	*(head->first_Level->nodes+0)=MAFO((long int)1);
          	(*(head->first_Level->nodes+0))->m.notes=0.0;
            (*(head->first_Level->nodes+0))->actual=0;
            (*(head->first_Level->nodes+0))->first=0;
            
          	for(i=0, (*(head->first_Level->nodes+0))->number_of_characteristics=0; inumber_of_objects; i++)
          	   (*(head->first_Level->nodes+0))->number_of_characteristics+=(*(input->objects+i))->number_of_characteristics;
            for(j=0; jnumber_of_objects; j++)
               for((*(input->objects+j))->actual=(*(input->objects+j))->first; (*(input->objects+j))->actual!=0;(*(input->objects+j))->actual=(*(input->objects+j))->actual->follow)
            	  {
            	 	(*(head->first_Level->nodes+0))->last=MACl((long int)1);
            	 	if((*(head->first_Level->nodes+0))->first==0) (*(head->first_Level->nodes+0))->first=(*(head->first_Level->nodes+0))->last;
            	 	(*(head->first_Level->nodes+0))->last->name=0;
            	 	(*(head->first_Level->nodes+0))->last->membership=1.0;
            	 	(*(head->first_Level->nodes+0))->last->set=(fuzzy_object*)(&((*(input->objects+j))->actual->membership));
            	 	(*(head->first_Level->nodes+0))->last->follow=0;
            	 	(*(head->first_Level->nodes+0))->last->ahead=(*(head->first_Level->nodes+0))->actual;
            	 	if((*(head->first_Level->nodes+0))->actual!=0) (*(head->first_Level->nodes+0))->actual->follow=(*(head->first_Level->nodes+0))->last;
            	 	(*(head->first_Level->nodes+0))->actual=(*(head->first_Level->nodes+0))->last;
           	 	   };
           	 
           	/* checking if BIAS_fuzzy_object is already allocated, and allocating it if not */
           	if(BIAS_fuzzy_object==NULL)
           		{
           				BIAS_fuzzy_object=MAFO((long int)1);
           				BIAS_fuzzy_object->m.notes=(float)BIAS;
           				BIAS_fuzzy_object->first=0;
           				BIAS_fuzzy_object->actual=0;
           				BIAS_fuzzy_object->last=0;
           				BIAS_fuzzy_object->number_of_characteristics=0;
           			};	
           			
           	/* adding BIAS input */
           	(*(head->first_Level->nodes+0))->actual=(*(head->first_Level->nodes+0))->last;
           	(*(head->first_Level->nodes+0))->last=MACl((long int)1);
            (*(head->first_Level->nodes+0))->last->name=MAC((long int)sizeof("BIAS"));
            sprintf((*(head->first_Level->nodes+0))->last->name, "BIAS");
            (*(head->first_Level->nodes+0))->last->membership=1.0;
            (*(head->first_Level->nodes+0))->last->set=(fuzzy_object*)(&(BIAS_fuzzy_object->m.notes));
            (*(head->first_Level->nodes+0))->last->follow=0;
            (*(head->first_Level->nodes+0))->last->ahead=(*(head->first_Level->nodes+0))->actual;
            if((*(head->first_Level->nodes+0))->actual!=0) (*(head->first_Level->nodes+0))->actual->follow=(*(head->first_Level->nodes+0))->last;
											 (*(head->first_Level->nodes+0))->number_of_characteristics++;

            /* creation of output */
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            filling_weights_with_randum_numbers(head);
            return(head);
           } /* ; */

neuron *create_FCNN(fuzzy_set *input, int number_of_Levels)
/* create the neuron of FCNN type with given number of layers. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level. Output fuzzy object consists as many characteristics as there are nodes in the last Level (= number of nodes in each Level = number of input fuzzy set objects' characteristics). */
          {
            neuron *head;
            int i,j,k;
            /*float *weights;
	    	enum Bool check;*/
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=number_of_Levels;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	                       	 
           /* checking if BIAS_fuzzy_object is already allocated, and allocating it if not */
           if(BIAS_fuzzy_object==NULL)
           		{
           				BIAS_fuzzy_object=MAFO((long int)1);
           				BIAS_fuzzy_object->m.notes=(float)BIAS;
           				BIAS_fuzzy_object->first=0;
           				BIAS_fuzzy_object->actual=0;
           				BIAS_fuzzy_object->last=0;
           				BIAS_fuzzy_object->number_of_characteristics=0;
           			};	
           			
          	for(i=0, head->first_Level->number_of_nodes=0; inumber_of_objects; i++)
          		head->first_Level->number_of_nodes+=(*(input->objects+i))->number_of_characteristics;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
            for(i=0; ifirst_Level->number_of_nodes; i++)
               {
            	 *(head->first_Level->nodes+i)=MAFO((long int)1);
            	 (*(head->first_Level->nodes+i))->number_of_characteristics=head->first_Level->number_of_nodes;
            	 (*(head->first_Level->nodes+i))->m.notes=0.0;
            	 (*(head->first_Level->nodes+i))->actual=0;
            	 (*(head->first_Level->nodes+i))->first=0;
            	 for(j=0, k=0; jnumber_of_objects; j++)
            	 	for((*(input->objects+j))->actual=(*(input->objects+j))->first; (*(input->objects+j))->actual!=0;(*(input->objects+j))->actual=(*(input->objects+j))->actual->follow, k++)
            	 	   {
            	 	     (*(head->first_Level->nodes+i))->last=MACl((long int)1);
            	 	     if((*(head->first_Level->nodes+i))->first==0) (*(head->first_Level->nodes+i))->first=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->last->name=0;
            	 	     (*(head->first_Level->nodes+i))->last->membership=1.0;
            	 	     (*(head->first_Level->nodes+i))->last->set=(fuzzy_object*)(&((*(input->objects+j))->actual->membership));
            	 	     (*(head->first_Level->nodes+i))->last->follow=0;
            	 	     (*(head->first_Level->nodes+i))->last->ahead=(*(head->first_Level->nodes+i))->actual;
            	 	     if((*(head->first_Level->nodes+i))->actual!=0) (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
           	 	        };

           	 	  /* adding BIAS input */
           					(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
           	    (*(head->first_Level->nodes+i))->last=MACl((long int)1);
                (*(head->first_Level->nodes+i))->last->name=MAC((long int)sizeof("BIAS"));
                sprintf((*(head->first_Level->nodes+i))->last->name, "BIAS");
                (*(head->first_Level->nodes+i))->last->membership=1.0;
                (*(head->first_Level->nodes+i))->last->set=(fuzzy_object*)(&(BIAS_fuzzy_object->m.notes));
                (*(head->first_Level->nodes+i))->last->follow=0;
                (*(head->first_Level->nodes+i))->last->ahead=(*(head->first_Level->nodes+i))->actual;
                if((*(head->first_Level->nodes+i))->actual!=0) (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
						    					 (*(head->first_Level->nodes+i))->number_of_characteristics++;

              };
 
												/* creation of remained Levels */
            for(j=2; jnumber_of_Levels+1; j++)
            	{
            	  head->last_Level=MALe((long int)1);
          		  head->actual_Level->follow=head->last_Level;
          		  head->last_Level->ahead=head->actual_Level;
           	  head->actual_Level=head->last_Level;
          		  head->last_Level->number_of_nodes=head->last_Level->ahead->number_of_nodes;
          		  head->last_Level->Level_number=j;
          		  head->last_Level->follow=0;
          		  head->last_Level->nodes=MApFO((long int)head->last_Level->number_of_nodes);
            	  for(i=0; ilast_Level->number_of_nodes; i++)
            	     {
            	        *(head->last_Level->nodes+i)=MAFO((long int)1);
            	 	    (*(head->last_Level->nodes+i))->number_of_characteristics=head->last_Level->ahead->number_of_nodes;
            	 	    (*(head->last_Level->nodes+i))->m.notes=0.0;
            	 	    (*(head->last_Level->nodes+i))->actual=0;
            	 		   (*(head->last_Level->nodes+i))->first=0;
            	 	    for(k=0; k<(*(head->last_Level->nodes+i))->number_of_characteristics; k++)
            	    	  {
            	      		(*(head->last_Level->nodes+i))->last=MACl((long int)1);
            	      		if((*(head->last_Level->nodes+i))->first==0) (*(head->last_Level->nodes+i))->first=(*(head->last_Level->nodes+i))->last;
            	      		(*(head->last_Level->nodes+i))->last->name=0;
            	      		(*(head->last_Level->nodes+i))->last->membership=1.0;
            	      		(*(head->last_Level->nodes+i))->last->set=*(head->last_Level->ahead->nodes+k);
            	      		(*(head->last_Level->nodes+i))->last->follow=0;
            	      		(*(head->last_Level->nodes+i))->last->ahead=(*(head->last_Level->nodes+i))->actual;
            	      		if((*(head->last_Level->nodes+i))->actual!=0) (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	      		(*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	     	   };
            	     	 
            	     	 /* adding BIAS input */
           								 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
               	    (*(head->last_Level->nodes+i))->last=MACl((long int)1);
                    (*(head->last_Level->nodes+i))->last->name=MAC((long int)sizeof("BIAS"));
                    sprintf((*(head->last_Level->nodes+i))->last->name, "BIAS");
                    (*(head->last_Level->nodes+i))->last->membership=1.0;
                    (*(head->last_Level->nodes+i))->last->set=BIAS_fuzzy_object;
                    (*(head->last_Level->nodes+i))->last->follow=0;
                    (*(head->last_Level->nodes+i))->last->ahead=(*(head->last_Level->nodes+i))->actual;
                    if((*(head->last_Level->nodes+i))->actual!=0) (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
						        					 (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	     	   
                	  };
             	 };
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            filling_weights_with_randum_numbers(head);
            return(head);
           } /* ; */
 
neuron *create_FCNN_with_only_1_output(fuzzy_set *input, int number_of_Levels)
/* create the neuron of FCNN with only 1 characteristic in the output fuzzy object type and with given number of layers. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level. Output fuzzy object consists just one characteristics as there are nodes in the last Level, while number of nodes per Level linearly decreases from the first Level (the same number of nodes as input fuzzy set characteristics) toward the last one (only one characteristic). */
          {
            neuron *head;
            int i,j,k;
            /*float *weights;
	    	enum Bool check;*/
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=number_of_Levels;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	          	                       	 
           /* checking if BIAS_fuzzy_object is already allocated, and allocating it if not */
           if(BIAS_fuzzy_object==NULL)
           		{
           				BIAS_fuzzy_object=MAFO((long int)1);
           				BIAS_fuzzy_object->m.notes=(float)BIAS;
           				BIAS_fuzzy_object->first=0;
           				BIAS_fuzzy_object->actual=0;
           				BIAS_fuzzy_object->last=0;
           				BIAS_fuzzy_object->number_of_characteristics=0;
           			};	
           			
          	for(i=0, head->first_Level->number_of_nodes=0; inumber_of_objects; i++)
          		head->first_Level->number_of_nodes+=(*(input->objects+i))->number_of_characteristics;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
            for(i=0; ifirst_Level->number_of_nodes; i++)
               {
            	 *(head->first_Level->nodes+i)=MAFO((long int)1);
            	 (*(head->first_Level->nodes+i))->number_of_characteristics=head->first_Level->number_of_nodes;
            	 (*(head->first_Level->nodes+i))->m.notes=0.0;
            	 (*(head->first_Level->nodes+i))->actual=0;
            	 (*(head->first_Level->nodes+i))->first=0;
            	 for(j=0, k=0; jnumber_of_objects; j++)
            	 	for((*(input->objects+j))->actual=(*(input->objects+j))->first; (*(input->objects+j))->actual!=0;(*(input->objects+j))->actual=(*(input->objects+j))->actual->follow, k++)
            	 	   {
            	 	     (*(head->first_Level->nodes+i))->last=MACl((long int)1);
            	 	     if((*(head->first_Level->nodes+i))->first==0) (*(head->first_Level->nodes+i))->first=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->last->name=0;
            	 	     (*(head->first_Level->nodes+i))->last->membership=1.0;
            	 	     (*(head->first_Level->nodes+i))->last->set=(fuzzy_object*)(&((*(input->objects+j))->actual->membership));
            	 	     (*(head->first_Level->nodes+i))->last->follow=0;
            	 	     (*(head->first_Level->nodes+i))->last->ahead=(*(head->first_Level->nodes+i))->actual;
            	 	     if((*(head->first_Level->nodes+i))->actual!=0) (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
           	 	        };

           	 	  /* adding BIAS input */
           					(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
           	    (*(head->first_Level->nodes+i))->last=MACl((long int)1);
                (*(head->first_Level->nodes+i))->last->name=MAC((long int)sizeof("BIAS"));
                sprintf((*(head->first_Level->nodes+i))->last->name, "BIAS");
                (*(head->first_Level->nodes+i))->last->membership=1.0;
                (*(head->first_Level->nodes+i))->last->set=(fuzzy_object*)(&(BIAS_fuzzy_object->m.notes));
                (*(head->first_Level->nodes+i))->last->follow=0;
                (*(head->first_Level->nodes+i))->last->ahead=(*(head->first_Level->nodes+i))->actual;
                if((*(head->first_Level->nodes+i))->actual!=0) (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
						    					 (*(head->first_Level->nodes+i))->number_of_characteristics++;

                };

            /* creation of remained Levels */
            for(j=2; jnumber_of_Levels+1; j++)
            	{
            	  head->last_Level=MALe((long int)1);
          		  head->actual_Level->follow=head->last_Level;
          		  head->last_Level->ahead=head->actual_Level;
           	      head->actual_Level=head->last_Level;
          		  head->last_Level->number_of_nodes=(int)ceil((double)((head->first_Level->number_of_nodes-1.0)*((head->number_of_Levels-j)/(head->number_of_Levels-1.0))+1.0)); /* number of nodes in actual Level = the lowest integer not less than { (number of nodes in the first Level - number of nodes in the last Level(=1))*[(number of Levels - actual Level number)/(number of Levels -1)] + number of nodes in the last Level(=1) } */
          		  head->last_Level->Level_number=j;
          		  head->last_Level->follow=0;
          		  head->last_Level->nodes=MApFO((long int)head->last_Level->number_of_nodes);
            	  for(i=0; ilast_Level->number_of_nodes; i++)
            	     {
            	        *(head->last_Level->nodes+i)=MAFO((long int)1);
            	 	    (*(head->last_Level->nodes+i))->number_of_characteristics=head->last_Level->ahead->number_of_nodes;
            	 	    (*(head->last_Level->nodes+i))->m.notes=0.0;
            	 	    (*(head->last_Level->nodes+i))->actual=0;
            	 		   (*(head->last_Level->nodes+i))->first=0;
            	 	    for(k=0; k<(*(head->last_Level->nodes+i))->number_of_characteristics; k++)
            	    	  {
            	      		(*(head->last_Level->nodes+i))->last=MACl((long int)1);
            	      		if((*(head->last_Level->nodes+i))->first==0) (*(head->last_Level->nodes+i))->first=(*(head->last_Level->nodes+i))->last;
            	      		(*(head->last_Level->nodes+i))->last->name=0;
            	      		(*(head->last_Level->nodes+i))->last->membership=1.0;
            	      		(*(head->last_Level->nodes+i))->last->set=*(head->last_Level->ahead->nodes+k);
            	      		(*(head->last_Level->nodes+i))->last->follow=0;
            	      		(*(head->last_Level->nodes+i))->last->ahead=(*(head->last_Level->nodes+i))->actual;
            	      		if((*(head->last_Level->nodes+i))->actual!=0) (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	      		(*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	     	   };
            	     	               	     	 
            	     	 /* adding BIAS input */
           								 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
               	    (*(head->last_Level->nodes+i))->last=MACl((long int)1);
                    (*(head->last_Level->nodes+i))->last->name=MAC((long int)sizeof("BIAS"));
                    sprintf((*(head->last_Level->nodes+i))->last->name, "BIAS");
                    (*(head->last_Level->nodes+i))->last->membership=1.0;
                    (*(head->last_Level->nodes+i))->last->set=BIAS_fuzzy_object;
                    (*(head->last_Level->nodes+i))->last->follow=0;
                    (*(head->last_Level->nodes+i))->last->ahead=(*(head->last_Level->nodes+i))->actual;
                    if((*(head->last_Level->nodes+i))->actual!=0) (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
						        					 (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	     	   
                	  };
             	 };
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            filling_weights_with_randum_numbers(head);
            return(head);
           } /* ; */
                     
neuron *create_recurrent_FCNN(fuzzy_set *input, int number_of_Levels, int number_of_recurrent_connections, int *source, int *destination)
/* create the recurrent neuron of FCNN type with given number of layers (int number_of_Levels), number of feedback connections (int number_of_recurrent_connections) and given vector of feedback origin (int *source) and vector of feedback destination (int *destination). Vectors source and destination have number_of_recurrent_connections elements each and their elements presents pairs (source,destination) each pair presents one recurrent (feedback) (and no necessary recurrent) connection. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level plus, if the Level number is inside the vector destination, from its pair (in the vector source) nodes' output. Output fuzzy object consists as many characteristics as there are nodes in the last Level (= number of nodes in each Level = number of input fuzzy set objects' characteristics). */
/* each characteristic presenting feedback weight (means all characteristics created in this function) has name "r " */
      {
        neuron *head;
        Level *s, *d;
        int i,j,k;
        head=create_FCNN(input, number_of_Levels);
        head->name=MAC((long int)5);
        head->name="r ";
        for(i=0; ihead->number_of_Levels)||(*(destination+i)>head->number_of_Levels)) exit_handling(90,1); /* means Level number in either vector source or destination (or in both of them) is higher than number of Levels in the neuron */
        for(i=0; ifirst_Level; j<*(source+i); j++)
                s=s->follow;
             for(j=1, d=head->first_Level; j<*(destination+i); j++)
                d=d->follow;
             for(j=0; jnumber_of_nodes; j++)
                for(k=0; knumber_of_nodes; k++)
                   {
                     (*(d->nodes+j))->number_of_characteristics++;
                     (*(d->nodes+j))->actual=(*(d->nodes+j))->last;
                     (*(d->nodes+j))->last=MACl((long int)1);
                     (*(d->nodes+j))->last->name=MAC((long int)5);
                     (*(d->nodes+j))->last->name="r ";
                     (*(d->nodes+j))->last->membership=(float)(rand()/32767.);
                     (*(d->nodes+j))->last->set=*(s->nodes+k);
                     (*(d->nodes+j))->last->follow=0;
                     (*(d->nodes+j))->last->ahead=(*(d->nodes+j))->actual;
                     (*(d->nodes+j))->actual->follow=(*(d->nodes+j))->last;
                    };
            };
        return(head);
       } /* ; */

neuron *create_recurrent_FCNN_with_only_1_output(fuzzy_set *input, int number_of_Levels, int number_of_recurrent_connections, int *source, int *destination)
/* create the recurrent neuron of FCNN with only 1 output type with given number of layers (int number_of_Levels), number of feedback connections (int number_of_recurrent_connections) and given vector of feedback origin (int *source) and vector of feedback destination (int *destination). Vectors source and destination have number_of_recurrent_connections elements each and their elements presents pairs (source,destination) each pair presents one recurrent (feedback) (and no necessary recurrent) connection. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level plus, if the Level number is inside the vector destination, from its pair (in the vector source) nodes' output. Output fuzzy object consists as many characteristics as there are nodes in the last Level (just one). Number of nodes linearly decrease from the first layer (as many nodes as input characteristics) toward the last layer (only one node). */
/* each characteristic presenting feedback weight (means all characteristics created in this function) has name "r " */
      {
        neuron *head;
        Level *s, *d;
        int i,j,k;
        head=create_FCNN_with_only_1_output(input, number_of_Levels);
        head->name=MAC((long int)5);
        head->name="r ";
        for(i=0; ihead->number_of_Levels)||(*(destination+i)>head->number_of_Levels)) exit_handling(91,1); /* means Level number in either vector source or destination (or in both of them) is higher than number of Levels in the neuron */
        for(i=0; ifirst_Level; j<*(source+i); j++)
                s=s->follow;
             for(j=1, d=head->first_Level; j<*(destination+i); j++)
                d=d->follow;
             for(j=0; jnumber_of_nodes; j++)
                for(k=0; knumber_of_nodes; k++)
                   {
                     (*(d->nodes+j))->number_of_characteristics++;
                     (*(d->nodes+j))->actual=(*(d->nodes+j))->last;
                     (*(d->nodes+j))->last=MACl((long int)1);
                     (*(d->nodes+j))->last->name=MAC((long int)5);
                     (*(d->nodes+j))->last->name="r ";
                     (*(d->nodes+j))->last->membership=(float)(rand()/32767.);
                     (*(d->nodes+j))->last->set=*(s->nodes+k);
                     (*(d->nodes+j))->last->follow=0;
                     (*(d->nodes+j))->last->ahead=(*(d->nodes+j))->actual;
                     (*(d->nodes+j))->actual->follow=(*(d->nodes+j))->last;
                    };
            };
        return(head);
       } /* ; */

neuron *create_recurrent_FCNN_FB1(fuzzy_set *input, int number_of_Levels, int number_of_recurrent_connections, int *source, int *destination)
/* create the recurrent neuron of FCNN_FB1 type with given number of layers (int number_of_Levels), number of feedback connections (int number_of_recurrent_connections) and given vector of feedback origin (int *source) and vector of feedback destination (int *destination). Vectors source and destination have number_of_recurrent_connections elements each and their elements presents pairs (source,destination) each pair presents one recurrent (feedback) (and no necessary recurrent) connection. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level plus, if the Level number is inside the vector destination, from its pair (in the vector source) nodes' output. Output fuzzy object consists as many characteristics as there are nodes in the last Level (= number of nodes in each Level = number of input fuzzy set objects' characteristics). */
/* each characteristic presenting feedback weight (means all characteristics created in this function) has name "r " */
/* FB1 meansfeedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) */
      {
        neuron *head;
        Level *s, *d;
        int i,j;
        head=create_FCNN(input, number_of_Levels);
        head->name=MAC((long int)5);
        head->name="r ";
        for(i=0; ihead->number_of_Levels)||(*(destination+i)>head->number_of_Levels)) exit_handling(92,1); /* means Level number in either vector source or destination (or in both of them) is higher than number of Levels in the neuron */
        for(i=0; ifirst_Level; j<*(source+i); j++)
                s=s->follow;
             for(j=1, d=head->first_Level; j<*(destination+i); j++)
                d=d->follow;
             for(j=0; j<((d->number_of_nodesnumber_of_nodes)? d->number_of_nodes: s->number_of_nodes); j++)
                {
                  (*(d->nodes+j))->number_of_characteristics++;
                  (*(d->nodes+j))->actual=(*(d->nodes+j))->last;
                  (*(d->nodes+j))->last=MACl((long int)1);
                  (*(d->nodes+j))->last->name=MAC((long int)5);
                  (*(d->nodes+j))->last->name="r ";
                  (*(d->nodes+j))->last->membership=(float)(rand()/32767.);
                  (*(d->nodes+j))->last->set=*(s->nodes+j);
                  (*(d->nodes+j))->last->follow=0;
                  (*(d->nodes+j))->last->ahead=(*(d->nodes+j))->actual;
                  (*(d->nodes+j))->actual->follow=(*(d->nodes+j))->last;
                 };
            };
        return(head);
       } /* ; */

neuron *create_recurrent_FCNN_FB1_with_only_1_output(fuzzy_set *input, int number_of_Levels, int number_of_recurrent_connections, int *source, int *destination)
/* create the recurrent neuron of FCNN_FB1 with only 1 output type with given number of layers (int number_of_Levels), number of feedback connections (int number_of_recurrent_connections) and given vector of feedback origin (int *source) and vector of feedback destination (int *destination). Vectors source and destination have number_of_recurrent_connections elements each and their elements presents pairs (source,destination) each pair presents one recurrent (feedback) (and no necessary recurrent) connection. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The each successive Level nodes are receving inputs each from all nodes of the preceded Level plus, if the Level number is inside the vector destination, from its pair (in the vector source) nodes' output. Output fuzzy object consists as many characteristics as there are nodes in the last Level (just one). Number of nodes linearly decrease from the first layer (as many nodes as input characteristics) toward the last layer (only one node). */
/* each characteristic presenting feedback weight (means all characteristics created in this function) has name "r " */
/* FB1 means feedback one to one (means each node from feedback source is producing feedback onto its pair node of feedback destination and its the node on the same place inside destination layer as source is inside source layer, while in a case whan source layer has more nodes than destination layer only nodes that have their pair inside destination layer run feedback and similarly if destination layer has more nodes than source layer only nodes having their pair inside the source layer receive feedback, number of feedback connections is limited with lower of number of nodes in source layer and number of nodes in destination layer) */
      {
        neuron *head;
        Level *s, *d;
        int i,j;
        head=create_FCNN_with_only_1_output(input, number_of_Levels);
        head->name=MAC((long int)5);
        head->name="r ";
        for(i=0; ihead->number_of_Levels)||(*(destination+i)>head->number_of_Levels)) exit_handling(93,1); /* means Level number in either vector source or destination (or in both of them) is higher than number of Levels in the neuron */
        for(i=0; ifirst_Level; j<*(source+i); j++)
                s=s->follow;
             for(j=1, d=head->first_Level; j<*(destination+i); j++)
                d=d->follow;
             for(j=0; j<((d->number_of_nodesnumber_of_nodes)? d->number_of_nodes: s->number_of_nodes); j++)
                {
                  (*(d->nodes+j))->number_of_characteristics++;
                  (*(d->nodes+j))->actual=(*(d->nodes+j))->last;
                  (*(d->nodes+j))->last=MACl((long int)1);
                  (*(d->nodes+j))->last->name=MAC((long int)5);
                  (*(d->nodes+j))->last->name="r ";
                  (*(d->nodes+j))->last->membership=(float)(rand()/32767.);
                  (*(d->nodes+j))->last->set=*(s->nodes+j);
                  (*(d->nodes+j))->last->follow=0;
                  (*(d->nodes+j))->last->ahead=(*(d->nodes+j))->actual;
                  (*(d->nodes+j))->actual->follow=(*(d->nodes+j))->last;
                 };
            };
        return(head);
       } /* ; */

neuron *create_FCNN_1L_1out_fixed_weights(fuzzy_set *input)
/* create the neuron of FCNN with only 1 layer and only 1 characteristic in the output fuzzy object type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to one node). Output fuzzy object consists just one characteristics as there are nodes in the first and only Level. */
/* all weights are preset on the value stored in extern float fixed_weight */
      {
        neuron *n;
        
        n=create_FCNN_1L_1out(input);
        fixing_weights(n);
        return(n);
       } /* ; */

void fixing_weights(neuron *n)
/* fixing weights (setting all weights on the same value) on the value stored in extern float fixed_weight */
    {
      extern float fixed_weight;
      int i;
      
      for(n->actual_Level=n->first_Level; n->actual_Level!=0; n->actual_Level=n->actual_Level->follow)
         for(i=0; iactual_Level->number_of_nodes; i++)
            for((*(n->actual_Level->nodes+i))->actual=(*(n->actual_Level->nodes+i))->first; (*(n->actual_Level->nodes+i))->actual!=0; (*(n->actual_Level->nodes+i))->actual=(*(n->actual_Level->nodes+i))->actual->follow)
               (*(n->actual_Level->nodes+i))->actual->membership=fixed_weight;
     } /* ; */


float sum_of_all_weighted_inputs(fuzzy_object *node, int Level_number)
/* sum of all inputs multiplied each with its weight (membership of pointer onto the input), included for the bias, is returned. */
/* the bias is defined in "neuro.h" as BIAS=1, but could be redefined if you defined it (#define BIAS __) before including "neuro.h" */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         float sum=0.0;
         if(Level_number==1)
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=(*((float*)(node->actual->set)))*node->actual->membership;
         else
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=node->actual->set->m.notes*node->actual->membership;
         return(sum);
         } /* ; */

float product_of_all_weighted_inputs(fuzzy_object *node, int Level_number)
/* product of all inputs multiplied each with its weight (membership of pointer onto the input) is returned. */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         float product=1.0;
         if(Level_number==1)
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              product*=(*((float*)(node->actual->set)))*node->actual->membership;
         else
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              product*=node->actual->set->m.notes*node->actual->membership;
         return(product);
         } /* ; */

float highest_weighted_input(fuzzy_object *node, int Level_number)
/* the highest value (input*weight) all inputs multiplied each with its weight (membership of pointer onto the input) is returned. */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         register float Max=-1.0, mem;
         if(Level_number==1)
           {
             for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
                {
                  mem=(*((float*)(node->actual->set)))*node->actual->membership;
                  if(mem>Max) Max=mem;
                 };
            }
         else
           {
             for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
                {
                  mem=node->actual->set->m.notes*node->actual->membership;
                  if(mem>Max) Max=mem;
                 };
            };
         return(Max);
         } /* ; */

void firing_standard_neuron(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. Node output function is pointed inside neuron's nucleide base. Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
      {
        int i;
        /* calculation of nodes output propagation */
        for(head->actual_Level=head->first_Level; head->actual_Level!=0; head->actual_Level=head->actual_Level->follow)
           for(i=0; iactual_Level->number_of_nodes; i++)
			           (*(head->actual_Level->nodes+i))->m.notes=code->node_output(code->node_linear_output(*(head->actual_Level->nodes+i), head->actual_Level->Level_number));
        /* copying the last Level output onto output fuzzy object */
        for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
        	head->output->actual->membership=head->output->actual->set->m.notes;
       } /* ; */

void firing_recurrent_neuron(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. Node output function is pointed inside neuron's nucleide base. Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* firing_recurent_neuron() fires firing_standard_neuron() until neuron output is stabilised (means diverge not more than limit [each last Level nodes' output is not changed more than limit since previous fireing]) or Maximal_number_of_iterations is reached (that is the case neuron output diverge) */
      {
        int i,j=0, Maximal_number_of_iterations=100;
        float limit=(float)0.1, *old_output;
        enum Bool flag;
        old_output=MAF((long int)head->output->number_of_characteristics);
        firing_standard_neuron(head, code);
        for(i=0, head->output->actual=head->output->first; ioutput->number_of_characteristics; i++, head->output->actual=head->output->actual->follow)
           *(old_output+i)=head->output->actual->membership;
        do
          {
            j++;
            flag=T;
            firing_standard_neuron(head, code);
            for(i=0, head->output->actual=head->output->first; ioutput->number_of_characteristics; i++, head->output->actual=head->output->actual->follow)
               {
                 if(((*(old_output+i))-head->output->actual->membership>limit)||(head->output->actual->membership-(*(old_output+i))>limit)) flag=F;
                 *(old_output+i)=head->output->actual->membership;
                };
           }
        while((flag==F)&&(jactual_Level=head->first_Level; head->actual_Level!=0; head->actual_Level=head->actual_Level->follow)
           {
             buffer=MAF((long int)head->actual_Level->number_of_nodes);
             for(i=0; iactual_Level->number_of_nodes; i++)
			    *(buffer+i)=code->node_output(code->node_linear_output(*(head->actual_Level->nodes+i), head->actual_Level->Level_number));
             for(i=0; iactual_Level->number_of_nodes; i++)
                (*(head->actual_Level->nodes+i))->m.notes=*(buffer+i);
             testfree((char*)buffer);
            };
        /* copying the last Level output onto output fuzzy object */
        for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
        	head->output->actual->membership=head->output->actual->set->m.notes;
       } /* ; */

void firing_recurrent_neuron_with_feedback(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. Node output function is pointed inside neuron's nucleide base. Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* firing_recurent_neuron_with_feedback() fires firing_feedback_neuron() until neuron output is stabilised (means diverge not more than limit [each last Level nodes' output is not changed more than limit since previous fireing]) or Maximal_number_of_iterations is reached (that is the case neuron output diverge) */
/* this function is specially developed for neurons with feedback (recurrent connection) within the same layer but CAN HANDLE also STANDARD NEURON */
/* while processing a layer new output is stored into a buffer and at the end copied from the buffer onto nodes' output */
      {
        int i,j=0, Maximal_number_of_iterations=100;
        float limit=(float)0.1, *old_output;
        enum Bool flag;
        old_output=MAF((long int)head->output->number_of_characteristics);
        firing_feedback_neuron(head, code);
        for(i=0, head->output->actual=head->output->first; ioutput->number_of_characteristics; i++, head->output->actual=head->output->actual->follow)
           *(old_output+i)=head->output->actual->membership;
        do
          {
            j++;
            flag=T;
            firing_feedback_neuron(head, code);
            for(i=0, head->output->actual=head->output->first; ioutput->number_of_characteristics; i++, head->output->actual=head->output->actual->follow)
               {
                 if(((*(old_output+i))-head->output->actual->membership>limit)||(head->output->actual->membership-(*(old_output+i))>limit)) flag=F;
                 *(old_output+i)=head->output->actual->membership;
                };
           }
        while((flag==F)&&(jactual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=(*((float*)(node->actual->set)))*node->actual->membership;
                   else if(i==4) product*=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                   else mem=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(7,i);
              sum+=product;
             }
       else if(Level_number>1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=node->actual->set->m.notes*node->actual->membership;
                   else if(i==4) product*=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                   else mem=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(7,i);
              sum+=product;
             }
       else if(Level_number==-1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=(*((float*)(node->actual->set)))*node->actual->membership;
              if(i<3) exit_handling(13,i);
              sum+=product;
             }
       else
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=node->actual->set->m.notes*node->actual->membership;
              if(i<3) exit_handling(13,i);
              sum+=product;
             };
       return(sum);
      } /* ; */
      
float sum_of_roots_of_2multiplications_with_maximum_of_3(fuzzy_object *node, int Level_number)
/* input is considered as consequtive (non-overlapping) groups of five weighted inputs the first two of them are multiplicated with the maximal value (the highest one) of the following three inputs and than third roots of all (means of each of them) products are sumed (i.e. output= third_root(input1*input2*Max(input3,input4,input5)) + third_root(input6*input7*Max(input8,input9,input10)) + third_root(input11*input12*Max(input13,input14,input15)) + third_root(input16*input17*Max(input18,input19,input20)) + ....). In the case number of inputs is not divisible with five exit (exit_handling(8,remainder of (number of inputs/5))) is caused. */
/* in the case Level_number<0, there is only 3 inputs while output is sum of third roots of multiplications of them as written above. In the case number of inputs is not divisible with 3 exit (exit_handling(14,remainder of (number of inputs/3))) is caused. */
     {
       float sum=0.0, product, mem;
       int i;
       if(Level_number==1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=(*((float*)(node->actual->set)))*node->actual->membership;
                   else if(i==4) product*=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                   else mem=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(8,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else if(Level_number>1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=node->actual->set->m.notes*node->actual->membership;
                   else if(i==4) product*=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                   else mem=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(8,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else if(Level_number==-1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=(*((float*)(node->actual->set)))*node->actual->membership;
              if(i<3) exit_handling(14,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else
         for(node->actual=node->first; node->actual!=0;)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=node->actual->set->m.notes*node->actual->membership;
              if(i<3) exit_handling(14,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             };
       return(sum);
      } /* ; */
      
float arithmetic_mean_of_roots_of_2multiplications_with_maximum_of_3(fuzzy_object *node, int Level_number)
/* input is considered as consequtive (non-overlapping) groups of five weighted inputs the first two of them are multiplicated with the maximal value (the highest one) of the following three inputs and than arithmetic mean of third roots of all products calculated (i.e. output=  arithmetic mean(third_root(input1*input2*Max(input3,input4,input5)), third_root(input6*input7*Max(input8,input9,input10)), third_root(input11*input12*Max(input13,input14,input15)), third_root(input16*input17*Max(input18,input19,input20)), ....)). In the case number of inputs is not divisible with five exit (exit_handling(9,remainder of (number of inputs/5))) is caused. */
/* in the case Level_number<0, there is only 3 inputs while output is arithmetic mean of third roots of multiplications of them as written above. In the case number of inputs is not divisible with 3 exit (exit_handling(15,remainder of (number of inputs/3))) is caused. */
     {
       float sum=0.0, product, mem;
       int i, i3=0;
       if(Level_number==1)
         for(node->actual=node->first; node->actual!=0; i3++)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=(*((float*)(node->actual->set)))*node->actual->membership;
                   else if(i==4) product*=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                   else mem=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(9,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else if(Level_number>1)
         for(node->actual=node->first; node->actual!=0; i3++)
            {
              for(product=1.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) product*=node->actual->set->m.notes*node->actual->membership;
                   else if(i==4) product*=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                   else mem=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(9,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else if(Level_number==-1)
         for(node->actual=node->first; node->actual!=0; i3++)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=(*((float*)(node->actual->set)))*node->actual->membership;
              if(i<3) exit_handling(15,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             }
       else
         for(node->actual=node->first; node->actual!=0; i3++)
            {
              for(product=1.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 product*=node->actual->set->m.notes*node->actual->membership;
              if(i<3) exit_handling(15,i);
              sum+=(float)pow((double)product, (double) 1.0/3.0);
             };
       return(sum/i3);
      } /* ; */

float highest_arithmetic_mean_of_2_with_maximum_of_3(fuzzy_object *node, int Level_number)
/* input is considered as consequtive (non-overlapping) groups of five weighted inputs arithmetic mean is calculated of the first two and the maximal value (the highest one) of the following three inputs and the highest one proceeded on output (i.e. output=  Max(arithmetic mean(input1*input2*Max(input3,input4,input5)), arithmetic mean(input6*input7*Max(input8,input9,input10)), arithmetic mean(input11*input12*Max(input13,input14,input15)), arithmetic mean(input16*input17*Max(input18,input19,input20)), ....)). In the case number of inputs is not divisible with five exit (exit_handling(10,remainder of (number of inputs/5))) is caused. */
/* in the case Level_number<0, there is only 3 inputs while output is the highest arithmetic mean of multiplications of them as written above. In the case number of inputs is not divisible with 3 exit (exit_handling(16,remainder of (number of inputs/3))) is caused. */
     {
       float sum, mem, Max=-10.0;
       int i;
       if(Level_number==1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(sum=0.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) sum+=(*((float*)(node->actual->set)))*node->actual->membership;
                   else if(i==4) sum+=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                   else mem=((*((float*)(node->actual->set)))*node->actual->membership>mem)?(*((float*)(node->actual->set)))*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(10,i);
              if((sum/3)>Max) Max=sum/3;
             }
       else if(Level_number>1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(sum=0.0, i=0, mem=-10.0; (i<5)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 {
                   if(i<2) sum+=node->actual->set->m.notes*node->actual->membership;
                   else if(i==4) sum+=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                   else mem=(node->actual->set->m.notes*node->actual->membership>mem)?node->actual->set->m.notes*node->actual->membership:mem;
                  };
              if(i<5) exit_handling(10,i);
              if((sum/3)>Max) Max=sum/3;
             }
       else if(Level_number==-1)
         for(node->actual=node->first; node->actual!=0;)
            {
              for(sum=0.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 sum+=(*((float*)(node->actual->set)))*node->actual->membership;
              if(i<3) exit_handling(16,i);
              if((sum/3)>Max) Max=sum/3;
             }
       else
         for(node->actual=node->first; node->actual!=0;)
            {
              for(sum=0.0, i=0; (i<3)&&(node->actual!=0); i++, node->actual=node->actual->follow)
                 sum+=node->actual->set->m.notes*node->actual->membership;
              if(i<3) exit_handling(16,i);
              if((sum/3)>Max) Max=sum/3;
             };
       return(Max);
      } /* ; */
      
float product_of_first_n_with_complements_of_rest(fuzzy_object *node, int n)
/* output is product of the first n inputs and the rest of inputs are complemented. It means: "output=input1*input2*....*inputn*(1-input(n+1))*(1-input(n+2))*(1-input(n+3))*...*(1-inputlast)" */
/* also each input is multiplied with its (characteristic) weight prior to multiplying with other inputs or their complements */
     {
       float product;
       int i;
       for(i=0, product=1.0, node->actual=node->first; node->actual!=0; i++, node->actual=node->actual->follow)
          if(iactual->set)))*node->actual->membership; /* NOTE: input is multiplied with the weight! */
          else
            product*=((float)1.0-(*((float*)(node->actual->set)))*node->actual->membership);
       return(product);
      } /* ; */

void filling_weights_with_randum_numbers(neuron *head)
/* fills weights inside the neuron with random numbers from [0,1] real interval. Randomisation is reached using random number generator randomised by general time (datum+actual time) and processor time. */
/* extern int sequence_randomiser is used to add additional dimension of randomness as when is a sequence randomise because of high processor frequence time(0) and clock() are not necessary changed inbetween elements */
	{
	  int i;
	  extern int sequence_randomiser;
	  sequence_randomiser=(int)fmod((double)(++sequence_randomiser),(double)32768.0);
	  srand((int)fmod((double)(time(0)+clock()),(double)32768.0));
	  for(head->actual_Level=head->first_Level; head->actual_Level!=0; head->actual_Level=head->actual_Level->follow)
	     for(i=0; iactual_Level->number_of_nodes; i++)
	        for((*(head->actual_Level->nodes+i))->actual=(*(head->actual_Level->nodes+i))->first; (*(head->actual_Level->nodes+i))->actual!=0; (*(head->actual_Level->nodes+i))->actual=(*(head->actual_Level->nodes+i))->actual->follow)
	          (*(head->actual_Level->nodes+i))->actual->membership=(float)(rand()/32767.);
	 } /* ; */
 

/* functions that deal on neuron population level */

fuzzy_set **preparing_neuron_population_neuron_inputs_through_window(neuron_population *np, int window_radius, int horisontal_resolution, int vertical_resolution)
/* Returns pointer on array of pointers on fuzzy sets (the same number of fuzzy sets as fuzzy objects in input fuzzy set). Prepares neuron population's neurones' input fuzzy sets from neuron population input fuzzy set presenting "picture" with dimension horisontal_resolution * vertical_resolution in a following way: each fuzzy object in neural population's input fuzzy set becomes the first fuzzy object in one and only one neuron's (inside the population) input fuzzy set, other fuzzy objects in input fuzzy set of a neuron (inside population) are  fuzzy objects placed on the neuron population input "picture" inside window radius from the first object in the neuron's input (or better said placed inside square each side equal two times window radius with center in the first object in neuron's input). It is similar as shifting square window (each side=2*window_radius) on the picture and inputing the central pixel as the first followed by other pixel inside window. If neuron population has different number of neurones than its input fuzzy set unsucessful program termination is caused (exit(1)) ! */
/* When returned array is used memory consisting data not necessary for future work should be liberate (using command testfree())! This usually means following: "for(i=0; inumber_of_neurones; testfree((char*)(*(head+i))->name), testfree((char*)(*(head+i))->objects), testfree((char*)*(head+i++))); testfree((char*)head);" after creating neuron population's neurones. */
               {
                 int h,v,i,c,a,b;
                 fuzzy_set **head;
                 if(np->number_of_neurones!=np->input->number_of_objects) exit_handling(3,1);
                 head=MApFS((long int)np->number_of_neurones);
                 for(i=0; inumber_of_neurones; i++)
                     {
		       		   *(head+i)=MAFS((long int)1);
                       (*(head+i))->name=MAC((long int)2);
                       *((*(head+i))->name+0)='I';
                       *((*(head+i))->name+1)=' ';
                       a=(int)fmod((double)i,(double)horisontal_resolution);
                       b=(int)floor(((double)i)/((double)horisontal_resolution));
/*                       (*(head+i))->number_of_objects=((((int)(a)+window_radius0)?a-window_radius:0)+1)*((((int)(b)+window_radius0)?b-window_radius:0)+1);
*/                       (*(head+i))->number_of_objects=((((int)(a)+window_radius0)?a-window_radius:0)+1)*((((int)(b)+window_radius0)?b-window_radius:0)+1);
                       (*(head+i))->objects=MApFO((long int)(*(head+i))->number_of_objects);
                       *((*(head+i))->objects+0)=*(np->input->objects+i);
                       for(c=1, h=((int)(a)-window_radius<0)?0:a-window_radius; h<((a+window_radius+1objects+c)=*(np->input->objects+v*horisontal_resolution+h);
                                };
                      };
                 return(head);
                } /* ; */

fuzzy_set *many2one(int number_of_sets, fuzzy_set **sets)
/* Create new fuzzy set pointing on all objects member of fuzzy sets pointed by array sets. Variable number_of_sets meand how many fuzzy sets are pointed by array sets. Array sets consists pointers on fuzzy sets. */
/* The created fuzzy set has the name THE NUMBER OF FUZZY SETS IT CONSISTS ! */
/* After use when new fuzzy set (as set of pointers on fuzzy objects) is no more required memory should be liberated usually in following way: "testfree((char*)fuzzy_set_pointer->name);testfree((char*)fuzzy_set_pointer->objects);testfree((char*)fuzzy_set_pointer);", where "fuzzy_set_pointer" is name given to the pointer on the fuzzy set (means earlier in program such command as fuzzy_set_pointer=many2one(....). */
               {
                 fuzzy_set *head;
                 float ns;
                 int i, j, k, l;
                 head=MAFS((long int)1);
                 
                 i=0;
                 ns=(float)number_of_sets;
                 do
                   {
                     ns/=10.;
                     i++;
                    }while(ns>=1.0);
                 
                 head->name=MAC((long int)i+1);
                 l=number_of_sets;
                 k=number_of_sets/10;
                 for(j=i-1; j>-1; k/=10, l/=10, j--)
                    *(head->name+j)=(char)(l-10*k+48);
                 *(head->name+i)=' ';
                 for(head->number_of_objects=0, i=0; inumber_of_objects+=(*(sets+i))->number_of_objects;
                 head->objects=MApFO((long int)head->number_of_objects);
                 for(j=0, i=0; inumber_of_objects; j++, k++)
                         *(head->objects+j)=*((*(sets+i))->objects+k);
                 return(head);
                } /* ; */

neuron_population *create_neuron_population(nucleotide_base *code, int number_of_neurones_in_population, fuzzy_set *input, int window_radius, int horisontal_input_resolution, int vertical_input_resolution, fuzzy_set** (*prepare_input)(neuron_population*, int, int, int))
/* Creates neuron population from information stored in its nucleotide base. "number_of_neurones_in_population" presents number of neurones to be created to form the population. "input" is fuzzy set used as input in the population. In the case input is union of several fuzzy sets the required one should be defined by creating new structure fuzzy_set consisting pointers on all fuzzy_objects presenting input into the population (it can be done using function many2one()). "window_radius", "horisontal_input_resolution" and "vertical_input_resolution" are to be used in function pointed by "prepare_input" and in the case prepare_input=nill their values are not of interest and are not used in the function. "prepare_input()" is pointer on function that rearrange neurones' inputs from the population's input by forming array of fuzzy sets each fuzzy set for one and only one neuron in the population. In the case all neurones receive input from all fuzzy objects in the population's input fuzzy set input preparing function is NOT REQUIRED so should be "prepare_input=nill" ! */
/* Pointer toward root population IS SET UP AS NILL and SHOULD BE WRITTEN LATER as well as number_of_leaf_populations that IS also SET UP AS NILL. Array of pointers toward leaf populations IS NOT CREATED (MEMORY IS NOT RESERVED) while pointer on the array (**leaf) IS NILL and SHOULD BE CREATED AND FILLED LATER ! */
/* In the case input is wanted to be considered as 2 dimensional (for organisation of the population's neurones inputs) horisontal_input_resolution presents horisontal and vertical_input_resolution vertical dimension of input "picture" (pixel=fuzzy object), while window_radius presents radius (half of window side's lenght) of window for each of the population's neuron input. In that case must be satisfied "horisontal_input_resolution*vertical_input_resolution=input->number_of_objects" and "window_radius>0". */
                           {
                             int i;
                             neuron_population *head;
                             fuzzy_set **input_p;
                             head=MANP((long int)1);
                             head->code=code;
                             head->number_of_neurones=number_of_neurones_in_population;
                             head->neurones=MApN((long int)head->number_of_neurones);
                             head->number_of_leaf_populations=0;
                             head->root=0;
                             head->leaf=0;
                             head->input=input;
                             head->output=MAFS((long int)1);
                             head->output->name=MAC((long int)2);
                             *(head->output->name+0)='O';
                             *(head->output->name+0)=' ';
                             head->output->number_of_objects=head->number_of_neurones;
                             head->output->objects=MApFO((long int)head->output->number_of_objects);
                             if(prepare_input==0)
                                for(i=0; inumber_of_neurones; i++)
                                    {
                                      *(head->neurones+i)=head->code->create_neuron(input);
                                      *(head->output->objects+i)=(*(head->neurones+i))->output;
                                     }
                               else
                                    {
                                      input_p=(prepare_input)(head, window_radius, horisontal_input_resolution, vertical_input_resolution);
                                      for(i=0; inumber_of_neurones;i++)
                                          {
                                            *(head->neurones+i)=head->code->create_neuron(*(input_p+i));
                                            *(head->output->objects+i)=(*(head->neurones+i))->output;
                                            testfree((char*)(*(input_p+i))->name);
                                            testfree((char*)(*(input_p+i))->objects);
                                            testfree((char*)*(input_p+i));
                                           };
                                      testfree((char*)input_p);
                                     };
                             head->learning_algorithm=0; /* learning algorithm should be created later or this line should be changed to head->learning_algorithm=code->create_population_learning_algorithm(code,head); */
                             return(head);
                            } /*; */

void fire_neuron_population(neuron_population *np)
/* fire_neuron_population() fires neuron population by firing each neuron inside the population */
                           {
                             int i;
                             for(i=0; inumber_of_neurones; i++)
                                np->code->firing_neuron(*(np->neurones+i), np->code);
                            } /*; */

                 
void fill_neuron_population_root_and_leaf(struct neuron_population *np, int number_of_leaf, int number_of_root, struct neuron_population **root, struct neuron_population **leaf)
/* creates and fills vectors root and leaf inside the neuron population consisting pointers onto neuron populations the population receives input from (root) and proceedings output to (leaf) */
    {
      int i;
      np->number_of_root_populations=number_of_root;
      np->number_of_leaf_populations=number_of_leaf;
      if(np->number_of_root_populations>0)
        np->root=MApNP((long int)np->number_of_root_populations);
      if(np->number_of_leaf_populations>0)
        np->leaf=MApNP((long int)np->number_of_leaf_populations);
      for(i=0; inumber_of_root_populations; i++)
         *(np->root+i)=*(root+i);
      for(i=0; inumber_of_leaf_populations; i++)
         *(np->leaf+i)=*(leaf+i);
     } /* ; */


void delete_neuron_population(struct neuron_population *head)
/* deletes neuron population and releases its memory */
    {
      int i;
      if(head->learning_algorithm!=0)
        {
          head->learning_algorithm->deleting(head->learning_algorithm);
          head->learning_algorithm=0;
          };
      delete_fuzzy_set(head->output);
      delete_fuzzy_set(head->input);
      for(i=0; inumber_of_neurones; i++)
         delete_neuron(*(head->neurones+i));
      free((char*) head->neurones);
      free((char*) head->root);
      free((char*) head->leaf);
      free((char*) head);
     } /* ; */


/* functions that deal on neural subsystem level */

void creating_neural_subsystem_output(neural_subsystem *ns)
/* creates neural subsystem's output fuzzy set whose fuzzy objects are neural subsystem's root (last layer of neuron populations according the direction of information/input processing) neuron populations' output fuzzy sets in the same order as neuron populations inside the roots vector (of pointers) of the neural subsystem */
    {
      int i, j, k;
      ns->output=MAFS((long int)1);
      ns->output->name=MAC((long int)7);
      *(ns->output->name+0)='O';
      *(ns->output->name+1)='U';
      *(ns->output->name+2)='T';
      *(ns->output->name+3)='P';
      *(ns->output->name+4)='U';
      *(ns->output->name+5)='T';
      *(ns->output->name+6)=' ';
      ns->output->number_of_objects=ns->number_of_roots_populations;
      ns->output->objects=MApFO((long int)ns->output->number_of_objects);
      for(i=0, j=0; ioutput->number_of_objects; i++)
         for(k=0; k<(*(ns->roots+i))->output->number_of_objects; k++)
            *(ns->output->objects+j++)=*((*(ns->roots+i))->output->objects+k);
     } /* ; */

void delete_neural_subsystem(struct neural_subsystem *head)
/* deletes neural subsystem and releases its memory */
    {
      int i;
      for(i=0; inumber_of_populations; i++)
         delete_neuron_population(*(head->firing_list+i));
      free((char*) head->firing_list);
      delete_fuzzy_set(head->output);
      delete_fuzzy_set(head->input);
      free((char*) head->root);
      free((char*) head->leaf);
      free((char*) head->roots);
      free((char*) head->leaves);
      if(head->output_is_shared!=0) free((char*) head->output_is_shared);
      if(head->number_of_shared_inputs>0) free((char*) head->shared_inputs);
      free((char*) head);
     };
      
struct neural_subsystem *create_neural_subsystem_from_gene(gene *code, fuzzy_set *input)
/* creates neural system from information stored in its gene and input fuzzy set */
/* missing (important) part that should create neuron populations inside the subsystem and fill its pointers to leaves and root consisted neuron populations tree as well to other subsystems */
/* the problem is how to define/choose input fuzzy set per particular neuron population - maybe they should create input fuzzy set each for itself from their pointers on leaves neuron populations */
                       {
                         struct neural_subsystem *ns;
                         
                         ns=MANSS((long int)1);
                         ns->code=code;
                         ns->number_of_populations=code->number_of_nucleotide_bases;
                         ns->number_of_roots_populations=0; /* should be done later manualy or a function for doing this made */
                         ns->number_of_leaves_populations=0; /* should be done later manualy or a function for doing this made */
                         ns->roots=0; /* should be done later manualy or a function for doing this made */
                         ns->leaves=0; /* should be done later manualy or a function for doing this made */
                         ns->number_of_root_subsystems=0; /* should be done later manualy or a function for doing this made */
                         ns->number_of_leaf_subsystems=0; /* should be done later manualy or a function for doing this made */
                         ns->root=0; /* should bu done later manualy or a function for doing this made */
                         ns->leaf=0; /* should bu done later manualy or a function for doing this made */
                         ns->input=input;
                         ns->shared_inputs=0;
                         ns->output_is_shared=0;
                         ns->number_of_shared_inputs=-1;
                         creating_neural_subsystem_output(ns);
                         return(ns);
                        } /* ; */

void filling_neural_subsystem_tree_of_neural_populations(struct neural_subsystem *ns, struct neuron_population ***populations_with_leaves, int *number_of_leaves)
/* fills both, the neural_subsystem's roots and leaves vectors and its populations' root and leaf vectors, from the vector populations_with_leaves that has as many elements as there are populations inside the subsystem, each of them pointing to vector of pointers first one onto the related population (according its identification_number) followed by its leaves, the number of leaves is stored on the same position (inside the vector) in the vector number_of_leaves. The populations in the vector populations_with_leaves are stored starting from the subsystem's root populations toward the leaves, in the same order as populations' related identification_numbers should be */
    {
      int i, j, k, number_of_roots;
      struct neuron_population **roots, **leaves;
      enum Bool r;
      /* filling populations' vectors of pointers to their roots and leaves */
      for(i=0; inumber_of_populations; i++)
         {
           
           roots=MApNP((long int)ns->number_of_populations);
           for(j=0, number_of_roots=0; jnumber_of_populations; j++)
              for(k=0; k<*(number_of_leaves+j); k++)
                 if((*(*(populations_with_leaves+j)+k+1))==*(*(populations_with_leaves+i)+0)) *(roots+number_of_roots++)=*(*(populations_with_leaves+j)+0);
           leaves=(*(number_of_leaves+i)>0)?MApNP((long int)*(number_of_leaves+i)): 0;
           for(j=0; j<*(number_of_leaves+i); j++)
              *(leaves+j)=*(*(populations_with_leaves+i)+j+1);
           
           fill_neuron_population_root_and_leaf(*(*(populations_with_leaves+i)+0), *(number_of_leaves+i), number_of_roots, roots, leaves);
           free((char*)roots);
           if(leaves!=0) free((char*)leaves);
          };
      /* filling the subsystem's vectors roots and leaves */
      for(ns->number_of_roots_populations=0, ns->number_of_leaves_populations=0, roots=(ns->number_of_populations>0)?MApNP((long int)ns->number_of_populations):0, leaves=(ns->number_of_populations>0)?MApNP((long int)ns->number_of_populations):0, i=0; inumber_of_populations; i++)
         {
           /* searching for root populations */
           for(j=0, r=T; (jnumber_of_populations)&&(r==T); j++)
              for(k=0; (k<*(number_of_leaves+j))&&(r==T); k++)
                 if(*(*(populations_with_leaves+j)+k+1)==*(*(populations_with_leaves+i)+0)) r=F;
           if(r==T) *(roots+ns->number_of_roots_populations++)=*(*(populations_with_leaves+i)+0);
           /* searching for leaves populations */
           for(j=0, r=T; (j<*(number_of_leaves+i))&&(r==T); j++)
              for(k=0; (knumber_of_populations)&&(r==T); k++)
                 if(*(*(populations_with_leaves+k)+0)==*(*(populations_with_leaves+i)+j+1)) r=F;
           if(r==T) *(leaves+ns->number_of_leaves_populations++)=*(*(populations_with_leaves+i)+0);
          };
      /* filling the subsystem's vector roots */
      if(ns->number_of_roots_populations>0)
        {
          ns->roots=MApNP((long int)ns->number_of_roots_populations);
          for(i=0; inumber_of_roots_populations; i++)
             *(ns->roots+i)=*(roots+i);
          }
      else
        {
          ns->root=0; /* means there is a recurrent connection from root populations so they must be selected on another way */
          exit_handling(1007,1);
         };
      if(roots!=0) free((char*)roots);
      /* filling the subsystem's vector leaves */
      if(ns->number_of_leaves_populations>0)
        {
          ns->leaves=MApNP((long int)ns->number_of_leaves_populations);
          for(i=0; inumber_of_leaves_populations; i++)
             *(ns->leaves+i)=*(leaves+i);
          }
      else
        {
          ns->leaves=0; /* means there is a recurrent connection to leaves populations so they must be selected on another way */
          exit_handling(1007,2);
         };
      if(leaves!=0) free((char*)leaves);
     } /* ; */

void fill_neural_subsystem_root_and_leaf(struct neural_subsystem *ns, int number_of_leaf, int number_of_root, struct neural_subsystem **root, struct neural_subsystem **leaf)
/* creates and fills vectors root and leaf inside the neural subsystem consisting pointers onto neural  subsystems the subsystem receives input from (root) and proceedings output to (leaf) */
    {
      int i;
      ns->number_of_root_subsystems=number_of_root;
      ns->number_of_leaf_subsystems=number_of_leaf;
      if(ns->number_of_root_subsystems>0)
        ns->root=MApNSS((long int)ns->number_of_root_subsystems);
      if(ns->number_of_leaf_subsystems>0)
        ns->leaf=MApNSS((long int)ns->number_of_leaf_subsystems);
      for(i=0; inumber_of_root_subsystems; i++)
         *(ns->root+i)=*(root+i);
      for(i=0; inumber_of_leaf_subsystems; i++)
         *(ns->leaf+i)=*(leaf+i);
     } /* ; */

neural_subsystem *create_neural_subsystem_from_gene_and_subsystem_tree(struct gene *code, struct subsystem_tree *tree, neuron_population ***virtual_populations, enum Bool **inputs)
/* creates neural subsystem from information provided in related gene and subsystem tree, while virtual_populations and inputs enable creation of neuron populations that receive input or proceed output outside from/of their subsystem as well as implementing recurrent connections. virtual_populations must be an allocated space of memory dimension = number_of_subsystems_in_the_system * number_of_populations_in_the_subsystem(subsystem_identification(order)_number=row_number(0-number_of_subsystems-1)+1), first column is pointers to subsystems, while other in a row point to populations belonging to the subsystem in the first column and are organised in order according populations' numbers inside the subsystem_tree, and if population/subsystem is not created yet pointer must be 0 otherwise point to related population/subsystem. inputs is Boolean matrix each element shows if its neuron population, pointed on the equivalent position of virtual_populations without the first row, has undefined input fuzzy_set, must be preset on F while T means the related population has undefined (at the moment) input fuzzy set. */
                {
                  neural_subsystem *ns;
                  nucleotide_base *nb;
                  fuzzy_set **fs;
                  neuron_population **np, ***populations_with_leaves;
                  int i, j, k, *number_of_leaves;
                  if(code->number_of_nucleotide_bases!=tree->number_of_populations) exit_handling(1008,1); /* different number of populations to be created in the gene and the subsystem tree */
                  
                  /* creating subsystem and filling it */
                  ns=MANSS((long int)1);
                  ns->number_of_populations=code->number_of_nucleotide_bases;
                  ns->code=code;
                  ns->system=0;
                  ns->number_of_leaf_subsystems=0;
                  ns->number_of_root_subsystems=0;
                  ns->leaf=0;
                  ns->root=0;
                  ns->shared_inputs=0;
                  ns->output_is_shared=0;
                  ns->number_of_shared_inputs=-1;
                  
                  /* subscribing the subsystem to virtual_populations */
                  *(*(virtual_populations+tree->identification_number-1)+0)=(neuron_population*)ns;
                  
                  /* creating the subsystem's populations and subscribing them to virtual_populations together with defining of their input fuzzy set and noting into inputs */
                  for(i=ns->number_of_populations; i>0; i--)
                     {
                       *(*(inputs+tree->identification_number-1)+i-1)=F;
                       np=MApNP((long int)tree->number_of_leaf_pairs+tree->number_of_leaf_in_other_subsystems);
                       k=0;
                       
                       /* first finding i-th populations inputs outside of the subsystem */
                       if(tree->number_of_leaf_in_other_subsystems>0)
                         {
                           for(j=0; (*(tree->leaf_in_other_subsystems[0]+j)!=i)&&(jnumber_of_leaf_in_other_subsystems); )
                              j++;
                           if(jnumber_of_leaf_in_other_subsystems)
                             for( ; (*(tree->leaf_in_other_subsystems[0]+j)==i)&&(*(*(inputs+tree->identification_number-1)+i-1)==F); j++)
                                {
                                  *(np+k++)=*(*(virtual_populations+(*(tree->leaf_in_other_subsystems[1]+j))-1)+(*(tree->leaf_in_other_subsystems[2]+j)));
                                  if(*(np+k-1)==0) *(*(inputs+tree->identification_number-1)+i-1)=T;
                                 };
                          };
                       
                       /* then finding i-th populations inputs inside the subsystem */
                       if(tree->number_of_leaf_pairs>0)
                         {
                           for(j=0; (*(tree->leaf_pairs[0]+j)!=i)&&(jnumber_of_leaf_pairs); )
                              j++;
                           if(jnumber_of_leaf_pairs)
                             for( ; (*(tree->leaf_pairs[0]+j)==i)&&(*(*(inputs+tree->identification_number-1)+i-1)==F); j++)
                                {
                                  if(*(tree->leaf_pairs[1]+j)==0)
                                    {
                                      *(np+k++)=0; /* 0 means input is input fuzzy_set (whose identification_number is assumed as 0) */
                                     }
                                  else
                                    {
                                      *(np+k++)=*(*(virtual_populations+tree->identification_number-1)+(*(tree->leaf_pairs[1]+j)));
                                      if(*(np+k-1)==0) *(*(inputs+tree->identification_number-1)+i-1)=T;
                                     };
                                 };
                          };
                       /* searching for the gene related/describing the population to be created */
                       for(nb=ns->code->gene_begin; (nb->identification_number!=i)&&(nb->identification_numbernumber_of_populations+1); )
                          nb=nb->follow;
                       if(nb->identification_number>ns->number_of_populations) exit_handling(1008,2); /* can't find the related gene */
                       
                       /* creating the i-th population */
                       if(*(*(inputs+tree->identification_number-1)+i-1)==F)
                         {
                           fs=MApFS((long int)k);
                           for(j=0; jinput: (*(np+j))->output;
                           
                           *(*(virtual_populations+tree->identification_number-1)+i)=nb->type->create_neuron_population_from_nucleotide_base(nb, many2one(k,fs));
                           
                           free((char*)fs);
                          }
                       else
                         {
                           if(nb->type->create_neuron_population_from_nucleotide_base_without_input==0)
                             {
                               exit_handling(1008,3); /* there is no written function for creating neuron population without having input fuzzy set, while input fuzzy set is undefined at the moment */
                              }
                           else
                             {
                               *(*(virtual_populations+tree->identification_number-1)+i)=nb->type->create_neuron_population_from_nucleotide_base_without_input(nb);
                              };
                          };
                       (*(*(virtual_populations+tree->identification_number-1)+i))->subsystem=ns;
                       
                       free((char*)np);
                      };
                  
                  /* filling the subsystem's tree structure (populations' pointers root and leaf) and pointers roots and leaves */
                  populations_with_leaves=MAppNP((long int)ns->number_of_populations);
                  number_of_leaves=MAI((long int)ns->number_of_populations);
                  for(i=1; inumber_of_populations+1; i++)
                     {
                       *(populations_with_leaves+i-1)=MApNP((long int)tree->number_of_leaf_pairs+tree->number_of_leaf_in_other_subsystems);
                       *(*(populations_with_leaves+i-1)+0)=*(*(virtual_populations+tree->identification_number-1)+i);
                       *(number_of_leaves+i-1)=0;
                       if(tree->number_of_leaf_in_other_subsystems>0)
                         {
                           for(j=0; (*(tree->leaf_in_other_subsystems[0]+j)!=i)&&(jnumber_of_leaf_in_other_subsystems); )
                              j++;
                           if(jnumber_of_leaf_in_other_subsystems)
                             for( ; *(tree->leaf_in_other_subsystems[0]+j)==i; j++)
                                {
                                  *(*(populations_with_leaves+i-1)+(++*(number_of_leaves+i-1)))=*(*(virtual_populations+(*(tree->leaf_in_other_subsystems[1]+j))-1)+(*(tree->leaf_in_other_subsystems[2]+j)));
                                  if(*(*(populations_with_leaves+i-1)+(*(number_of_leaves+i-1)))==0) *(*(populations_with_leaves+i-1)+(*(number_of_leaves+i-1)))=(neuron_population*)(-1);
                                 };
                          };
                       if(tree->number_of_leaf_pairs>0)
                         {
                           for(j=0; (*(tree->leaf_pairs[0]+j)!=i)&&(jnumber_of_leaf_pairs); )
                              j++;
                           if(jnumber_of_leaf_pairs)
                             for( ; *(tree->leaf_pairs[0]+j)==i; j++)
                                if(*(tree->leaf_pairs[1]+j)!=0)
                                  {
                                    if(*(*(virtual_populations+tree->identification_number-1)+(*(tree->leaf_pairs[1]+j)))==0)
                                      {
                                        (int)(*(*(populations_with_leaves+i-1)+(++*(number_of_leaves+i-1))))=-1;
                                       }
                                    else
                                      {
                                        *(*(populations_with_leaves+i-1)+(++*(number_of_leaves+i-1)))=*(*(virtual_populations+tree->identification_number-1)+(*(tree->leaf_pairs[1]+j)));
                                       };
                                   };
                          };
                      };
                  
                  filling_neural_subsystem_tree_of_neural_populations(ns,populations_with_leaves,number_of_leaves);
                                    
                  /* filling the subsystem's firing_list */
                  ns->firing_list=MApNP((long int)ns->number_of_populations);
                  /* since populations in the subsystem's subsystem tree must be numerised in order from roots to leaves it seems the most reasonable to use the inverse order for firing them. Therefore populations in firing_list are in inverse order then numerised inside the subsystem tree. The list can be manualy, or by an additional function, rearranged */
                  for(i=0; inumber_of_populations; i++)
                     *(ns->firing_list+i)=*(*(virtual_populations+tree->identification_number-1)+ns->number_of_populations-i);
                                    
                  /* releasing previously reserved memory */
                  for(i=1; inumber_of_populations+1; i++)
                     free((char*)(*(populations_with_leaves+i-1)));
                  free((char*)populations_with_leaves);
                  free((char*)number_of_leaves);
                  
                  /* creating the subsystem's output and input fuzzy sets */
                  creating_neural_subsystem_output(ns);
                  if(tree->input==0)
                    {
                      fs=MApFS((long int)ns->number_of_leaves_populations);
                      for(i=0, j=0; inumber_of_leaves_populations; i++)
                         {
                           *(fs+i)=(*(ns->leaves+i))->input;
                           if((int)(*(fs+i))<=0) j=1;
                          };
                      if(j==0)
                        {
                          ns->input=many2one(ns->number_of_leaves_populations,fs);
                         }
                      else
                        {
                          ns->input=(fuzzy_set*)(-1);
                         };
                      free((char*)fs);
                     }
                  else
                    {
                      ns->input=tree->input;
                     };
                  
                  /* returning pointer on the subsystem */
                  return(ns);
                 } /* ; */

void fire_neural_subsystem(struct neural_subsystem *ns)
/* fires neural subsystem by firing its populations in the same order as written (pointers) in its vector firing_list */
    {
      int i;
      for(i=0; inumber_of_populations; i++)
         fire_neuron_population(*(ns->firing_list+i));
     } /* ; */

/* teaching subsystem */

void create_learning_algorithms_inside_subsystem(struct neural_subsystem *ns, float learning_constant)
/* creates learning algorithm for all populations (and therefore all neurones) inside the subsystem with chosen learning constant */
/* also (creates and) fills vectors shared_inputs and output_is_shared when (the subsystem's) number_of_shared_inputs is less than zero */
    {
      int i, j, k, l, n_i;
      float **temp, **temp1;
      enum Bool exist;
      characteristic *ac;
      
      /* creation of learning algorithms of the subsystem's populations */
      for(i=ns->number_of_populations-1; i>-1; i--)
           (*(ns->firing_list+i))->learning_algorithm=(*(ns->firing_list+i))->code->create_population_learning_algorithm((*(ns->firing_list+i))->code, *(ns->firing_list+i), learning_constant);

      /* creating and filling vectors shared_inputs and output_is_shared when (the subsystem's) number_of_shared_inputs is less than zero by searching for shared inputs among the populations inside the subsystem and tracking info about them */
     
      if(ns->number_of_shared_inputs<0) /* it means it is not filled during a creation of previous (if any) the subsystem ('s populations) learning algorithms */
        { 
          for(n_i=0, i=0; inumber_of_populations; i++)
             for(j=0; j<(*(ns->firing_list+i))->input->number_of_objects; j++)
                for((*((*(ns->firing_list+i))->input->objects+j))->actual=(*((*(ns->firing_list+i))->input->objects+j))->first; (*((*(ns->firing_list+i))->input->objects+j))->actual!=0;  (*((*(ns->firing_list+i))->input->objects+j))->actual=(*((*(ns->firing_list+i))->input->objects+j))->actual->follow)
                   for(k=i+1; knumber_of_populations; k++)
                      for(l=0; l<(*(ns->firing_list+k))->input->number_of_objects; l++)
                         for(ac=(*((*(ns->firing_list+k))->input->objects+l))->first; ac!=0; ac=ac->follow)
                            if(ac==(*((*(ns->firing_list+i))->input->objects+j))->actual)
                              n_i++;
          temp=MApF((long int)n_i); /* temp points to all shared inputs */
 
          for(n_i=0, i=0; inumber_of_populations; i++)
             for(j=0; j<(*(ns->firing_list+i))->input->number_of_objects; j++)
                for((*((*(ns->firing_list+i))->input->objects+j))->actual=(*((*(ns->firing_list+i))->input->objects+j))->first; (*((*(ns->firing_list+i))->input->objects+j))->actual!=0;  (*((*(ns->firing_list+i))->input->objects+j))->actual=(*((*(ns->firing_list+i))->input->objects+j))->actual->follow)
                   for(k=i+1; knumber_of_populations; k++)
                      for(l=0; l<(*(ns->firing_list+k))->input->number_of_objects; l++)
                         for(ac=(*((*(ns->firing_list+k))->input->objects+l))->first; ac!=0; ac=ac->follow)
                            if(ac==(*((*(ns->firing_list+i))->input->objects+j))->actual)
                              *(temp+n_i++)=&(ac->membership); /* pointing on the shared input */
       
          /* reducing temp with duplicated inputs */
          if(n_i>0)
            {
              temp1=MApF((long int)n_i);
             }
          else
            {
              temp1=0;
             };
          for(ns->number_of_shared_inputs=0, i=0; inumber_of_shared_inputs++)=*(temp+i);
              };
          free((char*) temp); /* releasing temp's memory */
       
          /* moving pointers from temp1 into ns->shared_inputs to save allocated memory */
          if(ns->number_of_shared_inputs>0)
            {
              ns->shared_inputs=MApF((long int)ns->number_of_shared_inputs);
             }
          else
            {
              ns->shared_inputs=0;
             };
          for(i=0; inumber_of_shared_inputs; i++)
             *(ns->shared_inputs+i)=*(temp1+i);
          if(temp1!=0) free((char*) temp1); /* releasing temp's memory */
            
          /* creating and filling of the vector output_is_shared */
          ns->output_is_shared=MAEB((long int)ns->number_of_populations); /* ns->output_is_shared is set T if its population's output is shared between/among any populations inside the subsystem */
          for(i=0; inumber_of_populations; i++)
              *(ns->output_is_shared+i)=F;
               
          for(i=0; inumber_of_populations; i++)
             for(k=0; k<(*(ns->firing_list+i))->output->number_of_objects; k++)
                for((*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->first; (*((*(ns->firing_list+i))->output->objects+k))->actual!=0; (*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->actual->follow)
                   for(j=0; jnumber_of_shared_inputs; j++)
                      if(&((*((*(ns->firing_list+i))->output->objects+k))->actual->membership)==*(ns->shared_inputs+j)) *(ns->output_is_shared+i)=T;
         };

     } /* ; */

void fire_learning_algorithms_inside_subsystem(struct neural_subsystem *ns)
/* fires learning algorithm for all populations (and therefore all neurones) inside the subsystem */
/* it (usually) doesn't include weights update */
/* also cares for the case some populations share the same input to enable each population to have original value while its learning is trigged and to have updated valu on the output if its output is shared */
/* at the end all inputs are set to updated (by firing learning) values */
     {
       int i, j, k/*, l */;
       float *mem1, *mem2;
               
       if(ns->number_of_shared_inputs>0)
         {
           mem1=MAF((long int)ns->number_of_shared_inputs); /* mem1 is vector of original input values for all shared inputs */
           mem2=MAF((long int)ns->number_of_shared_inputs); /* mem1 is vector of updated input values for all shared inputs */
          }
       else
         {
           mem1=0;
           mem2=0;
          };
       
       for(i=0; inumber_of_shared_inputs; i++)
          {
            *(mem1+i)=**(ns->shared_inputs+i);
            *(mem2+i)=*(mem1+i);
           };
           
       /* firing learning algorithms and refreshing shared inputs and updating their values when becomming outputs */
       
       for(i=ns->number_of_populations-1; i>-1; i--)
          {
            if(*(ns->output_is_shared+i)==T)
              for(j=0; jnumber_of_shared_inputs; j++)
                 for(k=0; k<(*(ns->firing_list+i))->output->number_of_objects; k++)
                    for((*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->first; (*((*(ns->firing_list+i))->output->objects+k))->actual!=0; (*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->actual->follow)
                       if(&((*((*(ns->firing_list+i))->output->objects+k))->actual->membership)==*(ns->shared_inputs+j)) (*((*(ns->firing_list+i))->output->objects+k))->actual->membership=*(mem2+j); /* updating output value according all updates of it as an input */
            
            /* firing learning algorithm */
            (*(ns->firing_list+i))->learning_algorithm->fire((*(ns->firing_list+i))->learning_algorithm);
            
            /* for population whose learning algorithm is being fired shares its inputs they (it's made by reverting all shared inputs) must be reverted to original value from mem1 and updates stored inside mem2 */
            for(k=0; knumber_of_shared_inputs; k++)
               {
                 *(mem2+k)+=**(ns->shared_inputs+k)-(*(mem1+k)); /* updating input's updated value according the corrections through i-th population */
                 **(ns->shared_inputs+k)=(*(mem1+k)); /* storing original value into shared input */
                };
            
            if(*(ns->output_is_shared+i)==T)
              for(j=0; jnumber_of_shared_inputs; j++)
                 for(k=0; k<(*(ns->firing_list+i))->output->number_of_objects; k++)
                    for((*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->first; (*((*(ns->firing_list+i))->output->objects+k))->actual!=0; (*((*(ns->firing_list+i))->output->objects+k))->actual=(*((*(ns->firing_list+i))->output->objects+k))->actual->follow)
                       if(&((*((*(ns->firing_list+i))->output->objects+k))->actual->membership)==*(ns->shared_inputs+j))
                         if(**(ns->shared_inputs+j)==*(mem2+j)) **(ns->shared_inputs+j)=*(mem1+j); /* changing output value to the original one because of recurrent connections, except when it's already changed through changing shared inputs (because of recurrent connections) */
           };
       /* releasing reserved memory not required any more */
       
       if(mem1!=0) free((char*) mem1);
       
       /* replacing all shared input values with updated ones */
       for(i=0; inumber_of_shared_inputs; i++)
          **(ns->shared_inputs+i)=*(mem2+i);
       
       if(mem2!=0) free((char*) mem2);
      } /* ; */

void learning_algorithms_weights_correction_inside_subsystem(struct neural_subsystem *ns)
/* updates weights for all populations (and therefore all neurones) inside the subsystem */
    {
      int i;
      for(i=ns->number_of_populations-1; i>-1; i--)
         if((*(ns->firing_list+i))->learning_algorithm->weights_correction!=0) (*(ns->firing_list+i))->learning_algorithm->weights_correction((*(ns->firing_list+i))->learning_algorithm);
     } /* ; */

void learning_algorithms_reset_weights_correction_inside_subsystem(struct neural_subsystem *ns)
/* reset weights correction for all populations (and therefore all neurones) inside the subsystem */
    {
      int i;
      for(i=ns->number_of_populations-1; i>-1; i--)
         if((*(ns->firing_list+i))->learning_algorithm->reset_weights_correction!=0) (*(ns->firing_list+i))->learning_algorithm->reset_weights_correction((*(ns->firing_list+i))->learning_algorithm);
     } /* ; */

void delete_learning_algorithms_inside_subsystem(struct neural_subsystem *ns)
/* deletes learning algorithm for all populations (and therefore all neurones) inside the subsystem */
    {
      int i;
      for(i=ns->number_of_populations-1; i>-1; i--)
         if((*(ns->firing_list+i))->learning_algorithm!=0)
           {
             (*(ns->firing_list+i))->learning_algorithm->deleting((*(ns->firing_list+i))->learning_algorithm);
             (*(ns->firing_list+i))->learning_algorithm=0;
            };

     } /* ; */

void change_subsystem_learning_rate(struct neural_subsystem *ns, float new_learning_rate)
/* changes learning rate into already existing neural subsystem's populations' learning algorithm (includes changing of learning rate into consisted neuron learning algorithms) */
    {
      int i;
      /* changing learning rate in consisted neuron populations */
      for(i=0; inumber_of_populations; i++)
         change_learning_algorithm_learning_rate((*(ns->firing_list+i))->learning_algorithm, new_learning_rate);
     }/* ; */


/* functions that deal with neural_system */

neural_system *create_neural_system(struct chromosome *code, struct subsystem_tree **trees)
/* creates neural system together with filling tree structures inside the system (through calling required functions) and input fuzzy sets */
/* struct subsystem_tree **trees must consists subsystem trees of all subsystems inside the system in order from roots toward leaves. Opposite order is stored into the system's firing_list used for firing the subsystem. firing_list can be later manualy (or by an additional function) rearranged */
             {
               struct neural_system *s;
               struct neuron_population ***virtual_populations;
               struct fuzzy_set **in;
               enum Bool **inputs;
               int i, j, k, l, m, *roots, *leaves;
               
               /* creating neural system and filling its structure */
               s=MANS((long int)1);
               s->code=code;
               s->number_of_subsystems=code->number_of_genes;
               
               s->number_of_shared_inputs=-1;
               s->shared_inputs=0;
               s->output_is_shared=0;
               
               /* creating virtual_populations and inputs */
               virtual_populations=MAppNP((long int)s->number_of_subsystems);
               inputs=MApEB((long int)s->number_of_subsystems);
               for(i=0; inumber_of_subsystems; i++)
                  {
                    *(virtual_populations+i)=MApNP((long int)(*(code->genes+i))->number_of_nucleotide_bases+1);
                    *(inputs+i)=MAEB((long int)(*(code->genes+i))->number_of_nucleotide_bases);
                    for(j=0; j<(*(code->genes+i))->number_of_nucleotide_bases; j++)
                       {
                         (*(*(virtual_populations+i)+j))=0;
                         *(*(inputs+i)+j)=F;
                        };
                    *(*(virtual_populations+i)+(*(code->genes+i))->number_of_nucleotide_bases)=0;
                   };
               
               /* creating the system's neural subsystems */
               for(i=s->number_of_subsystems-1; i>-1; i--)
                  {
                    *(*(virtual_populations+i)+0)=(struct neuron_population*)create_neural_subsystem_from_gene_and_subsystem_tree(*(code->genes+i), *(trees+i), virtual_populations, inputs);
                    ((neural_subsystem*)(*(*(virtual_populations+i)+0)))->system=s;
                   };
               
               /* filling still unfilled pointers (value<0) of neural populations inside the system */
               for(i=s->number_of_subsystems-1; i>-1; i--)
                  for(j=1; j<(*(code->genes+i))->number_of_nucleotide_bases+1; j++)
                     for(k=0; k<(*(*(virtual_populations+i)+j))->number_of_leaf_populations; k++)
                        {
                          if((int)(*((*(*(virtual_populations+i)+j))->leaf+k))<0)
                            {
                              m=0;
                              for(l=0;(*((*(trees+i))->leaf_in_other_subsystems[0]+l)!=j)&&(l<(*(trees+i))->number_of_leaf_in_other_subsystems); )
                                 l++;
                              if(j<(*(trees+i))->number_of_leaf_in_other_subsystems)
                                for( ; (*((*(trees+i))->leaf_in_other_subsystems[0]+l)==j)&&(m!=k); )
                                   {
                                     m++;
                                     l++;
                                    };
                              if(m==k)
                                {
                                  *((*(*(virtual_populations+i)+j))->leaf+k)=*(*(virtual_populations+(*((*(trees+1))->leaf_in_other_subsystems[1]+l))-1)+(*((*(trees+i))->leaf_in_other_subsystems[2]+l)));
                                 }
                              else
                                {
                                  for(l=0; (*((*(trees+i))->leaf_pairs[0]+l)!=j)&&(l<(*(trees+i))->number_of_leaf_pairs); )
                                     l++;
                                  if(l>=(*(trees+i))->number_of_leaf_pairs) exit_handling(1009,1); /* required neuron population cannot be found inside its subsystem's subsystem tree */
                                  for( ; (*((*(trees+i))->leaf_pairs[0]+l)==j)&&(m!=k); )
                                     {
                                       m++;
                                       l++;
                                      };
                                  if(m!=k) exit_handling(1009,2); /* required leaf neuron population (to be pointed) can't be found inside virtual_populations */
                                  *((*(*(virtual_populations+i)+j))->leaf+k)=*(*(virtual_populations+(*(trees+i))->identification_number-1)+(*((*(trees+i))->leaf_pairs[1]+l)));
                                 };
                              };
                          if(*(*(inputs+i)+j-1)==T) exit_handling(1009,3); /* There is still undefined neuron population input fuzzy set and a function for treating it is not developed yet.A function for inserting fuzzy set should be inserted instead of this exit handling(1009,3). */
                         };
               
               /* creating and filling firing_list with pointers on subsystems in inverse order than in vector trees */
               s->firing_list=MApNSS((long int)s->number_of_subsystems);
               for(i=s->number_of_subsystems; i>0; i--)
                  *(s->firing_list+s->number_of_subsystems-i)=(neural_subsystem*)(*(*(virtual_populations+i-1)+0));
               
               /* creating and filling vectors roots and leaves */
               s->number_of_roots_subsystems=0;
               s->number_of_leaves_subsystems=0;
               roots=MAI((long int)s->number_of_subsystems);
               leaves=MAI((long int)s->number_of_subsystems);
               for(i=0; inumber_of_subsystems; i++)
                  {
                    *(roots+i)=0;
                    *(leaves+i)=0;
                   };
               /* searching for leaves subsystems */
               for(i=0; inumber_of_subsystems; i++)
                  if((*(trees+i))->number_of_leaf_in_other_subsystems==0) *(leaves+s->number_of_leaves_subsystems++)=(*(trees+i))->identification_number;
               /* searching for roots subsystems */
               for(i=0; inumber_of_subsystems; i++)
                  {
                    for(j=0, m=0; (jnumber_of_subsystems)&&(m==0); j++)
                       for(k=0; (k<(*(trees+j))->number_of_leaf_in_other_subsystems)&&(m==0); k++)
                          if(*((*(trees+j))->leaf_in_other_subsystems[1]+k)==(*(trees+i))->identification_number) m=1;
                    if(m==0) *(roots+s->number_of_roots_subsystems++)=(*(trees+i))->identification_number;
                   };
               /* saving roots subsystems */
               if(s->number_of_roots_subsystems==0)
                 {
                   s->roots=0;
                   exit_handling(1009,4); /* this system has recurrent connections to its roots so roots have to be selected manualy, or by an additional function */
                   /* if the problem of selecting root subsystems is solved then disable exit_handling(1009,4) */
                  }
               else
                 {
                   s->roots=MApNSS((long int)s->number_of_roots_subsystems);
                   for(i=0; inumber_of_roots_subsystems; i++)
                      *(s->roots+i)=(neural_subsystem*)(*(*(virtual_populations+(*(trees+(*(roots+i))-1))->identification_number-1)+0));
                  };
               /* releasing roots memory */
               free((char*)roots);
               /* saving leaves subsystems */
               if(s->number_of_leaves_subsystems==0)
                 {
                   s->leaves=0;
                   exit_handling(1009,5); /* this system has recurrent connections from its leaves so leaves have to be selected manualy, or by an additional function */
                   /* if the problem of selecting leaves subsystems is solved then disable exit_handling(1009,5) */
                  }
               else
                 {
                   s->leaves=MApNSS((long int)s->number_of_leaves_subsystems);
                   for(i=0; inumber_of_leaves_subsystems; i++)
                      *(s->leaves+i)=(neural_subsystem*)(*(*(virtual_populations+(*(trees+(*(leaves+i))-1))->identification_number-1)+0));
                  };
               /* releasing leaves memory */
               free((char*)leaves);
               
               /* releasing virtual_populations and inputs. If they are required for further/higher level processing the following code should be disabled and (pointers to) structures transfered into required functions */
               for(i=0; inumber_of_subsystems; i++)
                  {
                    free((char*)(*(virtual_populations+i)));
                    free((char*)(*(inputs+i)));
                   };
               free((char*)virtual_populations);
               free((char*)inputs);
               
               /* creating output fuzzy set */
               in=MApFS((long int)s->number_of_roots_subsystems);
               for(i=0; inumber_of_roots_subsystems; i++)
                  *(in+i)=(*(s->roots+i))->output;
               s->output=many2one(s->number_of_roots_subsystems,in);
               free((char*)in);
               
               /* creating input fuzzy set */
               in=MApFS((long int)s->number_of_leaves_subsystems);
               for(i=0; inumber_of_leaves_subsystems; i++)
                  *(in+i)=(*(s->leaves+i))->input;
               s->input=many2one(s->number_of_leaves_subsystems,in);
               free((char*)in);
               
               return(s);
              } /* ; */

void delete_neural_system(struct neural_system *head)
/* deletes neural system and releases its memory */
    {
      int i;
      for(i=0; inumber_of_subsystems; i++)
         delete_neural_subsystem(*(head->firing_list+i));
      free((char*) head->firing_list);
      delete_fuzzy_set(head->output);
      delete_fuzzy_set(head->input);
      free((char*) head->roots);
      free((char*) head->leaves);
      if(head->number_of_shared_inputs>0) free((char*) head->shared_inputs);
      if(head->number_of_shared_inputs>0) free((char*) head->output_is_shared);
      free((char*) head);
     };

void fire_neural_system(struct neural_system *s)
/* fires neural system by firing its subsystems in the same order as written (pointers) in its vector firing_list */
    {
      int i;
      for(i=0; inumber_of_subsystems; i++)
         fire_neural_subsystem(*(s->firing_list+i));
     } /* ; */

float **finding_phantom_objects_inside_system(struct neural_system *s)
/* phantom objects are fuzzy objects inserted to present zero input when input window (local input field) gets out of the input fuzzy set (usually representing picture) */
/* returns vector of pointers on phantom objects' memberships, but the first value is not pointer but NUMBER OF PHANTOM OBJECTS' MEMBERSHIPS INSIDE THE POPULATION. So returned vector has number of pointers + 1 element */
            {
              float **p1, **p2;
              int i, j, k, l, m, ip1, ip2;
              enum Bool appeared;
              
              /* reserving memory for storing pointers. It is supposed that there is no more phantom objects' memberships than all objects' memberships inside the system input fuzzy sets */
              for(i=0, ip1=0; inumber_of_subsystems; i++)
                 for(j=0; j<(*(s->firing_list+i))->number_of_populations; j++)
                    for(k=0; k<(*((*(s->firing_list+i))->firing_list+j))->input->number_of_objects; k++)
                       ip1+=(*((*((*(s->firing_list+i))->firing_list+j))->input->objects+k))->number_of_characteristics;
              p1=MApF((long int)ip1);
              
              /* searching for phantom objects' memberships */
              for(i=0, ip1=0; inumber_of_subsystems; i++)
                 for(j=0; j<(*(s->firing_list+i))->number_of_populations; j++)
                    for(k=0; k<(*((*(s->firing_list+i))->firing_list+j))->number_of_neurones; k++)
                       for(l=0; l<(*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->number_of_nodes; l++)
                          for((*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual=(*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->first; (*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual!=0; (*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual=(*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual->follow)
                            {
                              for(m=0, appeared=F; (m<(*((*(s->firing_list+i))->firing_list+j))->input->number_of_objects)&&(appeared==F); m++)
                                 for((*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->actual=(*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->first; ((*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->actual!=0)&&(appeared==F); (*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->actual=(*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->actual->follow)
                                    if((*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual->set==(fuzzy_object*)(&((*((*((*(s->firing_list+i))->firing_list+j))->input->objects+m))->actual->membership)))
                                    	{
                                     		/* skipping BIAS_fuzzy_objects - name of weights pointing on it is "BIAS" */
                                     		if((*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual->name=NULL)
                                     			appeared=T;
											else if((*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual->name!="BIAS")
                                     			appeared=T;
										};
                              if(appeared==F) *(p1+ip1++)=(float*)(*((*((*((*(s->firing_list+i))->firing_list+j))->neurones+k))->first_Level->nodes+l))->actual->set;
                             };
              
              if(ip1>0)
                {
                  /* elimination of multiple appearance */
                  p2=MApF((long int)ip1);
                  for(i=0, ip2=0; inumber_of_subsystems-1; i>-1; i--)
           create_learning_algorithms_inside_subsystem(*(s->firing_list+i), learning_constant);

      /* creating and filling vectors shared_inputs and output_is_shared when (the system's) number_of_shared_inputs is less than zero by searching for shared inputs among the subsystems inside the system and tracking info about them */
     
      if(s->number_of_shared_inputs<0) /* it means it is not filled during a creation of previous (if any) the system ('s subsystems' populations) learning algorithms */
        { 
          for(n_i=0, i=0; inumber_of_subsystems; i++)
             for(j=0; j<(*(s->firing_list+i))->input->number_of_objects; j++)
                for((*((*(s->firing_list+i))->input->objects+j))->actual=(*((*(s->firing_list+i))->input->objects+j))->first; (*((*(s->firing_list+i))->input->objects+j))->actual!=0; (*((*(s->firing_list+i))->input->objects+j))->actual=(*((*(s->firing_list+i))->input->objects+j))->actual->follow)
                   for(k=i+1; knumber_of_subsystems; k++)
                      for(l=0; l<(*(s->firing_list+k))->input->number_of_objects; l++)
                         for(ac=(*((*(s->firing_list+k))->input->objects+l))->first; ac!=0; ac=ac->follow)
                            if(ac==(*((*(s->firing_list+i))->input->objects+j))->actual)
                              n_i++;
          temp=MApF((long int)n_i); /* temp points to all shared inputs */
          
          for(n_i=0, i=0; inumber_of_subsystems; i++)
             for(j=0; j<(*(s->firing_list+i))->input->number_of_objects; j++)
                for((*((*(s->firing_list+i))->input->objects+j))->actual=(*((*(s->firing_list+i))->input->objects+j))->first; (*((*(s->firing_list+i))->input->objects+j))->actual!=0; (*((*(s->firing_list+i))->input->objects+j))->actual=(*((*(s->firing_list+i))->input->objects+j))->actual->follow)
                   for(k=i+1; knumber_of_subsystems; k++)
                      for(l=0; l<(*(s->firing_list+k))->input->number_of_objects; l++)
                         for(ac=(*((*(s->firing_list+k))->input->objects+l))->first; ac!=0; ac=ac->follow)
                            if(ac==(*((*(s->firing_list+i))->input->objects+j))->actual)
                              *(temp+n_i++)=&(ac->membership); /* pointing on the shared input */

          /* reducing temp with duplicated inputs */
          if(n_i>0)
            {
              temp1=MApF((long int)n_i);
             }
          else
            {
              temp1=0;
             };
          for(s->number_of_shared_inputs=0, i=0; inumber_of_shared_inputs++)=*(temp+i);
              };
          free((char*) temp); /* releasing temp's memory */
   
          /* moving pointers from temp1 into s->shared_inputs to save allocated memory */
          if(s->number_of_shared_inputs>0)
            {
              s->shared_inputs=MApF((long int)s->number_of_shared_inputs);
             }
          else
            {
              s->shared_inputs=0;
             };
          for(i=0; inumber_of_shared_inputs; i++)
             *(s->shared_inputs+i)=*(temp1+i);
          if(temp1!=0) free((char*) temp1); /* releasing temp1's memory */
          
          s->output_is_shared=MAEB((long int)s->number_of_subsystems); /* s->output_is_shared is set T if its subsystem's output is shared between/among any subsystems inside the system */
          for(i=0; inumber_of_subsystems; i++)
             *(s->output_is_shared+i)=F;
          
          for(i=0; inumber_of_subsystems; i++)
             for(k=0; k<(*(s->firing_list+i))->output->number_of_objects; k++)
                for((*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->first; (*((*(s->firing_list+i))->output->objects+k))->actual!=0; (*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->actual->follow)
                   for(j=0; jnumber_of_shared_inputs; j++)
                      if(&((*((*(s->firing_list+i))->output->objects+k))->actual->membership)==*(s->shared_inputs+j)) *(s->output_is_shared+i)=T;
         };

     } /* ; */

void fire_learning_algorithms_inside_system(struct neural_system *s)
/* fires learning algorithm for all subsystems (and therefore all populations and all neurones) inside the system */
/* it (usually) doesn't include weights update */
/* also cares for the case some subsystems share the same input to enable each subsystem to have original value while its learning is trigged and to have updated valu on the output if its output is shared */
/* at the end all inputs are set to updated (by firing learning) values */
     {
       int i, j, k /*, l */;
       float *mem1, *mem2;
              
       if(s->number_of_shared_inputs>0)
         {
           mem1=MAF((long int)s->number_of_shared_inputs); /* mem1 is vector of original input values for all shared inputs */
           mem2=MAF((long int)s->number_of_shared_inputs); /* mem1 is vector of updated input values for all shared inputs */
          }
       else
         {
           mem1=0;
           mem2=0;
          };
       
       for(i=0; inumber_of_shared_inputs; i++)
          {
            *(mem1+i)=**(s->shared_inputs+i);
            *(mem2+i)=*(mem1+i);
           };
       
       /* firing learning algorithms of the subsystems inside the system and refreshing shared inputs and updating their values when becomming outputs */
       
       for(i=s->number_of_subsystems-1; i>-1; i--)
          {
            if(*(s->output_is_shared+i)==T)
              for(j=0; jnumber_of_shared_inputs; j++)
                 for(k=0; k<(*(s->firing_list+i))->output->number_of_objects; k++)
                    for((*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->first; (*((*(s->firing_list+i))->output->objects+k))->actual!=0; (*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->actual->follow)
                       if(&((*((*(s->firing_list+i))->output->objects+k))->actual->membership)==*(s->shared_inputs+j)) (*((*(s->firing_list+i))->output->objects+k))->actual->membership=*(mem2+j); /* updating output value according all updates of it as an input */
            
            /* firing learning algorithms inside the system's selected subsystem */
            fire_learning_algorithms_inside_subsystem(*(s->firing_list+i));
            
            /* if the subsystem whose learning algorithm is being fired shares its inputs they (it's made by reverting all shared inputs) must be reverted to original value from mem1 and updates stored inside mem2 */
            for(k=0; knumber_of_shared_inputs; k++)
              {
                *(mem2+k)+=**(s->shared_inputs+k)-(*(mem1+k)); /* updating input's updated value according the corrections through i-th subsystem */
                **(s->shared_inputs+k)=(*(mem1+k)); /* storing original value into shared input */
               };
            
            if(*(s->output_is_shared+i)==T)
                for(j=0; jnumber_of_shared_inputs; j++)
                   for(k=0; k<(*(s->firing_list+i))->output->number_of_objects; k++)
                      for((*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->first; (*((*(s->firing_list+i))->output->objects+k))->actual!=0; (*((*(s->firing_list+i))->output->objects+k))->actual=(*((*(s->firing_list+i))->output->objects+k))->actual->follow)
                         if(&((*((*(s->firing_list+i))->output->objects+k))->actual->membership)==*(s->shared_inputs+j))
                           if(**(s->shared_inputs+j)==*(mem2+j)) **(s->shared_inputs+j)=*(mem1+j); /* changing output value to the original one because of recurrent connections, except when it's already changed through changing shared inputs (because of recurrent connections) */
           };
       /* releasing reserved memory not required any more */
       
       if(mem1!=0) free((char*) mem1);
       
       /* replacing all shared input values with updated ones */
       for(i=0; inumber_of_shared_inputs; i++)
          **(s->shared_inputs+i)=*(mem2+i);
       
       if(mem2!=0) free((char*) mem2);
      } /* ; */

void learning_algorithms_weights_correction_inside_system(struct neural_system *s)
/* updates weights for all subsystems (and therefore all populations and all neurones) inside the system */
    {
      int i;
      for(i=s->number_of_subsystems-1; i>-1; i--)
         learning_algorithms_weights_correction_inside_subsystem(*(s->firing_list+i));
     } /* ; */

void learning_algorithms_reset_weights_correction_inside_system(struct neural_system *s)
/* reset weights correction for all subsystems (and therefore all populations and all neurones) inside the system */
    {
      int i;
      for(i=s->number_of_subsystems-1; i>-1; i--)
         learning_algorithms_reset_weights_correction_inside_subsystem(*(s->firing_list+i));
     } /* ; */

void delete_learning_algorithms_inside_system(struct neural_system *s)
/* deletes learning algorithm for all subsystems (and therefore all populations and all neurones) inside the system */
    {
      int i;
      for(i=s->number_of_subsystems-1; i>-1; i--)
         delete_learning_algorithms_inside_subsystem(*(s->firing_list+i));
     } /* ; */

void change_system_learning_rate(struct neural_system *s, float new_learning_rate)
/* changes learning rate into already existing neural system's neural subsystems' populations' learning algorithm (includes changing of learning rate into consisted neuron learning algorithms) */
    {
      int i;
      /* changing learning rate in consisted neuron populations */
      for(i=0; inumber_of_subsystems; i++)
         change_subsystem_learning_rate(*(s->firing_list+i), new_learning_rate);
     }/* ; */


          
/* highest_difference_from_neighborns neuron functions */

neuron *create_highest_difference_from_neighborns(fuzzy_set *input)
/* create the neuron of highest_difference_from_neighborns type. Input fuzzy set (record) consists of (pointers on) fuzzy objects the first of them is the one whose the highest difference from neighborns is to be calculated while its neighborns follow. */


          {
            neuron *head;
            int i;
            float *weights;
	    enum Bool check;
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=2;
            head->first_Level=first_Level_highest_difference_from_neighborns(input);
            weights=MAF((long int)head->first_Level->number_of_nodes*1);
            for(i=0; ifirst_Level->number_of_nodes*1; i++)
                *(weights+i)=1.0;
            head->actual_Level=head->first_Level;
            head->last_Level=fill_Level(2,head->first_Level->number_of_nodes,1,weights,head->actual_Level);
            head->actual_Level->follow=head->last_Level;
	    check=setup_weights_pointers(head->last_Level,head->actual_Level);
	    if(check==F) exit_handling(2,1);
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=1;
            head->output->first=MACl((long int)1);
            head->output->last=head->output->first;
            head->output->actual=head->output->first;
            head->output->first->name=0;
            head->output->first->membership=0.0;
            head->output->first->ahead=0;
            head->output->first->follow=0;
            head->output->first->set=*(head->last_Level->nodes);
            return(head);
           } /* ; */

Level *first_Level_highest_difference_from_neighborns(fuzzy_set *input)
/* create first Level (and its nodes for highest_difference_from_neighborns neuron type. Objects from input fuzzy sets are pointed from the first object in pair with each other object for each nodes in order (1st node:1st & 2nd; 2nd node:1st & 3rd; 3rd node:1st & 4th; etc.). Also if input fuzzy set's objects consist more than 1 characteristic characteristics are pointed in their order first from the first object than from its pair one by one zic-zac (1st object 1st characteristic, its pair object 1st characteristic, 1st object 2nd characteristic, its pair object 2nd characteristic, 1st object 3rd characteristic, its pair object 3rd characteristic, 1st object 4th characteristic, its pair object 4th characteristic, etc.). OBJECTS are assumed to HAVE THE SAME NUMBER OF characteristics ! */
        {
          Level *head;
          int i;
          head=MALe((long int)1);
          head->follow=0;
          head->ahead=0;
          head->number_of_nodes=(input->number_of_objects<9)?input->number_of_objects-1:8;
          head->Level_number=1;
          head->nodes=MApFO((long int)head->number_of_nodes);
          for(i=0; inumber_of_nodes; i++)
              (*(head->nodes+i))=node_first_Level_highest_difference_from_neighborns(*(input->objects+0), *(input->objects+i+1));
          return(head);
         } /* ; */

fuzzy_object *node_first_Level_highest_difference_from_neighborns(fuzzy_object *object1, fuzzy_object *object2)
/* creates node for 1st Level of highest_difference_from_neighborns neuron type. If objects consist more than 1 characteristic characteristics are pointed in their order first from the object1 than from object2 one by one zic-zac (object1 1st characteristic, object2 1st characteristic, object1 2nd characteristic, object2 2nd characteristic, object1 3rd characteristic, object2 3rd characteristic, object1 4th characteristic, object2 4th characteristic, etc.). OBJECTS are assumet to HAVE THE SAME NUMBER OF characteristics ! */
	{
	  fuzzy_object *head;
	  float *weights;
	  characteristic *ahead;
	  int i;
	  head=MAFO((long int)1);
	  head->m.name=0;
	  weights=MAF((long int)1);
	  *weights=1.0;
	  ahead=0;
	  head->number_of_characteristics=(object1->number_of_characteristicsnumber_of_characteristics)?object1->number_of_characteristics: object2->number_of_characteristics;
	  for(i=0, object1->actual=object1->first, object2->actual=object2->first; inumber_of_characteristics; i++)
	      {
	        head->actual=fill_weight(ahead, weights);
	        if(ahead==0)
	          head->first=head->actual;
	        else
	          ahead->follow=head->actual;
	        head->actual->set=(fuzzy_object*)(&(object1->actual->membership));
	        object1->actual=object1->actual->follow;
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->actual->set=(fuzzy_object*)(&(object2->actual->membership));
	        object2->actual=object2->actual->follow;
	        ahead=head->actual;
	       };
	   testfree((char*)weights);
	   return(head);
	  } /* ; */

void firing_highest_difference_from_neighborns(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. (First Level) node output function is pointed inside neuron's nucleide base while the last Level (only one) node output is its Maximal input. It means the function can deal with multi-layer (multi-Level) neurones whose last Level function is to find Maximum of the previous layer (Level) outputs. Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
      {
        int i;
        /* calculation of nodes output propagation up to before the last Level */
        for(head->actual_Level=head->first_Level; head->actual_Level!=head->last_Level; head->actual_Level=head->actual_Level->follow)
            for(i=0; iactual_Level->number_of_nodes; i++)
                (*(head->actual_Level->nodes+i))->m.notes=code->node_output(code->node_linear_output(*(head->actual_Level->nodes+i), head->actual_Level->Level_number));
        /* calculation of the last Level's node output as Maximum of the previous Level outputs */
        head->output->first->set->m.notes=Max_output_node(head->output->first->set);
        head->output->first->membership=head->output->first->set->m.notes;
       } /* ; */


/* corner_extractor neuron functions */

fuzzy_set **preparing_corner_extractor_neuron_population_neuron_inputs_through_window(neuron_population *np, int window_radius, int horisontal_resolution, int vertical_resolution)
/* Returns pointer on array of pointers on fuzzy sets (the same number of fuzzy sets as fuzzy objects in input fuzzy set). Prepares neuron population's neurones' input fuzzy sets from neuron population input fuzzy set presenting "picture" with dimension horisontal_resolution * vertical_resolution in a following way: each fuzzy object in neural population's input fuzzy set becomes the first fuzzy object in one and only one neuron's (inside the population) input fuzzy set, other fuzzy objects in input fuzzy set of a neuron (inside population) are fuzzy objects placed on the neuron population input "picture" inside window radius from the first object in the neuron's input (or better said placed inside square each side equal two times window radius=1 with center in the first object in neuron's input). It is similar as shifting square window (each side=2*window_radius) on the picture and inputing the central pixel as the first followed by other pixel inside window. If the window gets out of picture (means central pixel is on the edge) pixel out of picture are replaced with created fuzzy_object pointed with edge whose characteristic' memberships are all 0.0 and consists as many characteristics as input fuzzy_set's the first objects does. If neuron population has different number of neurones than its input fuzzy set unsucessful program termination is caused (exit_handling(3,1)) ! */
/* When returned array is used memory consisting data not necessary for future work should be liberate (using command testfree())! This usually means following: "for(i=0; inumber_of_neurones; testfree((char*)(*(head+i))->name), testfree((char*)(*(head+i))->objects), testfree((char*)*(head+i++))); testfree((char*)head);" after creating neuron population's neurones. */
               {
                 int /* h, */ v,i,/* c, */ a,b;
                 fuzzy_set **head;
                 fuzzy_object* edge;
                 char *names;
                 float *memberships;
                 if(np->number_of_neurones!=np->input->number_of_objects) exit_handling(3,1);
                 if(window_radius!=1)
                   {
                     printf("\n WARNING: inside function fuzzy_set **preparing_corner_extractor_neuron_population_neuron_inputs_through_window() window_radius<>1! \n At the begining of the function is forced window_radius=1 !");
                     window_radius=1;
                    };
                 names=MAC((long int)2*(*(np->input->objects))->number_of_characteristics+2);
                 *(names+0)='0';
                 *(names+1)=' ';
                 memberships=MAF((long int)(*(np->input->objects))->number_of_characteristics);
                 for(v=0; v<(*(np->input->objects))->number_of_characteristics; v++)
                    {
                      *(memberships+v)=0.0;
                      *(names+2*v+2)='0';
                      *(names+2*v+3)=' ';
                     };
                 edge=set_fill((*(np->input->objects))->number_of_characteristics,names, memberships);
                 testfree((char*)names);
                 testfree((char*)memberships);
                 head=MApFS((long int)np->number_of_neurones);
                 for(i=0; inumber_of_neurones; i++)
                     {
		       		   *(head+i)=MAFS((long int)1);
                       (*(head+i))->name=MAC((long int)2);
                       *((*(head+i))->name+0)='I';
                       *((*(head+i))->name+1)=' ';
                       a=(int)fmod((double)i,(double)horisontal_resolution);
                       b=(int)floor(((double)i)/((double)horisontal_resolution));
                       (*(head+i))->number_of_objects=9;
                       (*(head+i))->objects=MApFO((long int)(*(head+i))->number_of_objects);
                       *((*(head+i))->objects+0)=*(np->input->objects+i);
                       if(a==0)
                         {
                           if(b==0)
                             {
                               for(v=1; v<5; v++)
                                  *((*(head+i))->objects+v)=edge;
                               *((*(head+i))->objects+5)=*(np->input->objects+1);
                               *((*(head+i))->objects+6)=edge;
                               *((*(head+i))->objects+7)=*(np->input->objects+horisontal_resolution);
                               *((*(head+i))->objects+8)=*(np->input->objects+horisontal_resolution+1);
                              }
                           else if(b==vertical_resolution-1)
                                 {
                                   *((*(head+i))->objects+1)=edge;
                                   *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                                   *((*(head+i))->objects+3)=*(np->input->objects+i-horisontal_resolution+1);
                                   *((*(head+i))->objects+4)=edge;
                                   *((*(head+i))->objects+5)=*(np->input->objects+i+1);
                                   *((*(head+i))->objects+6)=edge;
                                   *((*(head+i))->objects+7)=edge;
                                   *((*(head+i))->objects+8)=edge;
                                  }
                           else
                               {
                                 *((*(head+i))->objects+1)=edge;
                                 *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                                 *((*(head+i))->objects+3)=*(np->input->objects+i-horisontal_resolution+1);
                                 *((*(head+i))->objects+4)=edge;
                                 *((*(head+i))->objects+5)=*(np->input->objects+i+1);
                                 *((*(head+i))->objects+6)=edge;
                                 *((*(head+i))->objects+7)=*(np->input->objects+i+horisontal_resolution);
                                 *((*(head+i))->objects+8)=*(np->input->objects+i+horisontal_resolution+1);
                                };
                          }
                       else if(a==horisontal_resolution-1)
                           {
                             if(b==0)
                               {
                                 for(v=1; v<4; v++)
                                    *((*(head+i))->objects+v)=edge;
                                 *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                                 *((*(head+i))->objects+5)=edge;
                                 *((*(head+i))->objects+6)=*(np->input->objects+i+horisontal_resolution-1);
                                 *((*(head+i))->objects+7)=*(np->input->objects+i+horisontal_resolution);
                                 *((*(head+i))->objects+8)=edge;
                                }
                             else if(b==vertical_resolution-1)
                                 {
                                   *((*(head+i))->objects+1)=*(np->input->objects+i-horisontal_resolution-1);
                                   *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                                   *((*(head+i))->objects+3)=edge;
                                   *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                                   for(v=5; v<9; v++)
                                      *((*(head+i))->objects+v)=edge;
                                  }
                             else
                                 {
                                   *((*(head+i))->objects+1)=*(np->input->objects+i-horisontal_resolution-1);
                                   *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                                   *((*(head+i))->objects+3)=edge;
                                   *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                                   *((*(head+i))->objects+5)=edge;
                                   *((*(head+i))->objects+6)=*(np->input->objects+i+horisontal_resolution-1);
                                   *((*(head+i))->objects+7)=*(np->input->objects+i+horisontal_resolution);
                                   *((*(head+i))->objects+8)=edge;
                                  };
                            }
                       else if(b==0)
                           {
                             for(v=1; v<4; v++)
                                *((*(head+i))->objects+v)=edge;
                             *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                             *((*(head+i))->objects+5)=*(np->input->objects+i+1);
                             *((*(head+i))->objects+6)=*(np->input->objects+i+horisontal_resolution-1);
                             *((*(head+i))->objects+7)=*(np->input->objects+i+horisontal_resolution);
                             *((*(head+i))->objects+8)=*(np->input->objects+i+horisontal_resolution+1);
                            }
                       else if(b==vertical_resolution-1)
                           {
                             *((*(head+i))->objects+1)=*(np->input->objects+i-horisontal_resolution-1);
                             *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                             *((*(head+i))->objects+3)=*(np->input->objects+i-horisontal_resolution+1);
                             *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                             *((*(head+i))->objects+5)=*(np->input->objects+i+1);
                             for(v=6; v<9; v++)
                                *((*(head+i))->objects+v)=edge;
                            }
                       else
                           {
                             *((*(head+i))->objects+1)=*(np->input->objects+i-horisontal_resolution-1);
                             *((*(head+i))->objects+2)=*(np->input->objects+i-horisontal_resolution);
                             *((*(head+i))->objects+3)=*(np->input->objects+i-horisontal_resolution+1);
                             *((*(head+i))->objects+4)=*(np->input->objects+i-1);
                             *((*(head+i))->objects+5)=*(np->input->objects+i+1);
                             *((*(head+i))->objects+6)=*(np->input->objects+i+horisontal_resolution-1);
                             *((*(head+i))->objects+7)=*(np->input->objects+i+horisontal_resolution);
                             *((*(head+i))->objects+8)=*(np->input->objects+i+horisontal_resolution+1);
                            };
                      };
                 return(head);
                } /* ; */
                
neuron *create_corner_extractor(fuzzy_set *input)
/* create the neuron of corner_extractor type. Input fuzzy set (record) consists of (pointers on) fuzzy objects the first of them is the middle one in the window (dimension3*3) that is also supposed to be a peak of recognised corner while its neighborns follow. */
          {
            neuron *head;
            fuzzy_object* *nodes_mem;
            int i;
            float *weights;
	          enum Bool check=T;
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=3;
            head->first_Level=first_Level_corner_extractor(input);
            weights=MAF((long int)8*1);
            for(i=0; i<8*1; i++)
                *(weights+i)=1.0;
            head->actual_Level=head->first_Level;
            head->last_Level=fill_Level(2,8,1,weights,head->actual_Level); /* creates the first node in the 2nd Level receiving inputs from the first eight nodes in first Level */
            head->last_Level->number_of_nodes=2;
            nodes_mem=head->last_Level->nodes;
            head->last_Level->nodes=MApFO((long int)2);
            *(head->last_Level->nodes)=*(nodes_mem);
            testfree((char*)nodes_mem);
            *(head->last_Level->nodes+1)=fill_node(4,weights);
            head->actual_Level->follow=head->last_Level;
            for((*(head->last_Level->nodes+0))->actual=(*(head->last_Level->nodes+0))->first,i=0; i<8;(*(head->last_Level->nodes+0))->actual=(*(head->last_Level->nodes+0))->actual->follow, i++)
               {
                 (*(head->last_Level->nodes+0))->actual->set=*(head->actual_Level->nodes+i);
                 if((*(head->last_Level->nodes+0))->actual==0) check=F;
                };
	           if(check==F) exit_handling(2,3);
            for((*(head->last_Level->nodes+1))->actual=(*(head->last_Level->nodes+1))->first,i=8; i<12;(*(head->last_Level->nodes+1))->actual=(*(head->last_Level->nodes+1))->actual->follow, i++)
               {
                 (*(head->last_Level->nodes+1))->actual->set=*(head->actual_Level->nodes+i);
                 if((*(head->last_Level->nodes+1))->actual==0) check=F;
                };
	          if(check==F) exit_handling(2,4);
	          head->actual_Level=head->last_Level;
	          head->last_Level=fill_Level(3,head->actual_Level->number_of_nodes,1,weights,head->actual_Level);
	          check=setup_weights_pointers(head->last_Level,head->actual_Level);
	          if(check==F) exit_handling(2,5);
	          head->actual_Level->follow=head->last_Level;
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=1;
            head->output->first=MACl((long int)1);
            head->output->last=head->output->first;
            head->output->actual=head->output->first;
            head->output->first->name=0;
            head->output->first->membership=0.0;
            head->output->first->ahead=0;
            head->output->first->follow=0;
            head->output->first->set=*(head->last_Level->nodes);
            return(head);
           } /* ; */
    
Level *first_Level_corner_extractor(fuzzy_set *input)
/* create first Level (and its nodes for corner_extractor neuron type. Objects from input fuzzy sets are pointed that each node has inputs presenting rotating angles of 45, 90, and 135 degrees with corner always in central pixel (the first 8 nodes) or straight line throught the central pixel (the last 4 nodes). Also if input fuzzy set's objects consist more than 1 characteristic characteristics are pointed in their order first from the first object than from its pairs one by one (1st object 1st characteristic, second object 1st characteristic, third object 1st characteristic, 1st object 2nd characteristic, second object 2nd characteristic, third object 2nd characteristic, 1st object 3rd characteristic, second object 3rd characteristic, third object 3rd characteristic, 1st object 4th characteristic, second object 4th characteristic, third object 4th characteristic, etc.). OBJECTS are assumed to HAVE THE SAME NUMBER OF characteristics ! */
        {
          Level *head;
          int i;
          head=MALe((long int)1);
          head->follow=0;
          head->ahead=0;
          head->number_of_nodes=12;
          head->Level_number=1;
          head->nodes=MApFO((long int)head->number_of_nodes);
          for(i=0; inumber_of_nodes; i++)
              (*(head->nodes+i))=node_first_Level_corner_extractor(i+1, input);
          return(head);
         } /* ; */

fuzzy_object *node_first_Level_corner_extractor(int node_number, fuzzy_set *input)
/* creates node for 1st Level of corner_extractor neuron type. Objects from input fuzzy sets are pointed that each node has inputs presenting rotating angles of 45, 90, and 135 degrees with corner always in central pixel (the first 8 nodes) or straight line throught the central pixel (the last 4 nodes). If input fuzzy set's objects consist more than 1 characteristic characteristics are pointed in their order first from the first object than from its pairs one by one (1st object 1st characteristic, second object 1st characteristic, third object 1st characteristic, 1st object 2nd characteristic, second object 2nd characteristic, third object 2nd characteristic, 1st object 3rd characteristic, second object 3rd characteristic, third object 3rd characteristic, 1st object 4th characteristic, second object 4th characteristic, third object 4th characteristic, etc. OBJECTS are assumet to HAVE THE SAME NUMBER OF characteristics ! */
/* Note node_number is node's position inside the Level and can be 1..12, but not its (pointer) position inside vector nodes that is 0..11! In fact node_number=i+1, where i is node's (pointer) place inside vector nodes for the Level. */
	{
	  fuzzy_object *head, *object1, *object2, *object3, *object4, *object5;
	  float *weights;
	  characteristic *ahead;
	  int i;
	  if((node_number>12)||(node_number<1)) exit_handling(6,node_number);
	  head=MAFO((long int)1);
	  head->m.name=0;
	  weights=MAF((long int)1);
	  *weights=1.0;
	  ahead=0;
	  object1=*(input->objects+0);
	  switch(node_number)
	  		{
	  		  case 1: object2=*(input->objects+2);
	  		          object3=*(input->objects+3);
	  		          object4=*(input->objects+5);
	  		          object5=*(input->objects+8);
	  		          break;
	  		  case 2: object2=*(input->objects+3);
	  		          object3=*(input->objects+5);
	  		          object4=*(input->objects+7);
	  		          object5=*(input->objects+8);
	  		          break;
	  		  case 3: object2=*(input->objects+5);
	  		          object3=*(input->objects+6);
	  		          object4=*(input->objects+7);
	  		          object5=*(input->objects+8);
	  		          break;
	  		  case 4: object2=*(input->objects+8);
	  		          object3=*(input->objects+4);
	  		          object4=*(input->objects+6);
	  		          object5=*(input->objects+7);
	  		          break;
	  		  case 5: object2=*(input->objects+7);
	  		          object3=*(input->objects+1);
	  		          object4=*(input->objects+4);
	  		          object5=*(input->objects+6);
	  		          break;
	  		  case 6: object2=*(input->objects+6);
	  		          object3=*(input->objects+1);
	  		          object4=*(input->objects+2);
	  		          object5=*(input->objects+4);
	  		          break;
	  		  case 7: object2=*(input->objects+4);
	  		          object3=*(input->objects+1);
	  		          object4=*(input->objects+2);
	  		          object5=*(input->objects+3);
	  		          break;
	  		  case 8: object2=*(input->objects+1);
	  		          object3=*(input->objects+2);
	  		          object4=*(input->objects+3);
	  		          object5=*(input->objects+4);
	  		          break;
	  		  case 9: object2=*(input->objects+1);
	  		          object3=*(input->objects+8);
	  		          break;
	  		  case 10: object2=*(input->objects+2);
	  		           object3=*(input->objects+7);
	  		           break;
	  		  case 11: object2=*(input->objects+3);
	  		           object3=*(input->objects+6);
	  		           break;
	  		  case 12: object2=*(input->objects+4);
	  		           object3=*(input->objects+5);
	  		           break;
	  		  default: exit_handling(6,node_number); break;
	  		 };
	  head->number_of_characteristics=(object1->number_of_characteristicsnumber_of_characteristics)?object1->number_of_characteristics: object2->number_of_characteristics;
	  if(object3->number_of_characteristicsnumber_of_characteristics) head->number_of_characteristics=object3->number_of_characteristics;
	  if(node_number<9)
	    {
	      if(object4->number_of_characteristicsnumber_of_characteristics) head->number_of_characteristics=object4->number_of_characteristics;
	      if(object5->number_of_characteristicsnumber_of_characteristics) head->number_of_characteristics=object5->number_of_characteristics;
	      for(i=0, object1->actual=object1->first, object2->actual=object2->first, object3->actual=object3->first, object4->actual=object4->first, object5->actual=object5->first; inumber_of_characteristics; i++)
	      {
	        head->actual=fill_weight(ahead, weights);
	        if(ahead==0)
	          head->first=head->actual;
	        else
	          ahead->follow=head->actual;
	        head->actual->set=(fuzzy_object*)(&(object1->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object2->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object3->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object4->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object5->actual->membership));
	        ahead=head->actual;
	        object1->actual=object1->actual->follow;
	        if(object2!=object1) object2->actual=object2->actual->follow;
	        if((object3!=object1)&&(object3!=object2)) object3->actual=object3->actual->follow;
	        if((object4!=object1)&&(object4!=object2)&&(object4!=object3)) object4->actual=object4->actual->follow;
	        if((object5!=object1)&&(object5!=object2)&&(object5!=object3)&&(object5!=object4)) object5->actual=object5->actual->follow;
	       };
	     }
	   else
	     {
	      for(i=0, object1->actual=object1->first, object2->actual=object2->first, object3->actual=object3->first; inumber_of_characteristics; i++)
	      {
	        head->actual=fill_weight(ahead, weights);
	        if(ahead==0)
	          head->first=head->actual;
	        else
	          ahead->follow=head->actual;
	        head->actual->set=(fuzzy_object*)(&(object1->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object2->actual->membership));
	        ahead=head->actual;
	        head->actual=fill_weight(ahead, weights);
	        ahead->follow=head->actual;
	        head->last=head->actual;
	        head->last->follow=0;
	        head->actual->set=(fuzzy_object*)(&(object3->actual->membership));
	        ahead=head->actual;
	        object1->actual=object1->actual->follow;
	        if(object2!=object1) object2->actual=object2->actual->follow;
	        if((object3!=object1)&&(object3!=object2)) object3->actual=object3->actual->follow;
	       };
	     };
	   testfree((char*)weights);
	   return(head);
	  } /* ; */

void firing_corner_extractor(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. (First Level) node output function is pointed inside neuron's nucleide base while the one before the last Level (two) node(s) output is its Maximal input. The last Level node output is n=N1*(1-N2), where n is the last Level's node output, while N1 and N2 are its inputs (the one Level's ahead of the last one nodes outputs), that means the last Level output is product of first with complement of second the Level ahead the last one nodes' output. It means the function can deal with multi-layer (multi-Level) neurones whose the one ahead the last Level function is to find Maximums of the previous layer (Level) outputs and the last Level function is n=N1*(1-N2). Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* since there are 2 group of nodes in the first Level (8+4) each of them using different (linear) output function, the second group is marked (when calling linear node output function) with negative Level number that is Level=-1*Level */
      {
        int i;
        /* calculation of nodes output propagation up to before the last Level */
        for(head->actual_Level=head->first_Level; head->actual_Level!=head->last_Level->ahead; head->actual_Level=head->actual_Level->follow)
            for(i=0; iactual_Level->number_of_nodes; i++)
                (*(head->actual_Level->nodes+i))->m.notes=code->node_output(code->node_linear_output(*(head->actual_Level->nodes+i), (i<8*1)?head->actual_Level->Level_number:-1*head->actual_Level->Level_number)); /* nodes higher than 8th are marked with negative Level number that is Level=-1*Level */
        /* calculation of the one ahead the last Level's node output as Maximum of the previous Level outputs */
        head->actual_Level=head->last_Level->ahead;
        for(i=0; iactual_Level->number_of_nodes; i++)
           (*(head->actual_Level->nodes+i))->m.notes=Max_output_node(*(head->actual_Level->nodes+i));
        head->actual_Level=head->last_Level;
        for(i=0, head->output->actual=head->output->first; iactual_Level->number_of_nodes; i++, head->output->actual=head->output->actual->follow)
           {
             (*(head->actual_Level->nodes+i))->m.notes=corner_extractor_last_Level_output(*(head->actual_Level->nodes+i));
             head->output->actual->membership=head->output->actual->set->m.notes;
            };
       } /* ; */
       
float corner_extractor_last_Level_output(fuzzy_object *node)
/* node output is n=N1*(1-N2), where n is the last Level's node output, while N1 and N2 are its inputs. If there is more than 2 inputs into the node exit_handling(12,1) is called! */
     {
       float product;
       product=node->first->set->m.notes*((float)1.0-node->first->follow->set->m.notes);
       if(node->first->follow!=node->last) exit_handling(12,node->number_of_characteristics);
       return(product);
      } /* ; */


/* sort2 neuron functions */

neuron *create_sort2(fuzzy_set *input)
/* create the neuron of sort2 type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics with associated one (the one having the same number of characteristics in input fuzzy set preceding as the node having the first Level nodes preceeding) placed first. The second Level nodes are receving inputs each from all the first Level nodes. Output fuzzy object consists as many characteristics as there are nodes in the second Level (= number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
/* output presents input sorted into an order! */

          {
            neuron *head;
            characteristic *mem;
            int i,j,k;
            /*float *weights;
	    	enum Bool check;*/
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=2;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	for(i=0, head->first_Level->number_of_nodes=0; inumber_of_objects; i++)
          		head->first_Level->number_of_nodes+=(*(input->objects+i))->number_of_characteristics;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
            for(i=0; ifirst_Level->number_of_nodes; i++)
               {
            	 *(head->first_Level->nodes+i)=MAFO((long int)1);
            	 (*(head->first_Level->nodes+i))->number_of_characteristics=head->first_Level->number_of_nodes;
            	 (*(head->first_Level->nodes+i))->m.notes=0.0;
            	 (*(head->first_Level->nodes+i))->actual=0;
            	 (*(head->first_Level->nodes+i))->first=0;
            	 for(j=0, k=0; jnumber_of_objects; j++)
            	 	for((*(input->objects+j))->actual=(*(input->objects+j))->first; (*(input->objects+j))->actual!=0;(*(input->objects+j))->actual=(*(input->objects+j))->actual->follow, k++)
            	 	   {
            	 	     (*(head->first_Level->nodes+i))->last=MACl((long int)1);
            	 	     if((*(head->first_Level->nodes+i))->first==0) (*(head->first_Level->nodes+i))->first=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->last->name=0;
            	 	     (*(head->first_Level->nodes+i))->last->membership=1.0;
            	 	     (*(head->first_Level->nodes+i))->last->set=(fuzzy_object*)(&((*(input->objects+j))->actual->membership));
            	 	     (*(head->first_Level->nodes+i))->last->follow=0;
            	 	     (*(head->first_Level->nodes+i))->last->ahead=(*(head->first_Level->nodes+i))->actual;
            	 	     if((*(head->first_Level->nodes+i))->actual!=0) (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	 	     (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
             	 	     if((i==k)&&(k!=0))
            	 	     	{
            	 	     	  /* associated input (characteristic) for the node is placed on the first place enabling easier calculation of the first Level output! */
            	 	     	  mem=(*(head->first_Level->nodes+i))->first;
            	 	     	  (*(head->first_Level->nodes+i))->first=(*(head->first_Level->nodes+i))->last;
            	 	     	  (*(head->first_Level->nodes+i))->first->follow=mem;
            	 	     	  (*(head->first_Level->nodes+i))->first->follow->ahead=(*(head->first_Level->nodes+i))->first;
            	 	     	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->first->ahead;
            	 	     	  (*(head->first_Level->nodes+i))->first->ahead=0;
            	 	     	  (*(head->first_Level->nodes+i))->actual->follow=0;
            	 	     	 };
           	 	        };
                };
            /* creation of the second Level */
            head->last_Level=MALe((long int)1);
            head->actual_Level=head->last_Level;
          	head->first_Level->follow=head->last_Level;
          	head->last_Level->ahead=head->first_Level;
          	head->last_Level->number_of_nodes=head->first_Level->number_of_nodes;
          	head->last_Level->Level_number=2;
          	head->last_Level->follow=0;
          	head->last_Level->nodes=MApFO((long int)head->last_Level->number_of_nodes);
            for(i=0; ilast_Level->number_of_nodes; i++)
               {
            	 *(head->last_Level->nodes+i)=MAFO((long int)1);
            	 (*(head->last_Level->nodes+i))->number_of_characteristics=head->first_Level->number_of_nodes;
            	 (*(head->last_Level->nodes+i))->m.notes=0.0;
            	 (*(head->last_Level->nodes+i))->actual=0;
            	 (*(head->last_Level->nodes+i))->first=0;
            	 for(k=0; k<(*(head->last_Level->nodes+i))->number_of_characteristics; k++)
            	    {
            	      (*(head->last_Level->nodes+i))->last=MACl((long int)1);
            	      if((*(head->last_Level->nodes+i))->first==0) (*(head->last_Level->nodes+i))->first=(*(head->last_Level->nodes+i))->last;
            	      (*(head->last_Level->nodes+i))->last->name=0;
            	      (*(head->last_Level->nodes+i))->last->membership=1.0;
            	      (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+k);
            	      (*(head->last_Level->nodes+i))->last->follow=0;
            	      (*(head->last_Level->nodes+i))->last->ahead=(*(head->last_Level->nodes+i))->actual;
            	      if((*(head->last_Level->nodes+i))->actual!=0) (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	      (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	     };
                };
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            return(head);
           } /* ; */
    
float sort2_first_Level(fuzzy_object *node, int number_of_inputs)
/* node is pointer on the node in process, while number_of_inputs is number of inputs for the node (function could be rewritten without that input, it's only included because of the requirement for 2 input values into the function, however it saves some calculation time). Output is normalised position of the first input among others. It means number of inputs higher than the first one normalised by dividing with number of inputs. */
/* Note there is no multiplication of input and associated weight ! */
     {
       float input1;
       int i;
       input1=(*((float*)(node->first->set)));
       for(node->actual=node->first->follow, i=0; node->actual!=0; node->actual=node->actual->follow)
      	    if(*((float*)(node->actual->set))>input1) i++;
       return(((float)i)/((float)number_of_inputs));
      } /* ; */

float sort2_second_Level(fuzzy_object *node, int node_position)
/* input into the node are all the first Level nodes' outputs. Output is input whose associated the first Level node's output (normalised value) is the highest one less or equal to normalised node position (node position/number of the first Level nodes) (number of the first Level nodes is half of number of the node's inputs). Associated input of a first Level's node is placed as its first (characteristic's) input. */  
/* Note there is no multiplication of input and associated weight ! */
     {
       float memory=-10.0, output=0.0, np;
       np=((float)node_position)/(node->number_of_characteristics);
       for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
            if(node->actual->set->m.notesactual->set->m.notes>memory)
          	    {
          	      memory=node->actual->set->m.notes;
          	      output=(*((float*)(node->actual->set->first->set)));
          	     };
       return(output);
      } /* ; */
      
void firing_sort2(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. (First Level) node output function is "sort2_first_Level()" while the last (the second one) Level nodes output function is "sort2_second_Level()". Node output function is "unchanged_linear_node_output()". It means nothing is taken from the nucleotide base but the nucleotide base remains in function call because of compatibility (can be replaced in call with "0"). Of course function can later be changed to take node output function as well as either the first or the second Level linear function from the nucleotide base. */
      {
        int i;
        /* calculation of nodes output propagation up to before the last Level */
        head->actual_Level=head->first_Level;
        for(i=0; iactual_Level->number_of_nodes; i++)
           (*(head->actual_Level->nodes+i))->m.notes=unchanged_linear_node_output(sort2_first_Level(*(head->actual_Level->nodes+i), head->actual_Level->number_of_nodes));
           /* number of nodes in the first Level is equal to number of inputs */
        head->actual_Level=head->last_Level;
        for(i=0, head->output->actual=head->output->first; iactual_Level->number_of_nodes; i++, head->output->actual=head->output->actual->follow)
           {
             (*(head->actual_Level->nodes+i))->m.notes=unchanged_linear_node_output(sort2_second_Level(*(head->actual_Level->nodes+i), i+1));
             head->output->actual->membership=head->output->actual->set->m.notes;
            };
       } /* ; */


/* number_of_corner_extractor neuron functions */

fuzzy_set **preparing_number_of_corner_extractor_neuron_population_neuron_inputs(neuron_population *np, int step, int lowest_number_of_corners, int highest_number_of_corners)
/* Returns pointer on array of pointers on fuzzy sets (the same number of fuzzy sets as fuzzy objects in input fuzzy set). Enables usage of common create neuron population function. For each neuron (inside the population) input fuzzy set is copied with its name equall to the number of corners possibility of is to be extracted. If neuron population has different number of neurones than its input fuzzy set unsucessful program termination is caused (exit(1)) ! */
/* NOTE: Each of output fuzzy sets' variable "name" is not used as a pointer, but as an integer variable! Instead of pointing toward lokacion consisting the name of the fuzzy set its value presents (NOT POINT ON) the number of corners possibility of is to be extracted!!!!!!! */
/* When returned array is used memory consisting data not necessary for future work should be liberate (using command testfree())! This usually means following: "for(i=0; inumber_of_neurones; testfree((char*)(*(head+i))->name), testfree((char*)(*(head+i))->objects), testfree((char*)*(head+i++))); testfree((char*)head);" after creating neuron population's neurones. */
/* int step, int lowest_number_of_corners, int highest_number_of_corners are use to describe whot number of corners is of interest to us. "lowest_number_of_corners" presents the begin of interval (the lowest number of corners of interest to us), "highest_number_of_corners" presents the end of the interval (the highest number of corners of interest to us), while "step" presents step for taking numbers inside the interval (step=1 means each number from the interval, step=2 means every second number from the interval, step=3 means every third number from the interval, etc.). If highest_number_of_corners!=lowest_number_of_corners+n*step, n is an integer, highest_number_of_corners is not taken into account means no neuron is being assigned to extract possibility for highest_number_of_corners number of corners ! */
/* in the function "create_neuron_population" call step is noted as window_radius, lowest_number_of_corners as horisontal_input_resolution, and highest_number_of_corners as vertical_input_resolution !!!!! */
/* input should be prepared by preprocessing throught "sort"NN */
               {
                 int i,j,c;
                 fuzzy_set **head;
                 if(np->number_of_neurones!=(int)((highest_number_of_corners-lowest_number_of_corners+1)/step)) exit_handling(18,1);
                 head=MApFS((long int)np->number_of_neurones);
                 for(j=lowest_number_of_corners, i=0; inumber_of_neurones; i++, j+=step)
                     {
		       		   *(head+i)=MAFS((long int)1);
                       (*(head+i))->name=(char*)j; /* name consists the number of corners possibility of is to be extracted! */
                       (*(head+i))->number_of_objects=np->input->number_of_objects;
                       (*(head+i))->objects=MApFO((long int)(*(head+i))->number_of_objects);
                       for(c=0; c<(*(head+i))->number_of_objects; c++)
                          *((*(head+i))->objects+c)=*(np->input->objects+c);
                      };
                 return(head);
                } /* ; */

neuron *create_number_of_corner_extractor(fuzzy_set *input)
/* create the neuron of number_of_corner_extractor type. Input fuzzy set consists in its variable (char*) "name" the number of corners possibility of is to be extracted. NOTE: Not pointer on the number but the number ITSELF !!!!! */
/* Neuron's name (and also neuron's output' characteristic's name) is not (char*) but its value is the number of corners possibility of is to be extracted. NOTE: Not pointer on the number but the number ITSELF !!!!! */
          {
            neuron *head;
            int i;
            head=MAN((long int)1);
            head->name=input->name;
            head->number_of_Levels=1;
            head->first_Level=MALe((long int)1);
            head->first_Level->follow=0;
            head->first_Level->ahead=0;
            head->last_Level=head->first_Level;
            head->actual_Level=head->first_Level;
            head->first_Level->number_of_nodes=1;
            head->first_Level->Level_number=1;
            head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
	        *(head->first_Level->nodes+0)=MAFO((long int)1);
	        (*(head->first_Level->nodes+0))->m.notes=0;
	        (*(head->first_Level->nodes+0))->actual=0;
            (*(head->first_Level->nodes+0))->first=0;
	        for(i=0, (*(head->first_Level->nodes+0))->number_of_characteristics=0; inumber_of_objects; i++)
	           for((*(input->objects+i))->actual=(*(input->objects+i))->first; (*(input->objects+i))->actual!=0; (*(input->objects+i))->actual=(*(input->objects+i))->actual->follow)
	              {
	                (*(head->first_Level->nodes+0))->number_of_characteristics++;
        	 	    (*(head->first_Level->nodes+0))->last=MACl((long int)1);
            	 	if((*(head->first_Level->nodes+0))->first==0) (*(head->first_Level->nodes+0))->first=(*(head->first_Level->nodes+0))->last;
            	 	(*(head->first_Level->nodes+0))->last->name=0;
            	 	(*(head->first_Level->nodes+0))->last->membership=1.0;
            	 	(*(head->first_Level->nodes+0))->last->set=(fuzzy_object*)(&((*(input->objects+i))->actual->membership));
            	 	(*(head->first_Level->nodes+0))->last->follow=0;
            	 	(*(head->first_Level->nodes+0))->last->ahead=(*(head->first_Level->nodes+0))->actual;
            	 	if((*(head->first_Level->nodes+0))->actual!=0) (*(head->first_Level->nodes+0))->actual->follow=(*(head->first_Level->nodes+0))->last;
            	 	(*(head->first_Level->nodes+0))->actual=(*(head->first_Level->nodes+0))->last;
            	   };
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=1;
            head->output->first=MACl((long int)1);
            head->output->last=head->output->first;
            head->output->actual=head->output->first;
            head->output->first->name=head->name; /* neuron's output' characteristic's name is (as well as neuron's name) the number of corners possibility of is to be extracted */
            head->output->first->membership=0.0;
            head->output->first->ahead=0;
            head->output->first->follow=0;
            head->output->first->set=*(head->last_Level->nodes+0);
            /* setting value for input->name to prevent error while deleting in function prepare neuron population */
            input->name=0;
            return(head);
           } /* ; */
    			                       
void firing_number_of_corner_extractor(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. The node output function is pointed inside neuron's nucleide base. Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* number_of_corner_extractor neuron is expected to have only one Level with only one node!! */
/* neuron's name (and also neuron's output' characteristic's name) is expected instead of being pointer onto char (as declared) but its (their) value(s) is (are) the number of corners possibility of is to be extracted. NOTE: Not pointer on the number but the number ITSELF !!!!! */
      {
        /*int i;*/
        head->actual_Level=head->first_Level;
        (*(head->actual_Level->nodes+0))->m.notes=code->node_output(code->node_linear_output(*(head->actual_Level->nodes+0), (int)(head->name))); /* head->name consists the number of corners possibility of is to be extracted */
        head->output->first->membership=head->output->first->set->m.notes;
       } /* ; */


/* area_separator neuron functions */

fuzzy_set **preparing_area_separator_neuron_population_neuron_inputs(neuron_population *np, int window_radius, int horisontal_resolution, int vertical_resolution)
/* vector of fuzzy sets is formed with only 1 element, the neuron population input fuzzy set, while its first object's the first characteristic points "ahead" on new characteristic storing horisontal_resolution in membership and pointing "ahead" on  new characteristic storing vertical_resolution in membership. The new characteristics are NOT causing shifting object's pointer "first on anyone of them. They should be deleted and "testfree" after reading horisontal and vertical resolution from them, and pointer "ahead" of the object's the first characteristic restored on 0. */
/* int window_radius is not of use here and are kept as input only because of compatibility */
               {
                 int c;
                 fuzzy_set **head;
                 if(np->number_of_neurones!=1) exit_handling(20,1);
                 head=MApFS((long int)np->number_of_neurones);
		       	 *(head+0)=MAFS((long int)1);
                 (*(head+0))->name=MAC((long int)1);
                 *((*(head+0))->name)=' ';
                 (*(head+0))->number_of_objects=np->input->number_of_objects;
                 (*(head+0))->objects=MApFO((long int)(*(head+0))->number_of_objects);
                 for(c=0; c<(*(head+0))->number_of_objects; c++)
                    *((*(head+0))->objects+c)=*(np->input->objects+c);
                 (*((*(head+0))->objects+0))->first->ahead=MACl((long int)1);
                 (*((*(head+0))->objects+0))->first->ahead->membership=(float)horisontal_resolution;
                 (*((*(head+0))->objects+0))->first->ahead->follow=(*((*(head+0))->objects+0))->first;
                 (*((*(head+0))->objects+0))->first->ahead->ahead=MACl((long int)1);
                 (*((*(head+0))->objects+0))->first->ahead->ahead->membership=(float)vertical_resolution;
                 (*((*(head+0))->objects+0))->first->ahead->ahead->follow=(*((*(head+0))->objects+0))->first->ahead;
                 return(head);
                } /* ; */

neuron *create_area_separator(fuzzy_set *input)
/* create the neuron of area_separator type. The first Level's nodes are receiving input from one (each from its own/assigned characteristic) input fuzzy set objects' characteristics followed by neighbouring nodes (all 8 of them) outputs. The second Level nodes are receving inputs each from the first Level node on the same position followed by its (the first layer node's) neighbouring nodes (all 8 of them) outputs. Output fuzzy object consists as many characteristics as there are nodes in the second Level (= number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
/* after reading horisontal and vertical resolution the 2 characteristics pointed by the first object's first characteristic pointer ahead are deleted and space is "testfree", while pointer "ahead" of the object's the first characteristic is restored on 0. */

          {
            neuron *head;
            /*characteristic *mem;*/
            int horisontal_resolution, vertical_resolution, i,/* j, */k;
            float *weights;
	    	/*enum Bool check;*/
	    	horisontal_resolution=(int)(*(input->objects+0))->first->ahead->membership;
	    	vertical_resolution=(int)(*(input->objects+0))->first->ahead->ahead->membership;
	    	/* "testfree"ing memory used for transmiting horisontal and vertical resolution */
	    	testfree((char*)(*(input->objects+0))->first->ahead->ahead);
	    	testfree((char*)(*(input->objects+0))->first->ahead);
	    	(*(input->objects+0))->first->ahead=0;
	    	/* creation of neuron */
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=2;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	for(i=0, head->first_Level->number_of_nodes=0; inumber_of_objects; i++)
          		head->first_Level->number_of_nodes+=(*(input->objects+i))->number_of_characteristics;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
          	/* creation of the first layer's nodes and assigning the input to them */
            for(i=0, k=0; inumber_of_objects; i++)
               for((*(input->objects+i))->actual=(*(input->objects+i))->first; (*(input->objects+i))->actual!=0;(*(input->objects+i))->actual=(*(input->objects+i))->actual->follow, k++)
                  {
            	    *(head->first_Level->nodes+k)=MAFO((long int)1);
            	    (*(head->first_Level->nodes+k))->number_of_characteristics=1;
            	    (*(head->first_Level->nodes+k))->m.notes=0.0;
            	    (*(head->first_Level->nodes+k))->last=MACl((long int)1);
            	    (*(head->first_Level->nodes+k))->actual=(*(head->first_Level->nodes+k))->last;
            	    (*(head->first_Level->nodes+k))->first=(*(head->first_Level->nodes+k))->last;
            	    (*(head->first_Level->nodes+k))->last->name=0;
            	 	(*(head->first_Level->nodes+k))->last->membership=1.0;
            	 	(*(head->first_Level->nodes+k))->last->set=(fuzzy_object*)(&((*(input->objects+i))->actual->membership));
            	 	(*(head->first_Level->nodes+k))->last->follow=0;
            	 	(*(head->first_Level->nodes+k))->last->ahead=0;
            	   };
            /* assigning neighbouring nodes' output as input */
            weights=MAF((long int)1);
            *weights=1.0;
            for(i=0; ifirst_Level->number_of_nodes; i++)
            	{
            	  if(ifirst_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==0)
            	  	  		{
            	  	  		  if(horisontal_resolution>1)
            	  	  		   {
            	  	  	         (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  		 if(vertical_resolution>1)
            	  	  	  		   {
            	  	  	  	  		 (*(head->first_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 		};
            	  	  	 		};
            	  	  	 	}
            	  	  else
            	  	  	  {
            	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	    if(vertical_resolution>1)
            	  	  	  	  {
            	  	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   };
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    if(vertical_resolution>1)
            	  	  	  	  	  {
            	  	  	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+horisontal_resolution+i+1); /* node on the right down side */
            	  	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 	   };
            	  	  	 	   };
               	  	       };
               	  	 }
            	  else if(i>(vertical_resolution-1)*horisontal_resolution-1)
            	  	{
            	  	  if(i==(vertical_resolution-1)*horisontal_resolution)
            	  	  	{
            	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==vertical_resolution*horisontal_resolution-1)
            	  	  		 {
            	  	  	       (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	  }
            	  	  else
            	  	  	  {
            	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	   };
               	  	       };
               	  	 }
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==0)
            	        {
            	          (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	      if(vertical_resolution>1)
            	  	  	        {
            	  	  	          (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	      (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	      (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the down right side */
            	  	  	  	      (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	      (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	     };
            	  	  	  	  };
            	  	  	 } 
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==horisontal_resolution-1)
            	        {
            	          (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	 } 
            	 else
            	     {
            	       (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   if(horisontal_resolution>1)
            	  	  	{
            	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	   	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	   	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   	 };
            	  	   if(vertical_resolution>1)
            	  	   	 {
            	  	       (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	   if(horisontal_resolution>1)
            	  	  	     {
            	  	  	       (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	       (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	       (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	       (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	       (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
             	  	  	      };
            	  	  	 };
            	  	  };
            	  }; 
             /* creation of the second Level */
            head->last_Level=MALe((long int)1);
            head->actual_Level=head->last_Level;
          	head->first_Level->follow=head->last_Level;
          	head->last_Level->ahead=head->first_Level;
          	head->last_Level->number_of_nodes=head->first_Level->number_of_nodes;
          	head->last_Level->Level_number=2;
          	head->last_Level->follow=0;
          	head->last_Level->nodes=MApFO((long int)head->last_Level->number_of_nodes);
            for(i=0; ilast_Level->number_of_nodes; i++)
               {
            	 *(head->last_Level->nodes+i)=MAFO((long int)1);
            	 (*(head->last_Level->nodes+i))->number_of_characteristics=1;
            	 (*(head->last_Level->nodes+i))->m.notes=0.0;
            	 (*(head->last_Level->nodes+i))->last=MACl((long int)1);
            	 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	 (*(head->last_Level->nodes+i))->first=(*(head->last_Level->nodes+i))->last;
            	 (*(head->last_Level->nodes+i))->last->name=MAC((long int)2);
            	 *((*(head->last_Level->nodes+i))->last->name+0)='i';
            	 *((*(head->last_Level->nodes+i))->last->name+1)=' ';
            	 (*(head->last_Level->nodes+i))->last->membership=1.0;
            	 (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i);
            	 (*(head->last_Level->nodes+i))->last->follow=0;
            	 (*(head->last_Level->nodes+i))->last->ahead=0;
            	};
            /* assigning the first Level's node's neighbouring nodes' output */
            /* becaouse of requirements for calculation of the second Level's nodes' output all first Level nodes for pixel more right or in the same column but upper row has characteristic's, pointing on them, name 'w', while other have 'W'. */
            /* if the second Level's node in process position (on the picture) is (i,j), all weights (characteristics) pointing on the first Level's node with position (on the picture) (a,b) have name 'w' if (a>i)OR(a=i AND b>j), and have name 'W' if (afirst_Level->number_of_nodes; i++)
            	{
            	  if(ilast_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->last_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==0)
            	  	  		{
            	  	  		  if(horisontal_resolution>1)
            	  	  		   {
            	  	  	         (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  		 (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  		 (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  		 (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  		 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  		 if(vertical_resolution>1)
            	  	  	  		   {
            	  	  	  	  		 (*(head->last_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  		 (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  		 (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	  	  		 (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	 		};
            	  	  	 		  };
            	  	  	 		}
            	  	  else
            	  	  	  {
            	  	  	    (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	    *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	    if(vertical_resolution>1)
            	  	  	  	  {
            	  	  	  	    (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	    *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	    (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   };
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	    (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    if(vertical_resolution>1)
            	  	  	  	  	  {
            	  	  	  	  	    (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+horisontal_resolution+i+1); /* node on the right down side */
            	  	  	  	  	    (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	 	   };
            	  	  	 	   };
               	  	       };
               	  	 }
            	  else if(i>(vertical_resolution-1)*horisontal_resolution-1)
            	  	{
            	  	  if(i==(vertical_resolution-1)*horisontal_resolution)
            	  	  	{
            	  	  	  (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==vertical_resolution*horisontal_resolution-1)
            	  	  		 {
            	  	  	       (*(head->last_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	 	  }
            	  	  else
            	  	  	  {
            	  	  	    (*(head->last_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	(*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	*((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	(*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	(*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  	*((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	 	(*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	    *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	(*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	    (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  	(*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  	(*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  	(*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  	(*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	 	   };
               	  	       };
               	  	 }
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==0)
            	        {
            	          (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	      if(vertical_resolution>1)
            	  	  	        {
            	  	  	          (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	      (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	      (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the down right side */
            	  	  	  	      (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	      (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	     };
            	  	  	  	  };
            	  	  	 } 
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==horisontal_resolution-1)
            	        {
            	          (*(head->last_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  		{
            	  	  	      (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	  	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	 } 
            	 else
            	     {
            	       (*(head->last_Level->nodes+i))->number_of_characteristics+=3;
            	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	   if(horisontal_resolution>1)
            	  	  	{
            	  	      (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	   	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	   	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	   	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	   	  (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	   	  (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	   	 };
            	  	   if(vertical_resolution>1)
            	  	   	 {
            	  	       (*(head->last_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	   *((*(head->last_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	   (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	   (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	   (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	   if(horisontal_resolution>1)
            	  	  	     {
            	  	  	       (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	  	  	       (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	       (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	       (*(head->last_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	       (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
             	  	  	      };
            	  	  	 };
            	  	  };
            	  }; 
            testfree((char*)weights);
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            return(head);
           } /* ; */
    
float area_separator_all_Levels(fuzzy_object *node, int Level_number)
/* calculates node output for neuron of area separator type. For the first Level constants threshold and alpha are preset during declaration. */
     {
       float output, threshold=(float)0.3 , alpha=(float)0.00001;
       int i;
       switch(Level_number)
       		 {
       		   case 1: if(*((float*)node->first->set)>threshold)
       		             output=0.0;
       		           else
       		             {
       		               for(output=node->first->follow->set->m.notes*node->first->follow->membership, node->actual=node->first->follow->follow, i=1; node->actual!=0; node->actual=node->actual->follow)
       		                 {
       		                   output+=node->actual->set->m.notes*node->actual->membership;
       		                   i++;
       		                  };
       		               output/=(float)i;
       		               output+=alpha;
       		               output*=(float)(exp((double)(1.0-*((float*)node->first->set)*node->first->membership))/exp((double)1));
       		              };
       		   		   break;
       		   case 2: /* during the creation of weights (characteristics) they were given with names in the following manner: the first weight pointing on the first Level's node on the same position (i,j) on the picture as the second Level's node has name (first character) 'i', all weights (characteristics) pointing on the first Level's node with position (on the picture) (a,b) have name 'w' if (a>i)OR(a=i AND b>j), and have name 'W' if (afirst->set->m.notes*node->first->membership, node->actual=node->first->follow; (node->actual!=0)&&(output!=0.0); node->actual=node->actual->follow)
       		   		      if((outputactual->set->m.notes*node->actual->membership)||((output==node->actual->set->m.notes*node->actual->membership)&&(*(node->actual->name+0)!='W'))) output=0.0;
       		   		   break;
       		   default: exit_handling(21,Level_number);
       		   	        break;
       		  };
       return(output);
      } /* ; */
       
void firing_area_separator(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. The node output (non-linearising) function is pointed inside neuron's nucleide base and is applied only on the second Level's nodes (NODE OUTPUT non-linearising FUNCTION IS NOT APPLIED ON THE FIRST LEVEL'S NODES!), while node linear output function is "area_separator_all_Levels" (without checking is the same pointed inside nucleotide base). Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* area_separator neuron is expected to have 2 Levels each with the same numbers of nodes as pixels on the screen!! */
/* the first Level's nodes are run until their output is converged, means ASE (average square error) is less or equall to preset ASElimit */
     {
       float *old_node_output,ASE, ASElimit=(float)0.0001;
       int i;
       old_node_output=MAF((long int)head->first_Level->number_of_nodes);
       /* calculation of the first Level's nodes' output */
       /* iterating calculation of the first Level's nodes' output until converges */
       for(i=0; ifirst_Level->number_of_nodes; i++)
          {
            (*(head->first_Level->nodes+i))->m.notes=(float)(exp((double)(1.0-*((float*)(*(head->first_Level->nodes+i))->first->set)*(*(head->first_Level->nodes+i))->first->membership))/exp((double)1));
            *(old_node_output+i)=(*(head->first_Level->nodes+i))->m.notes;
           };
       do
         for(i=0, ASE=0.0; ifirst_Level->number_of_nodes; i++)
           {
             (*(head->first_Level->nodes+i))->m.notes=area_separator_all_Levels(*(head->first_Level->nodes+i), 1);
             ASE+=((*(head->first_Level->nodes+i))->m.notes-(*(old_node_output+i)))*((*(head->first_Level->nodes+i))->m.notes-(*(old_node_output+i)));
         	   *(old_node_output+i)=(*(head->first_Level->nodes+i))->m.notes;
            }
       while(ASE/((float)head->first_Level->number_of_nodes)>ASElimit);
       /* calculation of the second Level's nodes' output */
       for(i=0; ilast_Level->number_of_nodes; i++)
            (*(head->last_Level->nodes+i))->m.notes=area_separator_all_Levels(*(head->last_Level->nodes+i), 2);
       /* proceeding the second Level's nodes' output onto neurone's output */
       for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
          head->output->actual->membership=head->output->actual->set->m.notes;
      } /* ; */


/* area_without_edges_separator neuron functions */

neuron *create_area_without_edges_separator(fuzzy_set *input)
/* create the neuron of area_without_edges_separator type. The first Level's nodes are receiving input from one (each from its own/assigned characteristic) input fuzzy set objects' characteristics followed by neighbouring nodes (all 8 of them) outputs. The second Level nodes are receving inputs each from the first Level node on the same position (excluding nodes on the picture's edge) followed by its (the first layer node's) neighbouring nodes (all 8 of them, but excluding nodes on the edge of the picture) outputs. Output fuzzy object consists as many characteristics as there are nodes in the second Level (= number of input fuzzy set objects' characteristics excluding edges of the input picture). */
/* after reading horisontal and vertical resolution the 2 characteristics pointed by the first object's first characteristic pointer ahead are deleted and space is "testfree", while pointer "ahead" of the object's the first characteristic is restored on 0. */
/* IMPORTANT: THIS FUNCTION IS ONLY FOR INPUT WITH ONLY ONE CHARACTERISTIC PER FUZZY OBJECT !!!!! If there is more than one characteristic per fuzzy object, only first Level (corner and edges neighboors connecting) creation should be changed! Everything else is OK! */
          {
            neuron *head;
            /*characteristic *mem;*/
            int horisontal_resolution, vertical_resolution, i,j,k;
            float *weights;
	    	/*enum Bool check;*/
	    	horisontal_resolution=(int)(*(input->objects+0))->first->ahead->membership;
	    	vertical_resolution=(int)(*(input->objects+0))->first->ahead->ahead->membership;
	    	/* "testfree"ing memory used for transmiting horisontal and vertical resolution */
	    	testfree((char*)(*(input->objects+0))->first->ahead->ahead);
	    	testfree((char*)(*(input->objects+0))->first->ahead);
	    	(*(input->objects+0))->first->ahead=0;
	    	/* creation of neuron */
            head=MAN((long int)1);
            head->name=0;
            head->number_of_Levels=2;
            /* creation of the first Level */
            head->first_Level=MALe((long int)1);
            head->actual_Level=head->first_Level;
            head->last_Level=head->first_Level;
          	head->first_Level->follow=0;
          	head->first_Level->ahead=0;
          	if(input->number_of_objects!=horisontal_resolution*vertical_resolution) exit_handling(22,1);
          	for(i=0, head->first_Level->number_of_nodes=0; inumber_of_objects; i++)
          		head->first_Level->number_of_nodes+=(*(input->objects+i))->number_of_characteristics;
          	head->first_Level->Level_number=1;
          	head->first_Level->nodes=MApFO((long int)head->first_Level->number_of_nodes);
          	/* creation of the first layer's nodes and assigning the input to them */
            for(i=0, k=0; inumber_of_objects; i++)
               for((*(input->objects+i))->actual=(*(input->objects+i))->first; (*(input->objects+i))->actual!=0;(*(input->objects+i))->actual=(*(input->objects+i))->actual->follow, k++)
                  {
            	    *(head->first_Level->nodes+k)=MAFO((long int)1);
            	    (*(head->first_Level->nodes+k))->number_of_characteristics=1;
            	    (*(head->first_Level->nodes+k))->m.name=MAC((long int)2);
            	    /* during creation of NN 1st Level nodes are given names. Later names of those proceeding output onto 2nd Level would be changed to 'I' !! */
            	    *((*(head->first_Level->nodes+k))->m.name+0)='e';
            	    *((*(head->first_Level->nodes+k))->m.name+1)=' ';
            	    (*(head->first_Level->nodes+k))->last=MACl((long int)1);
            	    (*(head->first_Level->nodes+k))->actual=(*(head->first_Level->nodes+k))->last;
            	    (*(head->first_Level->nodes+k))->first=(*(head->first_Level->nodes+k))->last;
            	    (*(head->first_Level->nodes+k))->last->name=0;
            	 	(*(head->first_Level->nodes+k))->last->membership=1.0;
            	 	(*(head->first_Level->nodes+k))->last->set=(fuzzy_object*)(&((*(input->objects+i))->actual->membership));
            	 	(*(head->first_Level->nodes+k))->last->follow=0;
            	 	(*(head->first_Level->nodes+k))->last->ahead=0;
            	   };
            /* assigning neighbouring nodes' output as input */
            weights=MAF((long int)1);
            *weights=1.0;
            for(i=0; ifirst_Level->number_of_nodes; i++)
            	{
            	  if(ifirst_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==0)
            	  	  		{
            	  	  		  if(horisontal_resolution>1)
            	  	  		   {
            	  	  	         (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  		 if(vertical_resolution>1)
            	  	  	  		   {
            	  	  	  	  		 (*(head->first_Level->nodes+i))->number_of_characteristics=4;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  		 (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  		 (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 		};
            	  	  	 		};
            	  	  	 	}
            	  	  else
            	  	  	  {
            	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	    if(vertical_resolution>1)
            	  	  	  	  {
            	  	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   };
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    if(vertical_resolution>1)
            	  	  	  	  	  {
            	  	  	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+horisontal_resolution+i+1); /* node on the right down side */
            	  	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 	   };
            	  	  	 	   };
               	  	       };
               	  	 }
            	  else if(i>(vertical_resolution-1)*horisontal_resolution-1)
            	  	{
            	  	  if(i==(vertical_resolution-1)*horisontal_resolution)
            	  	  	{
            	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  	  	{
            	  	  	  	  (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	 };
            	  	  	 }
            	  	  else if(i==vertical_resolution*horisontal_resolution-1)
            	  	  		 {
            	  	  	       (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	  }
            	  	  else
            	  	  	  {
            	  	  	    (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	    if(horisontal_resolution>1)
            	  	  		  {
            	  	  	        (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	    (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	    (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	    (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	    (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	(*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  	(*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  	(*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  	(*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	   };
               	  	       };
               	  	 }
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==0)
            	        {
            	          (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	  if(horisontal_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	      if(vertical_resolution>1)
            	  	  	        {
            	  	  	          (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	  	      (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	      (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the down right side */
            	  	  	  	      (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	      (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	     };
            	  	  	  	  };
            	  	  	 } 
            	 else if((int)(fmod(((double)i),((double)horisontal_resolution)))==horisontal_resolution-1)
            	        {
            	          (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  if(vertical_resolution>1)
            	  	  		{
            	  	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	  	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	  	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	  	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	 	 };
            	  	  	 } 
            	 else
            	     {
            	       *((*(head->first_Level->nodes+i))->m.name+0)='I'; /* changing node's name for proceeding output onto 2nd Level */
            	       (*(head->first_Level->nodes+i))->number_of_characteristics+=3;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution-1); /* node on the upper left side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution); /* node on the upper side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-1); /* node on the left side */
            	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   if(horisontal_resolution>1)
            	  	  	{
            	  	      (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i-horisontal_resolution+1); /* node on the upper right side */
            	  	   	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	   	  (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+1); /* node on the right side */
            	  	   	  (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	   	  (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	   	 };
            	  	   if(vertical_resolution>1)
            	  	   	 {
            	  	       (*(head->first_Level->nodes+i))->number_of_characteristics+=2;
            	  	   	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution-1); /* node on the left down side */
            	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	   (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution); /* node on the down side */
            	  	  	   (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	   (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
            	  	  	   if(horisontal_resolution>1)
            	  	  	     {
            	  	  	       (*(head->first_Level->nodes+i))->number_of_characteristics++;
            	  	  	       (*(head->first_Level->nodes+i))->last=fill_weight((*(head->first_Level->nodes+i))->actual, weights);
            	  	  	       (*(head->first_Level->nodes+i))->last->set=*(head->first_Level->nodes+i+horisontal_resolution+1); /* node on the right down side */
            	  	  	       (*(head->first_Level->nodes+i))->actual->follow=(*(head->first_Level->nodes+i))->last;
            	  	  	       (*(head->first_Level->nodes+i))->actual=(*(head->first_Level->nodes+i))->last;
             	  	  	      };
            	  	  	 };
            	  	  };
            	  }; 
             /* creation of the second Level */
            head->last_Level=MALe((long int)1);
            head->actual_Level=head->last_Level;
          	head->first_Level->follow=head->last_Level;
          	head->last_Level->ahead=head->first_Level;
          	for(i=0, head->last_Level->number_of_nodes=0; ifirst_Level->number_of_nodes; i++)
          		 head->last_Level->number_of_nodes+=(*((*(head->first_Level->nodes+i))->m.name+0)=='I')? 1: 0;
          	/* IMPORTANT: THIS IS ONLY FOR INPUT WITH ONLY ONE CHARACTERISTIC PER FUZZY OBJECT !!!!! If there is more than one characteristic per fuzzy object, only first Level (corner and edges neighboors connecting) creation should be changed! Everything else is OK! */
          	head->last_Level->Level_number=2;
          	head->last_Level->follow=0;
          	head->last_Level->nodes=MApFO((long int)head->last_Level->number_of_nodes);
            for(j=0, i=0; jfirst_Level->number_of_nodes; j++)
               {
                 if(*((*(head->first_Level->nodes+j))->m.name+0)=='I')
                   {
            	 			 *(head->last_Level->nodes+i)=MAFO((long int)1);
            	 			 (*(head->last_Level->nodes+i))->number_of_characteristics=1;
            	 			 (*(head->last_Level->nodes+i))->m.notes=0.0;
            	       (*(head->last_Level->nodes+i))->last=MACl((long int)1);
            	       (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	       (*(head->last_Level->nodes+i))->first=(*(head->last_Level->nodes+i))->last;
            	       (*(head->last_Level->nodes+i))->last->name=MAC((long int)2);
            	       *((*(head->last_Level->nodes+i))->last->name+0)='i';
            	       *((*(head->last_Level->nodes+i))->last->name+0)=' ';
            	       (*(head->last_Level->nodes+i))->last->membership=1.0;
            	       (*(head->last_Level->nodes+i))->last->set=*(head->first_Level->nodes+j);
            	       (*(head->last_Level->nodes+i))->last->follow=0;
            	       (*(head->last_Level->nodes+i++))->last->ahead=0;
            	      };
            	};
            /* assigning the first Level's node's neighbouring nodes' output */
            /* becaouse of requirements for calculation of the second Level's nodes' output all first Level nodes for pixel more right or in the same column but upper row has characteristic's, pointing on them, name 'w', while other have 'W'. */
            /* if the second Level's node in process position (on the picture) is (i,j), all weights (characteristics) pointing on the first Level's node with position (on the picture) (a,b) have name 'w' if (a>i)OR(a=i AND b>j), and have name 'W' if (alast_Level->number_of_nodes; i++)
            	 {
            	   for((*(head->last_Level->nodes+i))->first->set->actual=(*(head->last_Level->nodes+i))->first->set->first->follow; (*(head->last_Level->nodes+i))->first->set->actual!=0; (*(head->last_Level->nodes+i))->first->set->actual=(*(head->last_Level->nodes+i))->first->set->actual->follow)
            	      {
            	        if(*((*(head->last_Level->nodes+i))->first->set->actual->set->m.name+0)=='I')
            	        	{
            	        	  (*(head->last_Level->nodes+i))->number_of_characteristics++;
            	        	  (*(head->last_Level->nodes+i))->last=fill_weight((*(head->last_Level->nodes+i))->actual, weights);
            	  	  	    (*(head->last_Level->nodes+i))->last->set=(*(head->last_Level->nodes+i))->first->set->actual->set;
            	  	  	    k=0;
            	  	  	    do
            	  	  	    	k++;
            	  	  	    while(*(head->first_Level->nodes+k)!=(*(head->last_Level->nodes+i))->first->set);
            	  	  	    j=-1;
            	  	  	    do
            	  	  	    	{
            	  	  	    	  j++;
            	  	  	    	  (*(input->objects+j))->actual=(*(input->objects+j))->first;
            	  	  	    	  while(((fuzzy_object*)(&((*(input->objects+j))->actual->membership))!=(*(head->last_Level->nodes+i))->last->set->first->set)&&((*(input->objects+j))->actual!=0))
            	  	  	    	       {
            	  	  	    	         (*(input->objects+j))->actual=(*(input->objects+j))->actual->follow;
            	  	  	    	        };
            	  	  	    	 }
            	  	  	    while((fuzzy_object*)(&((*(input->objects+j))->actual->membership))!=(*(head->last_Level->nodes+i))->last->set->first->set);
            	  	  	    if((jlast_Level->nodes+i))->last->name+0)='W'; /* name 'W' if (alast_Level->nodes+i))->actual->follow=(*(head->last_Level->nodes+i))->last;
            	  	  	    (*(head->last_Level->nodes+i))->actual=(*(head->last_Level->nodes+i))->last;
            	  	  	   };
            	  	   };
            	 };
            testfree((char*)weights);
            /* deleting 1st Level's nodes' name */
            for(i=0; ifirst_Level->number_of_nodes; i++)
            	{
            	  testfree((char*)((*(head->first_Level->nodes+i))->m.name));
            	  (*(head->first_Level->nodes+i))->m.notes=0.0;
            	 };
            head->output=MAFO((long int)1);
            head->output->m.name=MAC((long int)7);
            *(head->output->m.name+0)='O';
            *(head->output->m.name+1)='U';
            *(head->output->m.name+2)='T';
            *(head->output->m.name+3)='P';
            *(head->output->m.name+4)='U';
            *(head->output->m.name+5)='T';
            *(head->output->m.name+6)=' ';
            head->output->number_of_characteristics=head->last_Level->number_of_nodes;
            head->output->first=0;
            head->output->actual=0;
            for(i=0; ioutput->number_of_characteristics; i++)
            	{
            	  head->output->last=MACl((long int)1);
            	  if(head->output->first==0) head->output->first=head->output->last;
            	  head->output->last->name=0;
            	  head->output->last->membership=0.0;
            	  head->output->last->set=*(head->last_Level->nodes+i);
            	  head->output->last->ahead=head->output->actual;
            	  head->output->last->follow=0;
            	  if(head->output->actual!=0) head->output->actual->follow=head->output->last;
            	  head->output->actual=head->output->last;
            	 };
            return(head);
           } /* ; */

float area_without_edges_separator_all_Levels(fuzzy_object *node, int Level_number)
/* calculates node output for neuron of area separator type. For the first Level constants threshold and alpha are preset during declaration. */
     {
       float output, threshold=(float)0.3 , alpha=(float)0.3;
       switch(Level_number)
       		 {
       		   case 1: if(*((float*)node->first->set)>threshold)
       		             output=0.0;
       		           else
       		             for(output=(float)(exp((double)(*((float*)node->first->set)*node->first->membership))/exp((double)1)), node->actual=node->first->follow; node->actual!=0; node->actual=node->actual->follow)
       		                output*=((float)1.0-alpha)*(float)sqrt((double)(1.0-(node->actual->set->m.notes*node->actual->membership-1)*(node->actual->set->m.notes*node->actual->membership-1)))+alpha;
       		   		   break;
       		   case 2: /* during the creation of weights (characteristics) they were given with names in the following manner: the first weight pointing on the first Level's node on the same position (i,j) on the picture as the second Level's node has name (first character) 'i', all weights (characteristics) pointing on the first Level's node with position (on the picture) (a,b) have name 'w' if (a>i)OR(a=i AND b>j), and have name 'W' if (afirst->set->m.notes*node->first->membership, node->actual=node->first->follow; (node->actual!=0)&&(output!=0.0); node->actual=node->actual->follow)
       		   		      if((outputactual->set->m.notes*node->actual->membership)||((output==node->actual->set->m.notes*node->actual->membership)&&(*(node->actual->name+0)!='W'))) output=0.0;
       		   		   break;
       		   default: exit_handling(21,Level_number);
       		   	        break;
       		  };
       return(output);
      } /* ; */
       
void firing_area_without_edges_separator(neuron *head, nucleotide_base *code)
/* calculate processing of input through neuron onto output. The node output (non-linearising) function is pointed inside neuron's nucleide base and is applied only on the second Level's nodes (NODE OUTPUT non-linearising FUNCTION IS NOT APPLIED ON THE FIRST LEVEL'S NODES!), while node linear output function is "area_without_edges_separator_all_Levels" (without checking is the same pointed inside nucleotide base). Common/extern float treasureholdadd variable is used for defining treasurehold and can be set using function "void treasurehold_set(float new_treasurehold)" prior to the function executing. */
/* area_without_edges_separator neuron is expected to have 2 Levels each with the same numbers of nodes as pixels on the screen!! */
/* the first Level's nodes are run until their output is converged, means ASE (average square error) is less or equall to preset ASElimit */
     {
       float *old_node_output,ASE, ASElimit=(float)0.000001;
       int i;
       old_node_output=MAF((long int)head->first_Level->number_of_nodes);
       /* calculation of the first Level's nodes' output */
       /* iterating calculation of the first Level's nodes' output until converges */
       for(i=0; ifirst_Level->number_of_nodes; i++)
          {
            (*(head->first_Level->nodes+i))->m.notes=(float)(exp((double)(*((float*)(*(head->first_Level->nodes+i))->first->set)*(*(head->first_Level->nodes+i))->first->membership))/exp((double)1));
            *(old_node_output+i)=(*(head->first_Level->nodes+i))->m.notes;
           };
       do
         for(i=0, ASE=0.0; ifirst_Level->number_of_nodes; i++)
           {
             (*(head->first_Level->nodes+i))->m.notes=area_without_edges_separator_all_Levels(*(head->first_Level->nodes+i), 1);
             ASE+=((*(head->first_Level->nodes+i))->m.notes-(*(old_node_output+i)))*((*(head->first_Level->nodes+i))->m.notes-(*(old_node_output+i)));
             *(old_node_output+i)=(*(head->first_Level->nodes+i))->m.notes;
            }
       while(ASE/((float)head->first_Level->number_of_nodes)>ASElimit);
       /* calculation of the second Level's nodes' output */
       for(i=0; ilast_Level->number_of_nodes; i++)
            (*(head->last_Level->nodes+i))->m.notes=area_without_edges_separator_all_Levels(*(head->last_Level->nodes+i), 2);
       /* proceeding the second Level's nodes' output onto neurone's output */
       for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
          head->output->actual->membership=head->output->actual->set->m.notes;
      } /* ; */


/* FCNN_2L neuron functions */

neuron *create_FCNN_2L(fuzzy_set *input)
/* create the neuron of FCNN_2L type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. Output fuzzy object consists as many characteristics as there are nodes in the second Level (= number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
      {
        return(create_FCNN(input,2));
       } /* ; */

/* FCNN_3L neuron functions */

neuron *create_FCNN_3L(fuzzy_set *input)
/* create the neuron of FCNN_3L type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. Output fuzzy object consists as many characteristics as there are nodes in the third Level (= number of nodes in the second Level = number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
      {
        return(create_FCNN(input,3));
       } /* ; */

/* FCNN_4L neuron functions */

neuron *create_FCNN_4L(fuzzy_set *input)
/* create the neuron of FCNN_4L type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. The fourth Level nodes are receving inputs each from all the third Level nodes. Output fuzzy object consists as many characteristics as there are nodes in the fourth Level (= number of nodes in the third Level = number of nodes in the second Level = number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
      {
        return(create_FCNN(input,4));
       } /* ; */

/* FCNN_5L neuron functions */

neuron *create_FCNN_5L(fuzzy_set *input)
/* create the neuron of FCNN_5L type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. The fourth Level nodes are receving inputs each from all the third Level nodes. The fifth Level nodes are receving inputs each from all the fourth Level nodes. Output fuzzy object consists as many characteristics as there are nodes in the fifth Level (= number of nodes in the fourth Level = number of nodes in the third Level = number of nodes in the second Level = number of nodes in the first Level = number of input fuzzy set objects' characteristics). */
      {
        return(create_FCNN(input,5));
       } /* ; */


/* FCNN_2L_1out neuron functions */

neuron *create_FCNN_2L_1out(fuzzy_set *input)
/* create the neuron of FCNN_2L_1out type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. Output fuzzy object consists just one characteristics as there are nodes in the second Level, while number of nodes per Level linearly decreases from the first Level (the same number of nodes as input fuzzy set characteristics) toward the last one (only one characteristic). */
      {
        return(create_FCNN_with_only_1_output(input,2));
       } /* ; */

/* FCNN_3L_1out neuron functions */

neuron *create_FCNN_3L_1out(fuzzy_set *input)
/* create the neuron of FCNN_3L_1out type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. Output fuzzy object consists just one characteristics as there are nodes in the third Level, while number of nodes per Level linearly decreases from the first Level (the same number of nodes as input fuzzy set characteristics) toward the last one (only one characteristic). */
      {
        return(create_FCNN_with_only_1_output(input,3));
       } /* ; */

/* FCNN_4L_1out neuron functions */

neuron *create_FCNN_4L_1out(fuzzy_set *input)
/* create the neuron of FCNN_4L_1out type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. The fifth Level nodes are receving inputs each from all the third Level nodes. Output fuzzy object consists just one characteristics as there are nodes in the fourth Level, while number of nodes per Level linearly decreases from the first Level (the same number of nodes as input fuzzy set characteristics) toward the last one (only one characteristic). */
      {
        return(create_FCNN_with_only_1_output(input,4));
       } /* ; */

/* FCNN_5L_1out neuron functions */

neuron *create_FCNN_5L_1out(fuzzy_set *input)
/* create the neuron of FCNN_5L_1out type. The first Level's nodes are receiving input from all input fuzzy set objects' characteristics (all characteristics to all nodes). The second Level nodes are receving inputs each from all the first Level nodes. The third Level nodes are receving inputs each from all the second Level nodes. The fourth Level nodes are receving inputs each from all the third Level nodes. The fifth Level nodes are receving inputs each from all the fourth Level nodes. Output fuzzy object consists just one characteristics as there are nodes in the fifth Level, while number of nodes per Level linearly decreases from the first Level (the same number of nodes as input fuzzy set characteristics) toward the last one (only one characteristic). */
      {
        return(create_FCNN_with_only_1_output(input,5));
       } /* ; */


/* FCNN_2L_FBALL_11 neuron functions*/

neuron *create_FCNN_2L_FBALL_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)1);
        destination=MAI((long int)1);
        *(source+0)=1;
        *(destination+0)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_22 neuron functions*/

neuron *create_FCNN_2L_FBALL_22(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_22 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)1);
        destination=MAI((long int)1);
        *(source+0)=2;
        *(destination+0)=2;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_21 neuron functions*/

neuron *create_FCNN_2L_FBALL_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)1);
        destination=MAI((long int)1);
        *(source+0)=2;
        *(destination+0)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_22_11 neuron functions*/

neuron *create_FCNN_2L_FBALL_22_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_22_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)2);
        destination=MAI((long int)2);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_21_11 neuron functions*/

neuron *create_FCNN_2L_FBALL_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)2);
        destination=MAI((long int)2);
        *(source+0)=2;
        *(destination+0)=1;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_22_21 neuron functions*/

neuron *create_FCNN_2L_FBALL_22_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_22_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)2);
        destination=MAI((long int)2);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FBALL_22_21_11 neuron functions*/

neuron *create_FCNN_2L_FBALL_22_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FBALL_22_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=3, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        *(source+2)=1;
        *(destination+2)=1;
        return(create_recurrent_FCNN(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */


/* FCNN_2L_1out_FBALL_11 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=1;
        *(destination+0)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_22 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_22(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_22 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_21 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_22_11 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_22_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_22_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_22_21 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_22_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_22_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_21_11 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FBALL_22_21_11 neuron functions*/

neuron *create_FCNN_2L_1out_FBALL_22_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FBALL_22_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=3, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        *(source+2)=1;
        *(destination+2)=1;
        return(create_recurrent_FCNN_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */


/* FCNN_2L_FB1_11 neuron functions*/

neuron *create_FCNN_2L_FB1_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=1;
        *(destination+0)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_22 neuron functions*/

neuron *create_FCNN_2L_FB1_22(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_22 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_21 neuron functions*/

neuron *create_FCNN_2L_FB1_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_22_11 neuron functions*/

neuron *create_FCNN_2L_FB1_22_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_22_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_21_11 neuron functions*/

neuron *create_FCNN_2L_FB1_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_22_21 neuron functions*/

neuron *create_FCNN_2L_FB1_22_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_22_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_FB1_22_21_11 neuron functions*/

neuron *create_FCNN_2L_FB1_22_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_FB1_22_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=3, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        *(source+2)=1;
        *(destination+2)=1;
        return(create_recurrent_FCNN_FB1(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */


/* FCNN_2L_1out_FB1_11 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=1;
        *(destination+0)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_22 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_22(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_22 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_21 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=1, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_22_11 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_22_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_22_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_22_21 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_22_21(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_22_21 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_21_11 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=2, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=1;
        *(source+1)=1;
        *(destination+1)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */

/* FCNN_2L_1out_FB1_22_21_11 neuron functions*/

neuron *create_FCNN_2L_1out_FB1_22_21_11(fuzzy_set *input)
/* creates neuron of FCNN_2L_1out_FB1_22_21_11 type */
      {
        int number_of_Levels=2, number_of_recurrent_connections=3, *source, *destination;
        source=MAI((long int)number_of_recurrent_connections);
        destination=MAI((long int)number_of_recurrent_connections);
        *(source+0)=2;
        *(destination+0)=2;
        *(source+1)=2;
        *(destination+1)=1;
        *(source+2)=1;
        *(destination+2)=1;
        return(create_recurrent_FCNN_FB1_with_only_1_output(input, number_of_Levels, number_of_recurrent_connections, source, destination));
       } /* ; */


/* CONVOLUTIONAL NEURON functions */

fuzzy_set **preparing_neuron_population_input_by_preserving_spatial_neighborhood_for_convolutional_layer_neuron(neuron_population *np, int square_window_side_lenght, int horisontal_resolution, int overlaping_in_each_dimension)
/* Returns pointer on array of pointers on fuzzy sets each consisting fuzzy objects inside squared window of given size (int square_window_side_lenght), while step of window moving is the same in both direction (int overlaping_in_each_dimension). Window is moved "from left to right" (lower to higher) "row by row". */
/* Spatial neighborhood is preserved by treating all inputs on the same place inside input sets (leaf_population's output fuzzy sets forming the input fuzzy set) as one from the window point of view. It means the input is considered as 3D set where input sets are placed parallely along the third dimension while the window is moved just over the first set and together with each element from the first set it takes all elements on the same position through the 3rd dimension */
/* The number of fuzzy sets (leaf_population's output fuzzy sets) forming the input fuzzy set (n_sets) MUST BE WRITTEN IN THE NAME OF THE INPUT FUZZY SET (np->input) ! The function many2one() does it automatically. */
/* window of the size 1x1 will collect n_sets inputs, of the size 2x2 will collect 4*n_sets inputs, etc. */
/* The input picture is considered as (horisontal_resolution/n_sets)*vertical_resolution, and therefore the input sets must be organised (chained) through the horisontal dimension */
/* ALL INPUT FUZZY SETS (consisted in the np->input fuzzy set) ARE EXPECTED TO HAVE THE SAME NUMBER OF FUZZY OBJECTS nr, so np->input->number_of_objects=nr*n_sets. */
/* The number of neurones (and the number of population's output fuzzy set's objects) inside the population IS CHANGED (and is equal to the number of returned fuzzy sets) since it wasn't set up in accordance with this 3D approach */
/* The picture is divided in that way that its corner pixels belong only to one window, but must belong to a window. That causes that sometimes right or bottom edge windows getting out of the picture. */ 
/* If the rightest column or the lowest row windows are getting out of the picture they consist the same number of fuzzy objects - fuzzy objects outside the picture are with zero membership and the same structure as the top left fuzzy object on the picture */
/* When returned array is used memory consisting data not necessary for future work should be liberate (using command free())! This usually means following: "for(i=0; inumber_of_neurones; free((char*)(*(head+i))->name), free((char*)(*(head+i))->objects), free((char*)*(head+i++))); free((char*)head);" after creating neuron population's neurones. */
               {
                 int h, hi, v, vi, n, nh, nv, i,c,a,b, vertical_resolution, hr, j, nr, n_sets;
                 char *names;
                 float *memberships;
                 fuzzy_set **head;
                 fuzzy_object *f_o; /* this fuzzy object will clone the top left fuzzy object on the input (picture) with difference all memberships are zero, and will be used to presents fuzzy objects out of the picture if required */
                 enum Bool pict_out=F; /* this variable should be changed to T if any window scan out of the picture, means f_o is used. It is used at the end, in the case f_o is unused to be released (free()) */
                 if(overlaping_in_each_dimension>=square_window_side_lenght) exit_handling(1005,3);
                 vertical_resolution=np->input->number_of_objects/horisontal_resolution;
                 
                 /* extracting n_sets (number of previous layer neuron populations output fuzzy sets forming the input fuzzy set) */
                 n_sets=0;
                 i=0;
                 while(((int)(*(np->input->name+i)) > 47) && ((int)(*(np->input->name+i)) < 58))
                      n_sets=10*n_sets+((int)(*(np->input->name+i++))-48);
                 /* changing horisontal_resoulution to present horisontal resolution of 2D picture */
                 hr=horisontal_resolution;
                 if(n_sets>0)
                   {
                     horisontal_resolution/=n_sets;
                    };
                 
                 /* exit if horisontal and vertical resolution are not defined correctly */
                 if(vertical_resolution*horisontal_resolution*n_sets!=np->input->number_of_objects) exit_handling(1005,4);

                 nv=(int)ceil((double)(vertical_resolution-overlaping_in_each_dimension)/((double)(square_window_side_lenght-overlaping_in_each_dimension)));
                 nh=(int)ceil((double)(horisontal_resolution-overlaping_in_each_dimension)/((double)(square_window_side_lenght-overlaping_in_each_dimension)));
                 
                 if(n_sets>0)
                   {
                     nr=np->input->number_of_objects/n_sets;
                     if(nr*n_sets!=np->input->number_of_objects) exit_handling(1005,5); /* input fuzzy sets (np->input is consisted of) haven't the same number of elements. (This is just approximative test and if passed doesn't mean they have the same number of elements, but if failed they certainly don't have the same number of elements!) */
                    }
                 else
                   {
                     nr=1;
                    };

                 n=nv*nh;
                 /* creating of f_o */
                 i=(*(np->input->objects+0))->number_of_characteristics;
                 names=MAC((long int)2*i+4);
                 memberships=MAF((long int)i);
                 *(names+0)='0';
                 *(names+1)=' ';
                 for(c=0; cnumber_of_neurones=n;
                 
                 /* according to the change of number of neurones the number of objects in the output fuzzy set is also changed/adapted */
                 np->output->number_of_objects=np->number_of_neurones;
                 
                 for(i=0; iname=MAC((long int)2);
                       *((*(head+i))->name+0)='I';
                       *((*(head+i))->name+1)=' ';
                       /* a is starting row, while b is starting column ==> window top left corner is in point (b,a) means b*horisontal_dimension + a (+1) -th fuzzy_object inside the fuzzy_set */
                       a=(int)fmod((double)i,(double)nh)*(square_window_side_lenght-overlaping_in_each_dimension);
                       b=(int)floor(((double)i)/((double)nh))*(square_window_side_lenght-overlaping_in_each_dimension);
                       h=(a+square_window_side_lenght-1number_of_objects=square_window_side_lenght*square_window_side_lenght*n_sets;
                       (*(head+i))->objects=MApFO((long int)(*(head+i))->number_of_objects);
                       for(c=0, vi=b; viobjects+c++)=*(np->input->objects+vi*horisontal_resolution+hi);
                                 for(j=1; jobjects+c++)=*(np->input->objects+vi*horisontal_resolution+hi+j*nr);
                                };
                            for(hi=h; hiobjects+c++)=f_o;
                                 for(j=1; jobjects+c++)=f_o;
                                 pict_out=T;
                                };
                           };
                       for(vi=v; viobjects+c++)=f_o;
                               for(j=1; jobjects+c++)=f_o;
                               pict_out=T;
                              };
                      };
                 if(pict_out==F) delete_fuzzy_object(f_o);
                 return(head);
                } /* ; */


fuzzy_set **preparing_neuron_population_input_for_convolutional_layer_neuron(neuron_population *np, int square_window_side_lenght, int horisontal_resolution, int overlaping_in_each_dimension)
/* Returns pointer on array of pointers on fuzzy sets each consisting fuzzy objects inside squared window of given size (int square_window_side_lenght), while step of window moving is the same in both direction (int overlaping_in_each_dimension). Window is moved "from left to right" (lower to higher) "row by row". */
/* Prepares neuron population's neurones' input fuzzy sets from neuron population input fuzzy set presenting "picture" with dimension horisontal_resolution * vertical_resolution (calculated from number of objects in input fuzzy set and horisontal_dimension). It is similar as dividing the picture on square windows that overlaping. */
/* The picture is divided in that way that its corner pixels belong only to one window, but must belong to a window. That causes that sometimes right or bottom edge windows getting out of the picture. */ 
/* If the rightest column or the lowest row windows are getting out of the picture they consist the same number of fuzzy objects - fuzzy objects outside the picture are with zero membership and the same structure as the top left fuzzy object on the picture */
/* When returned array is used memory consisting data not necessary for future work should be liberate (using command free())! This usually means following: "for(i=0; inumber_of_neurones; free((char*)(*(head+i))->name), free((char*)(*(head+i))->objects), free((char*)*(head+i++))); free((char*)head);" after creating neuron population's neurones. */
               {
                 int h, hi, v, vi, n, nh, nv, i,c,a,b, vertical_resolution;
                 char *names;
                 float *memberships;
                 fuzzy_set **head;
                 fuzzy_object *f_o; /* this fuzzy object will clone the top left fuzzy object on the input (picture) with difference all memberships are zero, and will be used to presents fuzzy objects out of the picture if required */
                 enum Bool pict_out=F; /* this variable should be changed to T if any window scan out of the picture, means f_o is used. It is used at the end, in the case f_o is unused to be released (free()) */
                 if(overlaping_in_each_dimension>=square_window_side_lenght) exit_handling(1005,1);
                 vertical_resolution=np->input->number_of_objects/horisontal_resolution;
                 /* exit if horisontal and vertical resolution are not defined correctly */
                if(vertical_resolution*horisontal_resolution!=np->input->number_of_objects) exit_handling(1005,2);
                 nv=(int)ceil((double)(vertical_resolution-overlaping_in_each_dimension)/((double)(square_window_side_lenght-overlaping_in_each_dimension)));
                 nh=(int)ceil((double)(horisontal_resolution-overlaping_in_each_dimension)/((double)(square_window_side_lenght-overlaping_in_each_dimension)));
                 n=nv*nh;
                 /* creating of f_o */
                 i=(*(np->input->objects+0))->number_of_characteristics;
                 names=MAC((long int)2*i+4);
                 memberships=MAF((long int)i);
                 *(names+0)='0';
                 *(names+1)=' ';
                 for(c=0; cname=MAC((long int)2);
                       *((*(head+i))->name+0)='I';
                       *((*(head+i))->name+1)=' ';
                       /* a is starting row, while b is starting column ==> window top left corner is in point (b,a) means b*horisontal_dimension + a (+1) -th fuzzy_object inside the fuzzy_set */
                       a=(int)fmod((double)i,(double)nh)*(square_window_side_lenght-overlaping_in_each_dimension);
                       b=(int)floor(((double)i)/((double)nh))*(square_window_side_lenght-overlaping_in_each_dimension);
                       h=(a+square_window_side_lenght-1number_of_objects=square_window_side_lenght*square_window_side_lenght;
                       (*(head+i))->objects=MApFO((long int)(*(head+i))->number_of_objects);
                       for(c=0, vi=b; viobjects+c++)=*(np->input->objects+vi*horisontal_resolution+hi);
                            for(hi=h; hiobjects+c++)=f_o;
                                 pict_out=T;
                                };
                           };
                       for(vi=v; viobjects+c++)=f_o;
                               pict_out=T;
                              };
                      };
                 if(pict_out==F) delete_fuzzy_object(f_o);
                 return(head);
                } /* ; */

neuron_population *create_convolutional_layer_neuron_population_from_nucleotide_base(nucleotide_base *code, fuzzy_set *input)
/* creates convolutional layer neuron population, presenting feature map, from nucleotide base and input fuzzy set */
                 {
                   int /*number_of_neurones_in_population,*/ nv, nh;
                   struct neuron_population *np;
                   
                   /* input field/window size must be larger than overlaping between input fields/windows in each dimension */
                   if(!(code->window_side_lenght>code->overlaping_in_each_dimension)) exit_handling(1006,1);
                   
                   /* dimensions inside input_size structure are expected to be filled first by horisontal dimension followed with vertical dimension */
                   nh=(int)ceil((double)((*(code->handling_input->dimensions+0))-code->overlaping_in_each_dimension)/((double)(code->window_side_lenght-code->overlaping_in_each_dimension)));
                   nv=(int)ceil((double)((*(code->handling_input->dimensions+1))-code->overlaping_in_each_dimension)/((double)(code->window_side_lenght-code->overlaping_in_each_dimension)));
                   np=code->type->create_neuron_population(code, nv*nh, input, code->window_side_lenght, *(code->handling_input->dimensions+0), code->overlaping_in_each_dimension, code->type->prepare_input);
                   np->learning_algorithm=0; /* learning algorithm should be created later or this line should be changed to np->learning_algorithm=code->create_population_learning_algorithm(code,np); */
                   np->number_of_leaf_populations=0; /* should be set later manualy (or to write a function for doing that) */
                   np->number_of_root_populations=0; /* should be set later manualy (or to write a function for doing that) */
                   np->root=0; /* should be set later manualy (or to write a function for doing that) */
                   np->leaf=0; /* should be set later manualy (or to write a function for doing that) */
                   np->input=input;
                   return(np);
                  } /* ; */


/* RBF */

float RBF_exp(fuzzy_object *node, int Level_number)
/* RBF_exp=exp(-(1/2)sum(squared difference between each input and its weight)) */
/* although already designed RBF descriptor expects neuron to have only 1 layer, this function deals also with multilayer neurones for the purpose of future compatibility */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         float sum=0.0;
         if(Level_number==1)
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=((*((float*)(node->actual->set)))-node->actual->membership)*((*((float*)(node->actual->set)))-node->actual->membership);
         else
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=(node->actual->set->m.notes-node->actual->membership)*(node->actual->set->m.notes-node->actual->membership);
         return((float)exp(-0.5*sqrt((double)sum)));
        } /* ; */


/* entropy */
float entropy_Deluce_Termini(fuzzy_object *node, int Level_number)
/* entropy_Deluce_Termini=-(1/(n*ln(2)))*SUM(w(j)*input(j)*ln(input(j))). If pure entropy wants to be calculated than must be w(j)=1 for each j; otherwise the result is a biased/weighted measure/indication of Deluce and Termini entropy */
/* output is (when weights are different from 1) a biased/weighted measure/indication of Deluce and Termini entropy */
/* this function deals also with multilayer neurones */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         float sum=0.0/*, sum_old*/;
         if(Level_number==1)
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=((*((float*)(node->actual->set))<0.00001)||(*((float*)(node->actual->set))>0.99999))? (float)0.0: (float)((*((float*)(node->actual->set)))*node->actual->membership*log((double)(*((float*)(node->actual->set)))));
         else
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=((node->actual->set->m.notes<0.00001)||(node->actual->set->m.notes>0.99999))? (float)0.0: (float)(node->actual->set->m.notes*node->actual->membership*log((double)node->actual->set->m.notes));
         return((float)(sum/(-(float)node->number_of_characteristics*log((double)2.0))));
        } /* ; */

float entropy_Reyni(fuzzy_object *node, int Level_number)
/* entropy_Reyni(alpha)=(1/(1-alpha))*ln(SUM(w(j)*(input(j)^alpha))). If pure entropy wants to be calculated than must be w(j)=1 for each j; otherwise the result is a biased/weighted measure/indication of Reyni entropy */
/* output is (when weights are different from 1) a biased/weighted measure/indication of Reyni entropy */
/* this function deals also with multilayer neurones */
/* Reyni's constant alpha MUST BE POSITIVE BUT NOT 1.0 (usually between 0 and 1) */
/* alpha is stored into extern float Reyni_alpha preset on 0.9 */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         extern float Reyni_alpha;
         float sum=0.0;
         
         /* EXITing if alpha isn't positive or is 1.0 */
         if((Reyni_alpha<=0.0)||(Reyni_alpha==1.0)) exit_handling(94,1);
         
         if(Level_number==1)
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=node->actual->membership*(float)pow((double)(*((float*)(node->actual->set))), (double)Reyni_alpha);
         else
           for(node->actual=node->first; node->actual!=0; node->actual=node->actual->follow)
              sum+=node->actual->membership*(float)pow((double)node->actual->set->m.notes, (double)Reyni_alpha);
         return((sum<=0.0)? (float)0.0: (float)1.0/((float)1.0-Reyni_alpha)*(float)log((double)sum));
        } /* ; */



/* ART2 functions */

/* setting up ART2 descriptor */
/* neuron_type_descriptor* setup_ART2_descriptor() sets up neuron_type_descriptor for ART2(Adaptive Resonance Theory) class of neurones according G.A. Carpenter and S. Grossberg, ART 2: self-organization of stable category recognition codes for analog input patterns, in G.A. Carpenter and S. Grossberg, Pattern recognition by self-organizing neural networks, The MIT Press, London, 1991, pp. 397-423 */
neuron_type_descriptor* setup_ART2_descriptor()
			                     {
			                       neuron_type_descriptor* ART2_descriptor;
			                       ART2_descriptor=MANTD((long int)1);
			                       ART2_descriptor->name=MAC((long int)8);
			                       ART2_descriptor->name="ART2 ";
			                       ART2_descriptor->number_of_Levels=2;
			                       ART2_descriptor->inputs_per_first_Level_node=1;
			                       ART2_descriptor->nodes_per_Level=MAI((long int)ART2_descriptor->number_of_Levels);
			                       *(ART2_descriptor->nodes_per_Level+0)=0; /* means there is the same number of nodes in the 1st Level as there are inputs */
			                       *(ART2_descriptor->nodes_per_Level+1)=0; /* means there is the same number of nodes in the last Level as there are outputs */
			                       ART2_descriptor->recurrence=F;
			                       ART2_descriptor->number_of_recurrent_connected_layers=0;
			                       ART2_descriptor->number_of_functions_for_creating_neuron=1;
			                       ART2_descriptor->create_neuron=(void**)testmalloc((size_t)ART2_descriptor->number_of_functions_for_creating_neuron*sizeof(void*));
			                       if(ART2_descriptor->create_neuron==0) exit_handling(1000,1); 
			                       *(ART2_descriptor->create_neuron+0)=create_ART2;
			                       ART2_descriptor->create_neuron_population=create_neuron_population; /* but call of create_ART2 must be treated with special care according it hasn't been tested and ART2 parameters are preseted without any investigation!!!!!! */
			                       ART2_descriptor->prepare_input=0;
			                       ART2_descriptor->number_linear_output_functions=0;
			                       ART2_descriptor->number_of_node_output_functions=2; /* two functions for fx=f(x) */
			                       ART2_descriptor->node_output=(void**)testmalloc((size_t)ART2_descriptor->number_of_node_output_functions*sizeof(void*));
			                       if(ART2_descriptor->node_output==0) exit_handling(1000,2);
			               /*        *(ART2_descriptor->node_output+0)=piecewise_linear_fx; */
			               /*        *(ART2_descriptor->node_output+1)=continuously_differentable_fx; */
			                       ART2_descriptor->node_output_derivation=0;
			                       ART2_descriptor->number_of_firing_functions=1;
			                       ART2_descriptor->firing_neuron=(void**)testmalloc((size_t)ART2_descriptor->number_of_firing_functions*sizeof(void*));
			                       if(ART2_descriptor->firing_neuron==0) exit_handling(1000,3);
			               /*        *(ART2_descriptor->firing_neuron+0)=run_ART2; */
			                       ART2_descriptor->number_of_learning_algorithms=0; /* learning is a part of firing the system and, therefore, is included in run_ART2() */
			                       return(ART2_descriptor);
			                      } /* ; */

neuron *create_ART2(fuzzy_set *input)
/* creates an ART2 system with parameters as written and returns pointer on it as pointer onto type neuron */
/* LOOK OUT: THIS FUNCTION HASN'T BEEN TESTED!!!! It exists only because of compatibility and for future interfaces. */
      {
        return((neuron*) construct_ART2( (float)0.9, (float)0.1, (float)1.0, (float)1.0, (float)0.5, input->number_of_objects, input, 0));
       } /* ; */

ART2 *construct_ART2(float ro, float theta, float a, float b, float d, int n, fuzzy_set *input, int fx)
/* constructs and initialise ART2 system with given parameters */
/* ro is vigilance, theta is the threshold (in function f(x)), a, b, and d are ART2 parameters, n is number of output classes (n=N-M), *input is pointer on the input fuzzy set, and fx notices what kind of f(x) function is used: fx=0 ==> piecewise_linear_fx , fx=1 ==> continuously_differentiable_fx */
    {
      ART2 *head;
      int i,j;
      char *names;
      float *memberships;
      /* allocation and setup of ART2 structure elements */
      head=MAART2((long int)1);
      head->ro=ro;
      head->theta=theta;
      head->a=a;
      head->b=b;
      head->d=d;
      head->input=input;
      head->c=((float)1.0/head->d)-(float)1.0;
      head->fx=(fx==0)? piecewise_linear_fx: (fx==1)? continuously_differentable_fx: 0;
      for(i=0, head->M=0; iinput->number_of_objects; i++)
      	 for((*(head->input->objects+i))->actual=(*(head->input->objects+i))->first; (*(head->input->objects+i))->actual!=0; (*(head->input->objects+i))->actual=(*(head->input->objects+i))->actual->follow)
      	    head->M++;
      head->N=head->M+n;
      head->F1=MApART2_F1((long int)head->M);
      head->F2=MApART2_F2((long int)head->N-head->M);
      head->F2Max=0;
      for(i=0; iM; i++)
         {
           /* allocation and setup of ART2_F1 structure elements */
           *(head->F1+i)=MAART2_F1((long int)1);
           (*(head->F1+i))->w=0.0;
           (*(head->F1+i))->x=0.0;
           (*(head->F1+i))->v=0.0;
           (*(head->F1+i))->u=0.0;
           (*(head->F1+i))->p=0.0;
           (*(head->F1+i))->q=0.0;
           (*(head->F1+i))->r=0.0;
           /* setting up top-down connections */
           (*(head->F1+i))->top_down=MApCn((long int)head->N-head->M);
           for(j=0; jN-head->M; j++)
              {
                *((*(head->F1+i))->top_down+j)=MACn((long int)1);
                (*((*(head->F1+i))->top_down+j))->input=&((*(head->F1+i))->p);
                (*((*(head->F1+i))->top_down+j))->weight=0.0;
               };
          };
      for(i=0, j=0; iinput->number_of_objects; i++)
      	 for((*(head->input->objects+i))->actual=(*(head->input->objects+i))->first; (*(head->input->objects+i))->actual!=0; (*(head->input->objects+i))->actual=(*(head->input->objects+i))->actual->follow)
      	    (*(head->F1+j++))->input=&((*(head->input->objects+i))->actual->membership);
      for(i=0; iN-head->M; i++)
         {
           /* allocation and setup of ART2_F2 structure elements */
           *(head->F2+i)=MAART2_F2((long int)1);
           (*(head->F2+i))->number=i;
           (*(head->F2+i))->Tj=0.0;
           (*(head->F2+i))->reset=F;
           /* setting up bottom-up connections */
           (*(head->F2+i))->bottom_up=MApCn((long int)head->M);
           for(j=0; jM; j++)
              {
                *((*(head->F2+i))->bottom_up+j)=MACn((long int)1);
                (*((*(head->F2+i))->bottom_up+j))->input=&((*(head->F1+j))->p);
                srand((int)fmod((double)(i*head->M+j+1),(double)32768.0));
                (*((*(head->F2+i))->bottom_up+j))->weight=(float)(rand()/32767.)*(float)0.1/(((float)1.0-head->d)*(float)sqrt((double)head->M));
                if((*((*(head->F2+i))->bottom_up+j))->weight>0.1) (*((*(head->F2+i))->bottom_up+j))->weight=(float)0.1;
               };
          };
      /* constructing and setting up output fuzzy object */
      names=MAC((long int)7+2*(head->N-head->M));
      memberships=MAF((long int)head->N-head->M);
      *(names+0)='o';
      *(names+0)='u';
      *(names+0)='t';
      *(names+0)='p';
      *(names+0)='u';
      *(names+0)='t';
      *(names+0)=' ';
      for(i=0; iN-head->M; i++)
         {
           *(names+7+2*i)='o';
           *(names+8+2*i)=' ';
           *(memberships+i)=0.0;
          };
      head->output=set_fill(head->N-head->M, names, memberships);
      testfree((char*)names);
      testfree((char*)memberships);
      for(i=0, head->output->actual=head->output->first; iN-head->M; i++, head->output->actual=head->output->actual->follow)
         head->output->actual->set=(fuzzy_object*)&((*(head->F2+i))->Tj);
      return(head);
     } /* ; */

float piecewise_linear_fx(float x, float theta)
/* calculates piecewise linear function between 0 and 1 */
/* piecewise_linear_fx(x,theta)={ 0 if x1.0)||(x<0.0)) exit_handling(1001,1); */
      return((x1.0)? (float)1.0: x);
     } /* ; */

float continuously_differentable_fx(float x, float theta)
/* calculates continuously differentable function between 0 and 1 */
/* continuously_differentable_fx(x,theta)={ 2*theta*x*x/(x*x+theta*theta) if x1.0)||(x<0.0)) exit_handling(1002,1); */
      return((x<0.0)? (float)0.0: (x1.0)? (float)1.0: x);
     } /* ; */

void initialise_ART2(ART2 *head)
/* initialise ART2 system */
    {
      int i,j;
      for(i=0; iN-head->M; i++)
        {
          for(j=0; jM; j++)
             {
               srand((int)fmod((double)(i*head->M+j+1),(double)32768.0));
               (*((*(head->F2+i))->bottom_up+j))->weight=(float)(rand()/32767.)*(float)0.1/(((float)1.0-head->d)*(float)sqrt((double)head->M));
               if((*((*(head->F2+i))->bottom_up+j))->weight>0.1) (*((*(head->F2+i))->bottom_up+j))->weight=(float)0.1;
               (*((*(head->F1+j))->top_down+i))->weight=(float)0.0;
              };
          (*(head->F2+i))->reset='F';
         };
      head->F2Max=0;
      for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
         head->output->actual->membership=0.0;
     } /* ; */

void delete_ART2(ART2 *head)
/* deletes ART2 system and testfree occupied memory; but doesn't delete ART2's input fuzzy set */
    {
      int i,j;
      for(i=0; iN-head->M; i++)
           for(j=0; jM; j++)
              {
                /* deleting bottom-up connections */
                testfree((char*)*((*(head->F2+i))->bottom_up+j));
                /* deleting top-down connections */
                testfree((char*)*((*(head->F1+j))->top_down+i));
               };
      /* the folowing loop is separated from the previous one since funny error was occuring during the testing */
      for(i=0; iN-head->M; i++)
         {
           /* deleting bottom-up connections */
           testfree((char*)((*(head->F2+i))->bottom_up));
           /* deleting i-th F2 class */
           testfree((char*)*(head->F2+i));
          };
      /* deleting F2 */
      testfree((char*)head->F2);
      for(i=0; iM; i++)
         {
           /* deleting top-down connections */
           testfree((char*)((*(head->F1+i))->top_down));
           /* deleting i-th F1 class */
           testfree((char*)*(head->F1+i));
          };
      /* deleting F1 */
      testfree((char*)head->F1);
      delete_fuzzy_object(head->output);
      testfree((char*)head);
     } /* ; */

void ART2_F1_calculations(ART2 *head)
/* performs one cycle of calculations inside F1 layer of the ART2 system */
    {
      int i;
      float w,v;
      /* calculation of wi, w=||w|| */
      for(i=0, w=0.0; iM; i++)
         {
           (*(head->F1+i))->w=*((float*)(*(head->F1+i))->input)+head->a*(*(head->F1+i))->u;
           w+=(*(head->F1+i))->w*(*(head->F1+i))->w;
          };
      w=(float)sqrt((double)w);
      if(w==0.0) w=(float)0.000001;
      /* calculation of xi and vi, v=||v|| */
      for(i=0, v=0.0; iM; i++)
         {
           (*(head->F1+i))->x=(*(head->F1+i))->w/w;
           (*(head->F1+i))->v=head->fx((*(head->F1+i))->x, head->theta)+head->b*head->fx((*(head->F1+i))->q, head->theta);
           v+=(*(head->F1+i))->v*(*(head->F1+i))->v;
          };
      v=(float)sqrt((double)v);
      if(v==0.0) v=(float)0.000001;
      /* calculation of ui and pi, w=||p|| */
      for(i=0, w=0.0; iM; i++)
         {
           (*(head->F1+i))->u=(*(head->F1+i))->v/v;
           if(head->F2Max!=0)
             {
               if(head->F2Max->reset==F)
                 {
                   (*(head->F1+i))->p=head->d*((float)1.0-head->d)*((*(head->F1+i))->u/((float)1.0-head->d)-(*((*(head->F1+i))->top_down+head->F2Max->number))->weight)+(*(head->F1+i))->u;
                   /* if top_down traces have already been changed the previous relation would become (*(head->F1+i))->p=((*(head->F1+i))->p-(*((*(head->F1+i))->top_down+head->F2Max->number))->weight)*head->d/(1.0-head->d)+(*(head->F1+i))->u */
                  }
               else
                 {
                   (*(head->F1+i))->p=(*(head->F1+i))->u;
                   };
              }
            else
              {
                (*(head->F1+i))->p=(*(head->F1+i))->u;
               };
            w+=(*(head->F1+i))->p*(*(head->F1+i))->p;
           };
      w=(float)sqrt((double)w);
      if(w==0.0) w=(float)0.000001;
      /* calculation of qi and ri */
      for(i=0; iM; i++)
         {
           (*(head->F1+i))->q=(*(head->F1+i))->p/w;
           (*(head->F1+i))->r=((*(head->F1+i))->u+head->c*(*(head->F1+i))->p)/((float)1.0+head->c*w);
          };
     } /* ; */

void ART2_F2_calculations(ART2 *head)
/* performs one cycle of calculations inside F2 layer of the ART2 system */
    {
      int i,j;
      for(i=0, head->F2Max=0; iN-head->M; i++)
         {
           (*(head->F2+i))->Tj=0.0;
           if((*(head->F2+i))->reset==F)
             {
               for(j=0; jM; j++)
                  (*(head->F2+i))->Tj+=*((*((*(head->F2+i))->bottom_up+j))->input)*(*((*(head->F2+i))->bottom_up+j))->weight;
               head->F2Max=(head->F2Max==0)? *(head->F2+i): (head->F2Max->Tj<(*(head->F2+i))->Tj)? *(head->F2+i): head->F2Max;
             };
          };
     } /* ; */

void ART2_LTM_updating(ART2 *head)
/* updates LTM traces (weights of connection between F1 and F2 in both directions) */
    {
      int i;
      for(i=0; iM; i++)
         {
           (*(head->F2Max->bottom_up+i))->weight+=(-(*(head->F2Max->bottom_up+i))->weight+(*(head->F1+i))->p)*head->d;
           (*((*(head->F1+i))->top_down+head->F2Max->number))->weight+=(-(*((*(head->F1+i))->top_down+head->F2Max->number))->weight+(*(head->F1+i))->u/((float)1.0-head->d))*head->d*((float)1.0-head->d);
           /* the second equation could be replaced with (*((*(head->F1+i))->top_down+head->F2Max->number))->weight+=(-(*((*(head->F1+i))->top_down+head->F2Max->number))->weight+(*(head->F1+i))->p)*d , but in that case F1 should be updated before LTM traces; and this is also to be used if there is no update in F1 to happened */
          };
     }       /* ; */

enum Bool run_ART2(ART2 *head)
/* fire ART2 system */
/* learning is a part of firing so if input is not selected into a previously learned output class learns the input as the new output class (inside constructed set of classes) */
/* number_of_resets counts resets and if is greater than the number of output class, means all class are reset and a new output is required, deletes all resets and letting the first next choice (without considering reset) be the final choice */
/* returns T if during the calculations all outputs were reset (means a new output class would be selected but there wasn't anyone available so resets were deleted and output class memberships calculated without considering reset), F otherwise */
    {
 	  enum Bool reset_overflow=F;
      int i, number_of_resets=0;
      float r; 
      ART2_F1_calculations(head);
      do
        {
         ART2_F2_calculations(head);
         ART2_F1_calculations(head);
         /* calculation of ||r|| to decide whether a reset of F2 will occur (if ro>||r||) */
          /* r=||r|| */
          for(i=0, r=0.0; iM; i++)
             r+=(*(head->F1+i))->r*(*(head->F1+i))->r;
          r=(float)sqrt((double)r);
          /* if ro/||r||>1 ==> reset F2 */
          if(head->ro>r)
            {
			  head->F2Max->reset=T;
              number_of_resets++;
             };
         } while((head->ro>r)&&(number_of_resetsN-head->M));
      /* deleting F2 resets */
      for(i=0; iN-head->M; i++)
         (*(head->F2+i))->reset=F;
      if(number_of_resetsN-head->M)
        {
          /* updating LTM traces (weights) */
          ART2_LTM_updating(head);
         }
      else
        {
          ART2_F2_calculations(head);
          reset_overflow=T;
         };
      /* proceeding F2 states onto the output */
      for(head->output->actual=head->output->first; head->output->actual!=0; head->output->actual=head->output->actual->follow)
         head->output->actual->membership=*((float*)head->output->actual->set);
         
	  return(reset_overflow);
     } /* ; */

void print_ART2_weights(ART2 *head, FILE *fn)
/* prints LTM traces (weights of connection between F1 and F2 in both directions) */
    {
      int i,j;
      printf(fn, "%#1c:,", (char)13);
      for(i=0; iN-head->M; i++)
         {
           printf(fn, "%#1c,,", (char)13,i+1);
           for(j=0; jM; j++)
              printf(fn,"%f,",(*((*(head->F2+i))->bottom_up+j))->weight);
          };

      printf(fn, "%#1c%#1c:,", (char)13, (char)13);
      for(i=0; iM; i++)
         {
           printf(fn, "%#1c,", (char)13,i+1);
           for(j=0; jN-head->M; j++)
              printf(fn,"%f,",(*((*(head->F1+i))->top_down+j))->weight);
          };
     }       /* ; */




/* LEARNING ALGORITHMS */

/* functions for setting up learning algorithms */

learning_algorithm *create_learning_algorithm(nucleotide_base *code, neuron_population *np, float learning_rate)
/* *create_learning_algorithm() creates learning algorithm for given neural population and keeps track (also creates, fires, updates weights and weights correction, and deletes) of each neuron inside the population neuron learning algorithm */
/* also (creates and) fills vectors shared_inputs and output_is_shared */
                  {
                    learning_algorithm *head;
                    int i, j, k, l, n_i;
                    enum Bool exist;
                    float **temp, **temp1;
                    
                    /* creating learning algorithm for given neural population and keeping track (also creates, fires, updates weights and weights correction, and deletes) of each neuron inside the population neuron learning algorithm */
                    head=MALA((long int)1);
                    head->name=0;
                    head->comment=0;
                    head->population=np;
                    head->create=create_learning_algorithm;
                    head->fire=fire_learning_algorithm;
                    head->weights_correction=learning_algorithm_weights_correction;
                    head->reset_weights_correction=learning_algorithm_reset_weights_correction;
                    head->deleting=delete_learning_algorithm;
                    head->learning_rate=learning_rate;
                    head->neuron_learning=MApNLA((long int)head->population->number_of_neurones);
                    
                    for(i=0; ipopulation->number_of_neurones; i++)
                         *(head->neuron_learning+i)=code->create_learning_algorithm(code, *(np->neurones+i), head->learning_rate);

                    /* creating and filling vectors shared_inputs and output_is_shared by searching for shared inputs among the neurones inside the population and tracking info about them */

                    head->number_of_shared_inputs=0;
                    for(n_i=0, i=0; ipopulation->number_of_neurones; i++)
                       for(j=0; j<(*(head->population->neurones+i))->first_Level->number_of_nodes; j++)
                          for((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->first; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual!=0; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->follow)
                             for(k=i+1; kpopulation->number_of_neurones; k++)
                                for(l=0; l<(*(head->population->neurones+k))->first_Level->number_of_nodes; l++)
                                   for((*((*(head->population->neurones+k))->first_Level->nodes+l))->actual=(*((*(head->population->neurones+k))->first_Level->nodes+l))->first; (*((*(head->population->neurones+k))->first_Level->nodes+l))->actual!=0; (*((*(head->population->neurones+k))->first_Level->nodes+l))->actual=(*((*(head->population->neurones+k))->first_Level->nodes+l))->actual->follow)
                                      if((*((*(head->population->neurones+k))->first_Level->nodes+l))->actual->set==(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set)
                                         n_i++;
                    temp=MApF(n_i); /* temp points to all shared inputs */
                    
                    for(n_i=0, i=0; ipopulation->number_of_neurones; i++)
                       for(j=0; j<(*(head->population->neurones+i))->first_Level->number_of_nodes; j++)
                          for((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->first; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual!=0; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->follow)
                             for(k=i+1; kpopulation->number_of_neurones; k++)
                                for(l=0; l<(*(head->population->neurones+k))->first_Level->number_of_nodes; l++)
                                   for((*((*(head->population->neurones+k))->first_Level->nodes+l))->actual=(*((*(head->population->neurones+k))->first_Level->nodes+l))->first; (*((*(head->population->neurones+k))->first_Level->nodes+l))->actual!=0; (*((*(head->population->neurones+k))->first_Level->nodes+l))->actual=(*((*(head->population->neurones+k))->first_Level->nodes+l))->actual->follow)
                                      if((*((*(head->population->neurones+k))->first_Level->nodes+l))->actual->set==(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set)
                                         *(temp+n_i++)=(float*)((*((*(head->population->neurones+k))->first_Level->nodes+l))->actual->set); /* pointing on the shared input */
                        
                    /* reducing temp with duplicated inputs */
     
                    if(n_i>0)
                      {
                        temp1=MApF(n_i);
                       }
                    else
                      {
                        temp1=0;
                       };
                    for(head->number_of_shared_inputs=0, i=0; inumber_of_shared_inputs++)=*(temp+i);
                        };
                    testfree((char*) temp); /* releasing temp's memory */
             
                    /* moving pointers from temp1 into shared to save allocated memory */
                    if(head->number_of_shared_inputs>0)
                      {
                        head->shared_inputs=MApF(head->number_of_shared_inputs);
                       }
                    else
                      {
                        head->shared_inputs=0;
                       };
                    for(i=0; inumber_of_shared_inputs; i++)
                       *(head->shared_inputs+i)=*(temp1+i);
                    if(temp1!=0) testfree((char*) temp1); /* releasing temp1's memory */
                       
                    head->output_is_shared=MAEB((long int)head->population->number_of_neurones); /* head->output_is_shared is set T if its neuron output is shared between/among any neurones inside the population */
                    for(i=0; ipopulation->number_of_neurones; i++)
                       *(head->output_is_shared+i)=F;
                    
                    for(i=0; ipopulation->number_of_neurones; i++)
                       for((*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->first; (*(head->population->neurones+i))->output->actual!=0; (*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->actual->follow)
                          for(j=0; jnumber_of_shared_inputs; j++)
                             if(&((*(head->population->neurones+i))->output->actual->membership)==*(head->shared_inputs+j)) *(head->output_is_shared+i)=T;


                    return(head);

                   } /* ; */


/* function for setting up convolutional layer feature map learning algorithms */

learning_algorithm *create_convolutional_layer_feature_map_learning_algorithm(nucleotide_base *code, neuron_population *np, float learning_rate)
/* *create_convolutional_layer_feature_map_learning_algorithm() creates learning algorithm for neural population presenting a feature map inside convolutional layer and keeps track (also creates, fires, updates weights and weights correction, and deletes) of each neuron inside the population neuron learning algorithm */
                  {
                    learning_algorithm *head;
                    int i;
                    head=MALA((long int)1);                   
                    head->name=0;
                    head->comment=0;

                    /* if head->name is preffered to consist square_window_side_lenght and head->comment to consist overlaping_in_each_dimension following code should be included */
                    /* int j, k;
                       for(i=0, j=(*(np->neurones+0))->first_Level->number_of_nodes; j>0;)
                          j-=(*(np->input->objects+i++))->number_of_characteristics;
                       k=(int)sqrt((double)i);
                       for(i=0, j=0, (*((*(np->neurones+0))->first_Level->nodes+0))->actual=(*((*(np->neurones+0))->first_Level->nodes+0))->first; (((*((*(np->neurones+0))->first_Level->nodes+0))->actual>0)&&((*((*(np->neurones+1))->first_Level->nodes+0))->first->set!=(*((*(np->neurones+0))->first_Level->nodes+0))->actual->set)); (*((*(np->neurones+0))->first_Level->nodes+0))->actual=(*((*(np->neurones+0))->first_Level->nodes+0))->actual->follow)
                          {
                            if((j+1)<(*(np->input->objects+i))->number_of_characteristics)
                              {
                                j++;
                               }
                            else
                              {
                                j=0;
                                i++;
                               };
                           };
                       if((*((*(np->neurones+0))->first_Level->nodes+0))->actual==0) printf("\n Second window can't be found! If there is only one window defined in this convolutional layer feature map then it is OK!\n");
                       j=k-i;
                       head->name=(char*)k;
                       head->comment=(char*)j;
                       */
                    
                    head->population=np;
                    head->create=create_convolutional_layer_feature_map_learning_algorithm;
                    head->fire=fire_convolutional_layer_feature_map_learning_algorithm;
                    head->weights_correction=convolutional_layer_feature_map_learning_algorithm_weights_correction;
                    head->reset_weights_correction=convolutional_layer_feature_map_learning_algorithm_reset_weights_correction;
                    head->deleting=delete_convolutional_layer_feature_map_learning_algorithm;
                    head->learning_rate=learning_rate;
                    equilize_weights_for_convolutional_layer_neuron_population(np);
                    head->neuron_learning=MApNLA((long int)head->population->number_of_neurones);
                    *(head->neuron_learning+0)=code->create_learning_algorithm(code, *(np->neurones+0), head->learning_rate);
                    for(i=1; ipopulation->number_of_neurones; i++)
                       *(head->neuron_learning+i)=0;
                    return(head);
                   } /* ; */


/* learning algorithms functions */

void fire_learning_algorithm(learning_algorithm *head)
/* fire_learning_algorithm() fires neuron learning algorithm functions for all neurones in the population */
/* also cares for the case some neurones share the same input to enable each neuron to have original value while its learning is trigged and to have updated valu on the output if its output is shared */
/* at the end all inputs are set to updated (by firing learning) values */
     {
       int i, j, k/*, l*/;
       float *mem1, *mem2;
       
       
       if(head->number_of_shared_inputs>0)
         {
           mem1=MAF((long int)head->number_of_shared_inputs); /* mem1 is vector of original input values for all shared inputs */
           mem2=MAF((long int)head->number_of_shared_inputs); /* mem1 is vector of updated input values for all shared inputs */
          }
       else
         {
           mem1=0;
           mem2=0;
          };
       
       for(i=0; inumber_of_shared_inputs; i++)
          {
            *(mem1+i)=**(head->shared_inputs+i);
            *(mem2+i)=*(mem1+i);
           };
       
       /* firing learning algorithm and refreshing shared input and updating their values when becomming outputs */
       
       for(i=0; ipopulation->number_of_neurones; i++)
          {
            if(*(head->output_is_shared+i)==T)
              for(j=0; jnumber_of_shared_inputs; j++)
                 for((*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->first; (*(head->population->neurones+i))->output->actual!=0; (*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->actual->follow)
                    if(&((*(head->population->neurones+i))->output->actual->membership)==*(head->shared_inputs+j)) (*(head->population->neurones+i))->output->actual->membership=*(mem2+j); /* updating output value according all updates of it as an input */
            
            /* firing neuron learning algorithm */
            (*(head->neuron_learning+i))->fire(*(head->neuron_learning+i));
            
            /* if the neuron whose neuron learning algorithm is being fired shares its inputs they (it's made by reverting all shared inputs) must be reverted to original value from mem1 and updates stored inside mem2 */
            for(k=0; knumber_of_shared_inputs; k++)
               {
                 *(mem2+k)+=**(head->shared_inputs+k)-(*(mem1+k)); /* updating input's updated value according the corrections through i-th neuron */
                 **(head->shared_inputs+k)=(*(mem1+k)); /* storing original value into shared input */
                };
            
            if(*(head->output_is_shared+i)==T)
                for(j=0; jnumber_of_shared_inputs; j++)
                   for((*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->first; (*(head->population->neurones+i))->output->actual!=0; (*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->actual->follow)
                      if(&((*(head->population->neurones+i))->output->actual->membership)==*(head->shared_inputs+j))
                        if(**(head->shared_inputs+j)==*(mem2+j)) **(head->shared_inputs+j)=*(mem1+j); /* changing output value to the original one because of recurrent connections, except when it's already changed through changing shared inputs (because of recurrent connections) */
           };
       /* releasing reserved memory not required any more */
       if(mem1!=0) testfree((char*) mem1);
       
       /* replacing all shared input values with updated ones */
       for(i=0; inumber_of_shared_inputs; i++)
          **(head->shared_inputs+i)=*(mem2+i);
       
       if(mem2!=0) testfree((char*) mem2);
      } /* ; */

void learning_algorithm_weights_correction(learning_algorithm *head)
/* learning_algorithm_weights_correction() update weights (fires weights correction functions) for all neurones in the population */
     {
       int i;
       for(i=0; ipopulation->number_of_neurones; i++)
          if((*(head->neuron_learning+i))->weights_correction!=0) (*(head->neuron_learning+i))->weights_correction(*(head->neuron_learning+i));
      } /* ; */

void learning_algorithm_reset_weights_correction(learning_algorithm *head)
/* learning_algorithm_reset_weights_correction() resets weight corrections (fires reset weights correction functions) for all neurones in the population */
     {
       int i;
       for(i=0; ipopulation->number_of_neurones; i++)
          if((*(head->neuron_learning+i))->reset_weights_correction!=0) (*(head->neuron_learning+i))->reset_weights_correction(*(head->neuron_learning+i));
      } /* ; */

void delete_learning_algorithm(learning_algorithm *head)
/* delete_learning_algorithm() delete's learning algorithm structure together with all neuron learning algorithm structures it points on (neuron learning structures for all neurones inside the neural population) */
     {
       int i;
       for(i=0; ipopulation->number_of_neurones; i++)
          if(*(head->neuron_learning+i)!=0)
            {
              (*(head->neuron_learning+i))->deleting(*(head->neuron_learning+i));
              *(head->neuron_learning+i)=0;
             };
       if(head->name!=0) testfree((char*) head->name);
       if(head->comment!=0) testfree((char*) head->comment);
       testfree((char*) head->neuron_learning);
       if(head->number_of_shared_inputs>0) testfree((char*) head->shared_inputs);
       if(head->number_of_shared_inputs>0) testfree((char*) head->output_is_shared);
       testfree((char*) head);
      } /* ; */


void change_learning_algorithm_learning_rate(struct learning_algorithm *la, float new_learning_rate)
/* changes learning rate into already existing learning algorithm (includes changing of learning rate into consisted neuron learning algorithms) */
    {
      int i;
      /* changing learning algorithm learning rate */
      la->learning_rate=new_learning_rate;
      
      /* changing learning rate of consisted neuron learning algorithms */
      for(i=0; ipopulation->number_of_neurones; i++)
         if(*(la->neuron_learning+i)!=0) change_neuron_learning_algorithm_learning_rate(*(la->neuron_learning+i), new_learning_rate);
     }/* ; */


/* neuron learning algorithms functions */
void change_neuron_learning_algorithm_learning_rate(struct neuron_learning_algorithm *nla, float new_learning_rate)
/* changes learning rate into already existing neuron learning algorithm */
    {
      nla->learning_rate=new_learning_rate;
     } /* ; */


/* functions for setting up neuron learning algorithms */

/* setting up BP_neuron_learning_algorithm */

neuron_learning_algorithm *BP_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* *BP_neuron_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
		     {
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
		       
		       head=MANLA((long int)1);
		       head->name=MAC((long int)32);
		       head->name="BP_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		       head->create=BP_neuron_learning_algorithm_setup;
		       head->fire=firing_BP;
 	       head->weights_correction=BP_weights_correction/*10*/; /* BP_weights_correction_without_limits; */
 	       head->reset_weights_correction=reset_weights_correction;
 	       head->deleting=delete_neuron_learning_algorithm;
 	       return(head);
		      } /* ; */


/* setting up weight_shaking_learning_algorithm */

neuron_learning_algorithm *weight_shaking_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* *weight_shaking_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron weight shaking algorithm is going to be applied on, "learning_rate" is coefficient of learning in weight shaking algorithm. */
/* weight shaking means randomly incrementing/decrementing each weight by no more than learning rate. It menas old_weight-learning_rate=name=MAC((long int)44);
		       head->name="weight_shaking_neuron_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((int)(head->nn->number_of_Levels));
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
		       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		            };
		       head->neuron_copy=0;
		       head->create=weight_shaking_learning_algorithm_setup;
		       head->fire=firing_weight_shaking;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_neuron_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up BP_without_learning_algorithm */

neuron_learning_algorithm *BP_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
/* "learning_rate" is of use here since it is used for node output changing */
/* BP_without_learning_algorithm just changes neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with neurones not proposed to learn enabling them to be a part of biger neural configuration teached using BP algorithm */
		     {
		       Level *act_Level;
		       int i, j;
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)33);
		       head->name="BP_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
		       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		          for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		             for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                (*(head->number_of_weights_per_Level+i))++;
		       head->neuron_copy=0;
		       head->create=BP_without_learning_algorithm_setup;
		       head->fire=firing_BP_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_without_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up no_learning_neuron_learning_algorithm */

neuron_learning_algorithm *no_learning_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* no_learning_neuron_learning_algorithm_setup() performs NO LEARNING. It exist because of compatibility and thus points on its functions that do nothing. */
/* this learning algorithm is useful ONLY fro neurones that DON'T RECEIVE INPUT FROM OTHER NEURONES REQUIRED TO BE TAUGHT USING THE BP ALGORITHM (in that case BP_without_learning_algorithm functions MUST BE USED!) */
		     {
		       extern float Reyni_alpha;
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
         
		       head=MANLA((long int)1);
		       head->name=MAC((long int)41);
		       head->name="no_learning_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		       head->create=no_learning_neuron_learning_algorithm_setup;
		       head->fire=do_nothing;
 	           head->weights_correction=do_nothing;
 	           head->reset_weights_correction=do_nothing;
 	           head->deleting=delete_neuron_learning_algorithm;
 	           return(head);
		      } /* ; */


/* setting up BP_RBF_exp_neuron_learning_algorithm */

neuron_learning_algorithm *BP_RBF_exp_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_RBF_exp_neuron_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP_RBF_exp algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
/* RBF_exp BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=(1/4)(output-expected_output)(w(J)-input(J))*(linear_)node_output/ln((linear_)node_output), while the partial derivation of the output error with respect to J-th input dE/dinput(J)=-dE/dw(J). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* DOESN'T SUPPORT RECURRENT NEURONES */
		     {
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
		       
		       head=MANLA((long int)1);
		       head->name=MAC((long int)40);
		       head->name="BP_RBF_exp_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		       head->create=BP_RBF_exp_neuron_learning_algorithm_setup;
		       head->fire=firing_BP_RBF_exp;
 	           head->weights_correction=BP_weights_correction10;
 	           head->reset_weights_correction=reset_weights_correction;
 	           head->deleting=delete_neuron_learning_algorithm;
 	           return(head);
		      } /* ; */

/* setting up BP_entropy_Deluce_Termini_neuron_learning_algorithm */

neuron_learning_algorithm *BP_entropy_Deluce_Termini_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_entropy_Deluce_Termini_neuron_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP_entropy_Deluce_Termini algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
/* entropy_Deluce_Termini BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=dE/dnet*(-1/number_of_inputs*ln(2))*input(J)*ln(input(J)), while the partial derivation of the output error with respect to J-th input dE/dinput(J)=dE/dnet*(-1/number_of_inputs*ln(2))*weight_of_input(J)*(ln(input(J))+1), where neuron output o=f(net). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* neuron becomes teachable in "approximating" Deluce and Termini's entropy of the input by introducing adaptive weights */
/* this function deals also with multilayer neurones */
/* DOESN'T SUPPORT RECURRENT NEURONES */
		     {
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
		       
		       head=MANLA((long int)1);
		       head->name=MAC((long int)54);
		       head->name="BP_entropy_Deluce_Termini_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		       head->create=BP_entropy_Deluce_Termini_neuron_learning_algorithm_setup;
		       head->fire=firing_BP_entropy_Deluce_Termini_exp;
 	           head->weights_correction=BP_weights_correction10;
 	           head->reset_weights_correction=reset_weights_correction;
 	           head->deleting=delete_neuron_learning_algorithm;
 	           return(head);
		      } /* ; */

/* setting up BP_entropy_Reyni_neuron_learning_algorithm */

neuron_learning_algorithm *BP_entropy_Reyni_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_RBF_exp_neuron_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP_entropy_Reyni algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
/* entropy_Reyni BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=dE/dnet(alpha)*1/(1-alpha)*1/SUM(weight_of_input(j)*(input(j)^alpha))*(input(J)^alpha) , while the partial derivation of the output error with respect to J-th input dE/dinput(J)=dE/dnet(alpha)*alpha/(1-alpha)*weight_of_input(J)/SUM(weight_of_input(j)*(input(j)^alpha))*(input(J)^(alpha-1))=dE/dw(J)*alpha*weight_of_input(J)/input(J), where neuron output o=o(net). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* neuron becomes teachable in "approximating" Reyni's entropy of the input by introducing adaptive weights */
/* this function deals also with multilayer neurones */
/* Reyni's constant alpha MUST BE POSITIVE BUT NOT 1.0 (usually between 0 and 1) */
/* alpha is stored into extern float Reyni_alpha preset on 0.9 */
/* DOESN'T SUPPORT RECURRENT NEURONES */
		     {
		       extern float Reyni_alpha;
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
         
               /* EXITing if alpha isn't positive or is 1.0 */
               if((Reyni_alpha<=0.0)||(Reyni_alpha==1.0)) exit_handling(94,2);
		       
		       head=MANLA((long int)1);
		       head->name=MAC((long int)45);
		       head->name="BP_entropy_Reyni_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		       head->create=BP_entropy_Reyni_neuron_learning_algorithm_setup;
		       head->fire=firing_BP_entropy_Reyni;
 	           head->weights_correction=BP_weights_correction10;
 	           head->reset_weights_correction=reset_weights_correction;
 	           head->deleting=delete_neuron_learning_algorithm;
 	           return(head);
		      } /* ; */


/* setting up BP_sort2_without_learning_algorithm */

neuron_learning_algorithm *BP_sort2_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_sort2_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is kept just because of compatibility requirements and has no meaning. */
/* BP_sort2_without_learning_algorithm is similar to BP_without_learning_algorithm and specialised for "sort2" neuron type only */
/* "learning_rate" is of no use here since changes on the neuron output are just mapped on its input */
/* BP_sort2_without_learning_algorithm just copy changes from neurones output fuzzy object onto neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with "sort2" type of neurones (not proposed to learn) enabling him to be a part of biger neural configuration teached using BP algorithm */
		     {
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)39);
		       head->name="BP_sort2_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=0.0;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=0;
		       head->neuron_copy=0;
		       head->create=BP_sort2_without_learning_algorithm_setup;
		       head->fire=firing_BP_sort2_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_sort2_without_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up BP_HDFN_without_learning_algorithm */

neuron_learning_algorithm *BP_HDFN_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_HDFN_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is kept just because of compatibility requirements and has no meaning. */
/* BP_HDFN_without_learning_algorithm is similar to BP_without_learning_algorithm and specialised for "highest difference from neighborns" neuron type only */
/* "learning_rate" is of no use here since changes on the neuron output are just mapped on its input */
/* BP_HDFN_without_learning_algorithm just copy changes from neurones output fuzzy object onto neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with "highest difference from neighborns" type of neurones (not proposed to learn) enabling him to be a part of biger neural configuration teached using BP algorithm */
		     {
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)38);
		       head->name="BP_HDFN_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=0.0;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=0;
		       head->neuron_copy=0;
		       head->create=BP_HDFN_without_learning_algorithm_setup;
		       head->fire=firing_BP_HDFN_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_HDFN_without_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up BP_CE_without_learning_algorithm */

neuron_learning_algorithm *BP_CE_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_CE_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is constant used to (multiplied with the difference between actual and expected neuron output) decrease (increase) pixel's (middle pixel, the corner is supposed to have peak in). */
/* BP_CE_without_learning_algorithm is similar to BP_without_learning_algorithm and specialised for "corner extractor" neuron type only */
/* BP_CE_without_learning_algorithm just copy changes from neurones output fuzzy object onto neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with "corner extractor" type of neurones (not proposed to learn) enabling him to be a part of biger neural configuration teached using BP algorithm */
		     {
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)36);
		       head->name="BP_CE_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=0;
		       head->neuron_copy=0;
		       head->create=BP_CE_without_learning_algorithm_setup;
		       head->fire=firing_BP_CE_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_CE_without_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up BP_NCE_without_learning_algorithm */

neuron_learning_algorithm *BP_NCE_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_NCE_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is constant used to (multiplied with the difference between actual and expected neuron output) decrease (increase) first n (n=(int)neuron->name; means how many corner possibility is to be calculated) inputs while increase (decrease) others. */
/* BP_NCE_without_learning_algorithm is similar to BP_without_learning_algorithm and specialised for "number of corner extractor" neuron type only */
/* BP_NCE_without_learning_algorithm just copy changes from neurones output fuzzy object onto neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with "number of corner extractor" type of neurones (not proposed to learn) enabling him to be a part of biger neural configuration teached using BP algorithm */
		     {
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)37);
		       head->name="BP_NCE_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=0;
		       head->neuron_copy=0;
		       head->create=BP_NCE_without_learning_algorithm_setup;
		       head->fire=firing_BP_NCE_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_NCE_without_learning_algorithm;
 	         return(head);
		       } /* ; */

/* setting up BP_AS_without_learning_algorithm */

neuron_learning_algorithm *BP_AS_without_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* BP_AS_without_learning_algorithm_setup() forms and fills structure neuron_learning_algorithm and without setting correction weights on 0.0 - infact correction weights doesn't exist. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is constant used to (multiplied with the difference between actual and expected neuron output) decrease (increase) inputs in the case it is another neurone's (or higher structure's) output. */
/* BP_AS_without_learning_algorithm is similar to BP_without_learning_algorithm and specialised for "area separator" neuron type only */
/* BP_AS_without_learning_algorithm just copy changes from neurones output fuzzy object onto neurone's input fuzzy set when it presents other neurone's (or neuron population's or  ...) output. */
/* It is proposed for use with "area separator" type of neurones (not proposed to learn) enabling him to be a part of biger neural configuration teached using BP algorithm */
		     {
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)36);
		       head->name="BP_AS_without_learning_algorithm ";
		       head->comment=0;
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=0;
		       head->weight_correction=0;
		       head->number_of_weights_per_Level=0;
		       head->neuron_copy=0;
		       head->create=BP_AS_without_learning_algorithm_setup;
		       head->fire=firing_BP_AS_without_learning;
 	         head->weights_correction=do_nothing;
 	         head->reset_weights_correction=do_nothing;
 	         head->deleting=delete_BP_AS_without_learning_algorithm;
 	         return(head);
		       } /* ; */


/* BP_neuron_learning_algorithm functions */

void firing_BP(neuron_learning_algorithm *memory)
/* firing_BP() performs a cycle of calculation of all neuron's weights correction (only calculate corrections but DOESN'T change any weight) according the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * sum(calculated derivation of the input value according each the first Level node receiving input from the input characteristic)) (EXCEPT in the case input IS PICTURE  (means not a neuron output) - DISABLED - INPUT FUZZY SET'S MEMBERSHIPS ARE ALWAYS CHANGED!) */
/* NOTE: firing_BP() doesn't correct weights. To do so one needs to call function BP_weight_correction() after. */
/* Used BackPropagation algorithm is from IEEE "Neural Networks Theoretical Foundations and Analysis", pp.211-221, article "Backpropagation Through Time: What It Does and How to Do It" by P.J. Werbos */
      {
        int i, j, k, l, m;
        enum Bool found;
        float **neti;
        Level *act_Level;
        
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);
        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);
        j--;
        memory->nn->actual_Level=memory->nn->actual_Level->ahead;
        while(memory->nn->actual_Level!=0)
          {
            for(i=0; inn->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knn->actual_Level->follow->number_of_nodes; k++)
                      {
                        for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual->set!=*(memory->nn->actual_Level->nodes+i); (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow);
                        *(*(neti+j)+i)+=(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership*(*(*(neti+j+1)+k));
                         };
                  *(*(neti+j)+i)*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                   };
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
           };
        for(j=0, memory->nn->actual_Level=memory->nn->first_Level; j<(int)(memory->nn->number_of_Levels); j++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
                for(l=1, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow, l++)
                   {
                     if((*(memory->nn->actual_Level->nodes+i))->actual->name!=0)
                       {
                         if(*((*(memory->nn->actual_Level->nodes+i))->actual->name+0)=='r')
                           {
                             found='F';
                             for(act_Level=memory->nn->actual_Level; (act_Level!=0)&&(found=='F'); act_Level=act_Level->follow)
                                for(m=0; (mnumber_of_nodes)&&(found=='F'); m++)
                                   {
                                     if(*(act_Level->nodes+m)==(*(memory->nn->actual_Level->nodes+i))->actual->set)
                                       {
                                         (*(*(memory->weight_correction+j)+k++))+=*(*(neti+j)+i)*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m));
                                         found='T';
                                        };
                                    };
                            }
                         else
                          {
                            (*(*(memory->weight_correction+j)+k++))+=*(*(neti+j)+i)*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes;
                           };
                        }
                     else
                       {
                         (*(*(memory->weight_correction+j)+k++))+=*(*(neti+j)+i)*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes;
                        };
                    };
    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
    /* if(memory->code!=0)
      if(memory->code->ahead!=0) */ /* disabling checking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
        for(k=0; knn->first_Level->number_of_nodes; k++)
           for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=0; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
              {
    										  /* avoiding changing BIAS input */
                if((*(memory->nn->first_Level->nodes+k))->actual->name==0)
                  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->actual->membership*(*(*(neti+0)+k));
                else if(memcmp((*(memory->nn->first_Level->nodes+k))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->actual->membership*(*(*(neti+0)+k));
    										}
          printf("%f ",BIAS_fuzzy_object->m.notes);
 
    /* releasing allocated memory */
    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    if(memory->neuron_copy!=0)
      {
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; inn->number_of_Levels; i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
             for(j=0; jnn->actual_Level->number_of_nodes; j++)
                *(*(memory->neuron_copy+i)+j)=(*(memory->nn->actual_Level->nodes+j))->m.notes;
       };
   } /* ; */

void reset_weights_correction(neuron_learning_algorithm *head)
/* reset_weights_correction() only resets weight corrections for each weight on 0.0 without affecting anything else. */
       {
         int i,j;
         for(i=0; i<(int)(head->nn->number_of_Levels); i++)
              for(j=0; j<*(head->number_of_weights_per_Level+i); j++)
                   *(*(head->weight_correction+i)+j)=0.0;
        } /* ; */

void delete_neuron_learning_algorithm(neuron_learning_algorithm *head)
/* delete_neuron_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         int i;
         for(i=0; i<(int)(head->nn->number_of_Levels); i++)
             {
               testfree((char*)(*(head->weight_correction+i)));
               testfree((char*)(*(head->weight_pointer+i)));
              };
         testfree((char*)head->weight_correction);
         testfree((char*)head->weight_pointer);
         testfree((char*)head->number_of_weights_per_Level);
         if(head->neuron_copy!=0)
           {
             for(i=0; i<(int)(head->nn->number_of_Levels); i++)
                testfree((char*)(*(head->neuron_copy+i)));
             testfree((char*)head->neuron_copy);
            };
         testfree((char*)head);
        } /* ; */		       

void BP_weights_correction_without_limits(neuron_learning_algorithm *memory)
/* BP_weights_correction_without_limits() unlike BP_weights_correction() allows (corrected) weights to get out of interval (-1,1) */
/* BP_weight_correction() changes weight of neuron pointed in structure neuron_learning_algorithm. "*memory" points on structure neuron_learning_algorithm consists information of neuron whose weights will be updated as well as information of weights update and learning coefficient (learning_rate). */
/* NOTE: BP_weight_correction() doesn't reset weights correction on 0.0. To perform that one needs to call function reset_weights_correction() after this function. */
       {
         int i, j;
         for(i=0; i<(int)(memory->nn->number_of_Levels); i++)
             for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
	               (*(*(memory->weight_pointer+i)+j))->membership-=memory->learning_rate*(*(*(memory->weight_correction+i)+j));
        } /* ; */

void BP_weights_correction(neuron_learning_algorithm *memory)
/* BP_weight_correction() changes weight of neuron pointed in structure neuron_learning_algorithm. "*memory" points on structure neuron_learning_algorithm consists information of neuron whose weights will be updated as well as information of weights update and learning coefficient (learning_rate). */
/* NOTE: BP_weight_correction() doesn't reset weights correction on 0.0. To perform that one needs to call function reset_weights_correction() after this function. */
/* updated weights are limited inside real range [-1.0, 1.0] */
       {
         int i, j;
         for(i=0; i<(int)(memory->nn->number_of_Levels); i++)
             for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
	               (*(*(memory->weight_pointer+i)+j))->membership=(memory->learning_rate*(*(*(memory->weight_correction+i)+j))>(*(*(memory->weight_pointer+i)+j))->membership+1.0)? (float)-1.0:(memory->learning_rate*(*(*(memory->weight_correction+i)+j))<(*(*(memory->weight_pointer+i)+j))->membership-1.0)? (float)1.0:(*(*(memory->weight_pointer+i)+j))->membership-memory->learning_rate*(*(*(memory->weight_correction+i)+j));
        } /* ; */

void BP_weights_correction10(neuron_learning_algorithm *memory)
/* BP_weight_correction() changes weight of neuron pointed in structure neuron_learning_algorithm. "*memory" points on structure neuron_learning_algorithm consists information of neuron whose weights will be updated as well as information of weights update and learning coefficient (learning_rate). */
/* NOTE: BP_weight_correction() doesn't reset weights correction on 0.0. To perform that one needs to call function reset_weights_correction() after this function. */
/* updated weights are limited inside real range [-10.0, 10.0] */
       {
         int i, j;
/*         
         printf("\n");
  */       
         for(i=0; i<(int)(memory->nn->number_of_Levels); i++)
             for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
/*
	               {
	                 printf("[%f->",(*(*(memory->weight_pointer+i)+j))->membership);
*/
	               (*(*(memory->weight_pointer+i)+j))->membership=(memory->learning_rate*(*(*(memory->weight_correction+i)+j))>(*(*(memory->weight_pointer+i)+j))->membership+10.0)? (float)-10.0:(memory->learning_rate*(*(*(memory->weight_correction+i)+j))<(*(*(memory->weight_pointer+i)+j))->membership-(float)10.0)? (float)10.0:(*(*(memory->weight_pointer+i)+j))->membership-memory->learning_rate*(*(*(memory->weight_correction+i)+j));
/*
	                 printf("%f] ",(*(*(memory->weight_pointer+i)+j))->membership);
	                };
*/
        } /* ; */



/* weight_shaking_learning_algorithm functions */

void firing_weight_shaking(neuron_learning_algorithm *memory)
/* firing_weight_shaking() performs a cycle of weight shaking and fires neuron and in the case new output is closer (or equally close as old output) to the targeted one new weights are permanently stored, otherwise old weights are restored. Targeted output is given by setting up the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS NOT CHANGED to expected values  */
/* weight shaking means randomly incrementing/decrementing each weight by no more than learning rate. It menas old_weight-learning_rate=nn->last_Level->number_of_nodes);
        for(i=0, memory->nn->output->actual=memory->nn->output->first, old_error=0.0; inn->last_Level->number_of_nodes; memory->nn->output->actual=memory->nn->output->actual->follow, i++)
           {
             *(target+i)=memory->nn->output->actual->membership; /* storing targeting output */
             old_error+=(memory->nn->output->actual->membership-memory->nn->output->actual->set->m.notes)*(memory->nn->output->actual->membership-memory->nn->output->actual->set->m.notes); /* calculating of squared error before shaking weights */
            };
        srand((int)fmod((double)(time(0)+clock()),(double)32768.0)); /* initialisation of random number generator */
        for(i=0; inn->number_of_Levels; i++)
           for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
              {
                *(*(memory->weight_correction+i)+j)=(*(*(memory->weight_pointer+i)+j))->membership;
                a=(*(*(memory->weight_pointer+i)+j))->membership+memory->learning_rate*((float)2.0*(float)(rand()/32767.)-(float)1.0);
                (*(*(memory->weight_pointer+i)+j))->membership=(a<-1.0)? (float)-1.0 : ((a>1.0)? (float)1.0 : a);
               };
        memory->code->firing_neuron(memory->nn,memory->code);
        for(i=0, memory->nn->output->actual=memory->nn->output->first, new_error=0.0; inn->last_Level->number_of_nodes; memory->nn->output->actual=memory->nn->output->actual->follow, i++)
           new_error+=(memory->nn->output->actual->membership-(*(target+i)))*(memory->nn->output->actual->membership-(*(target+i))); /* calculating of squared error after shaking weights */
        /* restoring weights if new_error is greater than old error */
        if(new_error>old_error)
           for(i=0; inn->number_of_Levels; i++)
              for(j=0; j<*(memory->number_of_weights_per_Level+i); j++)
                 (*(*(memory->weight_pointer+i)+j))->membership=*(*(memory->weight_correction+i)+j);
        testfree((char*)target);
   } /* ; */

void do_nothing(neuron_learning_algorithm *head)
/* do_nothing does nothing and exsist only because of compatibility! */
       {
        } /* ; */


/* BP_without_learning_algorithm functions */

void firing_BP_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_without_learning() performs a cycle of calculation in order to change only neuron's input in order to enable neurones not proposed for learning to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * sum(calculated derivation of the input value according each the first Level node receiving input from the input characteristic)) EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        int i, j, k/*, l*/;
        float **neti;
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);
        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);
        j--;
        memory->nn->actual_Level=memory->nn->actual_Level->ahead;
        while(memory->nn->actual_Level!=0)
          {
            for(i=0; inn->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knn->actual_Level->follow->number_of_nodes; k++)
                      {
                        for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual->set!=*(memory->nn->actual_Level->nodes+i); (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow);
                        *(*(neti+j)+i)+=(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership*(*(*(neti+j+1)+k));
                       };
                  *(*(neti+j)+i)*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                 };
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
           };
    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
   /* if(memory->code!=0)
      if(memory->code->ahead!=0)*/ /* disabling chacking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
        for(k=0; knn->first_Level->number_of_nodes; k++)
           for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=0; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
              {
    										  /* avoiding changing BIAS input */
                if((*(memory->nn->first_Level->nodes+k))->actual->name==0)
                  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->actual->membership*(*(*(neti+0)+k));
                else if(memcmp((*(memory->nn->first_Level->nodes+k))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->actual->membership*(*(*(neti+0)+k));
    										}

    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
   } /* ; */

void delete_BP_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head->number_of_weights_per_Level);
         testfree((char*)head);
        } /* ; */		       

/* BP_RBF_exp_neuron_learning_algorithm functions */

void firing_BP_RBF_exp(neuron_learning_algorithm *memory)
/* firing_BP_RBF_exp() performs a cycle of calculation of all neuron's weights correction (only calculate corrections but DOESN'T change any weight) according the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * dE/dinput) (EXCEPT in the case input IS PICTURE  (means not a neuron output) - DISABLED - INPUT FUZZY SET'S MEMBERSHIPS ARE ALWAYS CHANGED!) */
/* RBF_exp BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=(1/4)(output-expected_output)(w(J)-input(J))*(linear_)node_output/ln((linear_)node_output), while the partial derivation of the output error with respect to J-th input dE/dinput(J)=-dE/dw(J). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* neuron's (population's) node_output function should be unchanged_node_output or, if output is non-linearised, appropriate function. Also node_output_derivation must be defined (as the pair of node_output function) */
/* NOTE: firing_BP_RBF_exp() doesn't correct weights. To do so one needs to call function BP_weight_correction() after. */
/* DOESN'T SUPPORT RECURRENT NEURONES */
      {
        int i, j, k, l/*, m*/;
        /*enum Bool found;*/
        float **neti, **w_c;
        /*Level *act_Level;*/
        
        /* w_c has the same structure as memory->weight_correction and is used for storing weight corrections during actual firing of BP algorithm */
        w_c=MApF((long int)(memory->nn->number_of_Levels));
        for(i=0; inn->number_of_Levels; i++)
           *(w_c+i)=MAF((long int) (*(memory->number_of_weights_per_Level+i)));
        
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((long int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);
        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);
        
        /* calculation of w_c = weight correction for the last layer */
        for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
           {
             (*(memory->nn->actual_Level->nodes+i))->m.notes=memory->code->node_linear_output(*(memory->nn->actual_Level->nodes+i), memory->nn->actual_Level->Level_number);
             for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                {
                  if(memory->nn->actual_Level->Level_number==1)
                    {
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=(*(*(neti+j)+i))*(float)0.25*((*(memory->nn->actual_Level->nodes+i))->actual->membership-(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))))*(*(memory->nn->actual_Level->nodes+i))->m.notes/(float)log((double)((*(memory->nn->actual_Level->nodes+i))->m.notes));
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     }
                  else
                    {
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=(*(*(neti+j)+i))*(float)0.25*((*(memory->nn->actual_Level->nodes+i))->actual->membership-(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes)*(*(memory->nn->actual_Level->nodes+i))->m.notes/(float)log((double)((*(memory->nn->actual_Level->nodes+i))->m.notes));
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     };
                 };
            };
        
        
        j--;
        memory->nn->actual_Level=memory->nn->actual_Level->ahead;
        while(memory->nn->actual_Level!=0)
          {
            for(i=0; inn->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0, l=0; knn->actual_Level->follow->number_of_nodes; k++)
                     for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual!=0; (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow)
                        {
                          if((*(memory->nn->actual_Level->follow->nodes+k))->actual->set==*(memory->nn->actual_Level->nodes+i)) *(*(neti+j)+i)+=-(*(*(w_c+memory->nn->actual_Level->follow->Level_number-1)+l));
                          l++;
                         };
                  (*(*(neti+j)+i))*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                 };

        /* calculation of w_c = weight correction for the actual layer */
        for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
           {
             (*(memory->nn->actual_Level->nodes+i))->m.notes=memory->code->node_linear_output(*(memory->nn->actual_Level->nodes+i), memory->nn->actual_Level->Level_number);
             for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                {
                  if(memory->nn->actual_Level->Level_number==1)
                    {
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=(*(*(neti+j)+i))*(float)0.25*((*(memory->nn->actual_Level->nodes+i))->actual->membership-(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))))*(*(memory->nn->actual_Level->nodes+i))->m.notes/(float)log((double)((*(memory->nn->actual_Level->nodes+i))->m.notes));
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     }
                  else
                    {
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=(*(*(neti+j)+i))*(float)0.25*((*(memory->nn->actual_Level->nodes+i))->actual->membership-(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes)*(*(memory->nn->actual_Level->nodes+i))->m.notes/(float)log((double)((*(memory->nn->actual_Level->nodes+i))->m.notes));
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     };
                 };
            };
        
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
           };

    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
    /* if(memory->code!=0)
      if(memory->code->ahead!=0) */ /* disabling checking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
        for(k=0, l=0; knn->first_Level->number_of_nodes; k++)
           for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=0; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
              {
    										  /* avoiding changing BIAS input */
                if((*(memory->nn->first_Level->nodes+k))->actual->name==0)
                  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(-(*(*(w_c+0)+l++)));
                else if(memcmp((*(memory->nn->first_Level->nodes+k))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(-(*(*(w_c+0)+l++)));
    										}
              
    /* releasing allocated memory */
    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    
    for(i=0; inn->number_of_Levels; i++)
       testfree((char*)(*(w_c+i)));
    testfree((char*)w_c);
    
    if(memory->neuron_copy!=0)
      {
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; inn->number_of_Levels; i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
             for(j=0; jnn->actual_Level->number_of_nodes; j++)
                *(*(memory->neuron_copy+i)+j)=(*(memory->nn->actual_Level->nodes+j))->m.notes;
       };
   } /* ; */


/* BP_entropy_Deluce_Termini_neuron_learning_algorithm */

void firing_BP_entropy_Deluce_Termini_exp(neuron_learning_algorithm *memory)
/* firing_BP_entropy_Deluce_Termini_exp() performs a cycle of calculation of all neuron's weights correction (only calculate corrections but DOESN'T change any weight) according the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * dE/dinput) (EXCEPT in the case input IS PICTURE  (means not a neuron output) - DISABLED - INPUT FUZZY SET'S MEMBERSHIPS ARE ALWAYS CHANGED!) */
/* entropy_Deluce_Termini BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=dE/dnet*(-1/number_of_inputs*ln(2))*input(J)*ln(input(J)), while the partial derivation of the output error with respect to J-th input dE/dinput(J)=dE/dnet*(-1/number_of_inputs*ln(2))*weight_of_input(J)*(ln(input(J))+1), where neuron output o=f(net). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* neuron's (population's) node_output function should be unchanged_node_output or, if output is non-linearised, appropriate function. Also node_output_derivation must be defined (as the pair of node_output function) */
/* NOTE: firing_BP_entropy_Deluce_Termini_exp() doesn't correct weights. To do so one needs to call function BP_weight_correction() after. */
/* this function deals also with multilayer neurones */
/* DOESN'T SUPPORT RECURRENT NEURONES */
      {
        int i, j, k/*, l, m*/;
        /*enum Bool found;*/
        float **neti;
        /*Level *act_Level;*/
        
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((long int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);
        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);
        
        /* calculation of weight correction for the last layer */
        for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
           for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k++)+= (*(*(neti+j)+i))*((float)-1.0/(memory->nn->actual_Level->number_of_nodes*(float)log((double)2.0)))*((memory->nn->actual_Level->Level_number==1)? ( ((*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))<=0.0)?  (float)0.0: (*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))*(float)log((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))) ): ( ((*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes<=0.0)? (float)0.0: (*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes*(float)log((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes)) );
        
        
        j--;
        memory->nn->actual_Level=memory->nn->actual_Level->ahead;
        while(memory->nn->actual_Level!=0)
          {
            for(i=0; inn->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knn->actual_Level->follow->number_of_nodes; k++)
                     for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual!=0; (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow)
                        if((*(memory->nn->actual_Level->follow->nodes+k))->actual->set==*(memory->nn->actual_Level->nodes+i)) (*(*(neti+j)+i))+=((*(memory->nn->actual_Level->nodes+i))->m.notes<=0.0)? (float)0.0: *(*(neti+j+1)+k)*((float)-1.0/(memory->nn->actual_Level->follow->number_of_nodes*(float)log((double)2.0)))*(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership*((float)log((double)(*(memory->nn->actual_Level->nodes+i))->m.notes)+(float)1.0);
                   (*(*(neti+j)+i))*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                 };

            /* calculation of weight correction for the actual layer */
            for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
               for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                  *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k++)+=(*(*(neti+j)+i))*((float)-1.0/(memory->nn->actual_Level->number_of_nodes*(float)log((double)2.0)))*((memory->nn->actual_Level->Level_number==1)? ( ((*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))<=0.0)? (float)0.0: (*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))*(float)log((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))) ): ( ((*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes<=0.0)? (float)0.0: (*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes*(float)log((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes)) );
        
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
           };

    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
    /* if(memory->code!=0)
      if(memory->code->ahead!=0) */ /* disabling checking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
        for(k=0; knn->first_Level->number_of_nodes; k++)
           for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=0; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
              {
    										  /* avoiding changing BIAS input */
                if((*(memory->nn->first_Level->nodes+k))->actual->name==0)
                  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=((*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set)))<=0.0)? (float)0.0: memory->learning_rate*(*(*(neti+0)+k))*((float)-1.0/(memory->nn->first_Level->number_of_nodes*(float)log((double)2.0)))*(*(memory->nn->first_Level->nodes+k))->actual->membership*((float)log((double)(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))))+(float)1.0);
                else if(memcmp((*(memory->nn->first_Level->nodes+k))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=((*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set)))<=0.0)? (float)0.0: memory->learning_rate*(*(*(neti+0)+k))*((float)-1.0/(memory->nn->first_Level->number_of_nodes*(float)log((double)2.0)))*(*(memory->nn->first_Level->nodes+k))->actual->membership*((float)log((double)(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))))+(float)1.0);
    										}
    
    /* releasing allocated memory */
    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    
    if(memory->neuron_copy!=0)
      {
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; inn->number_of_Levels; i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
             for(j=0; jnn->actual_Level->number_of_nodes; j++)
                *(*(memory->neuron_copy+i)+j)=(*(memory->nn->actual_Level->nodes+j))->m.notes;
       };
   } /* ; */





/* BP_entropy_Reyni_neuron_learning_algorithm functions */

void firing_BP_entropy_Reyni(neuron_learning_algorithm *memory)
/* firing_BP_entropy_Reyni() performs a cycle of calculation of all neuron's weights correction (only calculate corrections but DOESN'T change any weight) according the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * dE/dinput) (EXCEPT in the case input IS PICTURE  (means not a neuron output) - DISABLED - INPUT FUZZY SET'S MEMBERSHIPS ARE ALWAYS CHANGED!) */
/* entropy_Reyni BP algorithm is based on the partial derivation of the output error with respect to weight of J-th input dE/dw(J)=dE/dnet(alpha)*1/(1-alpha)*1/SUM(weight_of_input(j)*(input(j)^alpha))*(input(J)^alpha) , while the partial derivation of the output error with respect to J-th input dE/dinput(J)=dE/dnet(alpha)*alpha/(1-alpha)*weight_of_input(J)/SUM(weight_of_input(j)*(input(j)^alpha))*(input(J)^(alpha-1))=dE/dw(J)*alpha*weight_of_input(J)/input(J), where neuron output o=o(net). If node_output is non-linearised the derivation is multiplied with the derivation of nonlinearised output as in oridinary BP algorithm */
/* neuron becomes teachable in "approximating" Reyni's entropy of the input by introducing adaptive weights */
/* neuron's (population's) node_output function should be unchanged_node_output or, if output is non-linearised, appropriate function. Also node_output_derivation must be defined (as the pair of node_output function) */
/* NOTE: firing_BP_entropy_Reyni() doesn't correct weights. To do so one needs to call function BP_weight_correction() after. */
/* this function deals also with multilayer neurones */
/* Reyni's constant alpha MUST BE POSITIVE BUT NOT 1.0 (usually between 0 and 1) */
/* alpha is stored into extern float Reyni_alpha preset on 0.9 */
/* DOESN'T SUPPORT RECURRENT NEURONES */
      {
        extern float Reyni_alpha;
        int i, j, k, l/*, m*/;
        /*enum Bool found;*/
        float **neti, **w_c;
        /*Level *act_Level;*/
        characteristic *act_c;
        
        /* EXITing if alpha isn't positive or is 1.0 */
        if((Reyni_alpha<=0.0)||(Reyni_alpha==1.0)) exit_handling(94,3);
		       
        /* w_c has the same structure as memory->weight_correction and is used for storing weight corrections during actual firing of BP algorithm */
        w_c=MApF((long int)(memory->nn->number_of_Levels));
        for(i=0; inn->number_of_Levels; i++)
           *(w_c+i)=MAF((long int) (*(memory->number_of_weights_per_Level+i)));
        
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((long int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);
        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);
        
        /* calculation of w_c = weight correction for the last layer */
        for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
           {
             for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                {
                  if(memory->nn->actual_Level->Level_number==1)
                    {
                      for(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=0, act_c=(*(memory->nn->actual_Level->nodes+i))->actual, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                         (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(float)pow((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))), (double)Reyni_alpha);
                      
                      (*(memory->nn->actual_Level->nodes+i))->actual=act_c;
                      (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))=((*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))==0.0)? (float)0.0: (*(*(neti+j)+i))*((float)1.0/(((float)1.0-Reyni_alpha)*(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))))*(float)pow((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))), (double)Reyni_alpha);
                      
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     }
                  else
                    {
                      for(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=0, act_c=(*(memory->nn->actual_Level->nodes+i))->actual, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                         (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(float)pow((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes, (double) Reyni_alpha);
                      
                      (*(memory->nn->actual_Level->nodes+i))->actual=act_c;
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=((*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))=0.0)? (float)0.0: (*(*(neti+j)+i))*((float)1.0/(((float)1.0-Reyni_alpha)*(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))))*(float)pow((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes, (double) Reyni_alpha);
                      
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     };
                 };
            };
        
        
        j--;
        memory->nn->actual_Level=memory->nn->actual_Level->ahead;
        while(memory->nn->actual_Level!=0)
          {
            for(i=0; inn->actual_Level->number_of_nodes; i++)
                {
                  *(*(neti+j)+i)=0.0;
                  if((*(memory->nn->actual_Level->follow->nodes+i))->m.notes>0.0)
                    {
                      for(k=0, l=0; knn->actual_Level->follow->number_of_nodes; k++)
                         for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual!=0; (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow)
                            {
                              if((*(memory->nn->actual_Level->follow->nodes+k))->actual->set==*(memory->nn->actual_Level->nodes+i)) (*(*(neti+j)+i))+=(*(*(w_c+memory->nn->actual_Level->follow->Level_number-1)+l))*Reyni_alpha*(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership/(*(memory->nn->actual_Level->follow->nodes+k))->actual->set->m.notes;
                              l++;
                             };
                      (*(*(neti+j)+i))*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                     };
                 };

        /* calculation of w_c = weight correction for the actual layer */
        for(i=0, k=0; inn->actual_Level->number_of_nodes; i++)
           {
             for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                {
                  if(memory->nn->actual_Level->Level_number==1)
                    {
                      for(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=0, act_c=(*(memory->nn->actual_Level->nodes+i))->actual, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                         (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(float)pow((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))), (double)Reyni_alpha);
                      
                      (*(memory->nn->actual_Level->nodes+i))->actual=act_c;
                      (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))=((*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))==0.0)? (float)0.0: (*(*(neti+j)+i))*((float)1.0/(((float)1.0-Reyni_alpha)*(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))))*(float)pow((double)(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set))), (double)Reyni_alpha);
                      
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     }
                  else
                    {
                      for(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=0, act_c=(*(memory->nn->actual_Level->nodes+i))->actual, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=0; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                         (*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(float)pow((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes, (double) Reyni_alpha);
                      
                      (*(memory->nn->actual_Level->nodes+i))->actual=act_c;
                      *(*(w_c+memory->nn->actual_Level->Level_number-1)+k)=(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k)==0.0)? (float)0.0: (*(*(neti+j)+i))*((float)1.0/(((float)1.0-Reyni_alpha)*(*(*(w_c+memory->nn->actual_Level->Level_number-1)+k))))*(float)pow((double)(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes, (double) Reyni_alpha);
                      
                      *(*(memory->weight_correction+memory->nn->actual_Level->Level_number-1)+k)+=*(*(w_c+memory->nn->actual_Level->Level_number-1)+k++);
                     };
                 };
            };
        
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
           };

    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
    /* if(memory->code!=0)
      if(memory->code->ahead!=0) */ /* disabling checking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
        for(k=0, l=0; knn->first_Level->number_of_nodes; k++)
           for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=0; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
              {
    										  /* avoiding changing BIAS input */
                if((*(memory->nn->first_Level->nodes+k))->actual->name==0)
                  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))==0.0)? (float)0.0: memory->learning_rate*(*(*(w_c+0)+l++))*(*(memory->nn->first_Level->nodes+k))->actual->membership/(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set)));
                else if(memcmp((*(memory->nn->first_Level->nodes+k))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))==0.0)? (float)0.0: memory->learning_rate*(*(*(w_c+0)+l++))*(*(memory->nn->first_Level->nodes+k))->actual->membership/(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set)));
    										}
    
    /* releasing allocated memory */
    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    
    for(i=0; inn->number_of_Levels; i++)
       testfree((char*)(*(w_c+i)));
    testfree((char*)w_c);
    
    if(memory->neuron_copy!=0)
      {
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; inn->number_of_Levels; i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
             for(j=0; jnn->actual_Level->number_of_nodes; j++)
                *(*(memory->neuron_copy+i)+j)=(*(memory->nn->actual_Level->nodes+j))->m.notes;
       };
   } /* ; */


/* BP_sort2_without_learning_algorithm functions */

void firing_BP_sort2_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_sort2_without_learning() maps changes from neurone's output onto its input in order to enable "sort2" type of neurones (not proposed for learning) to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED  EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        int i, j;
        enum Bool found; 
    /* changing neuron input (fuzzy set) onto expected values */
    /* the case of changing the input picture itself must be avoided */
    /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
    if(memory->code!=0)
      if(memory->code->ahead!=0)
        for(i=0, memory->nn->output->actual=memory->nn->output->first; memory->nn->output->actual!=0; memory->nn->output->actual=memory->nn->output->actual->follow, i++)
           for(j=0, found=0; (jnn->first_Level->number_of_nodes)&&(found==0); j++)
              if(*((float*)((*(memory->nn->first_Level->nodes+j))->first->set))==(*(memory->nn->last_Level->nodes+i))->m.notes)
                {
                  found=1;
                  *((float*)((*(memory->nn->first_Level->nodes+j))->first->set))=memory->nn->output->actual->membership;
                  /* changing input according changes on the output */
                  (*(memory->nn->last_Level->nodes+i))->m.notes=memory->nn->output->actual->membership;
                  /* changing 2nd Level's nodes' output. This is for the case of 2 or more inputs having the same value (in this way we are avoiding changing only one of inputs several times while non-changing other) */
                 };
   } /* ; */

void delete_BP_sort2_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_sort2_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head);
        } /* ; */		       


/* BP_HDFN_without_learning_algorithm functions */

void firing_BP_HDFN_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_HDFN_without_learning() maps changes from neurone's output onto its input in order to enable "highest difference from neighborns" type of neurones (not proposed for learning) to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input is changed in that way, the first pixel input is decreased (if necessary) so it's no higher than any other pixel input for more than is neuron output (previously set up on required value) */
/* neuron input IS CHANGED  EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        int i, j;
        float sum, *csum;
        /* changing neuron input (fuzzy set) onto expected values */
        /* the case of changing the input picture itself must be avoided */
        /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
        if(memory->code!=0)
          if(memory->code->ahead!=0)
            for(j=0; jnn->first_Level->number_of_nodes; j++)
               {
                 /* checking if particular difference between selected pixel and the neighbour is less than limit */
                 for((*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->first, i=0; (*(memory->nn->first_Level->nodes+j))->actual!=0; i++, (*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->actual->follow)
                    sum+=(float)pow((double)-1,(double)i)*((*((float*)((*(memory->nn->first_Level->nodes+j))->actual->set))))*(*(memory->nn->first_Level->nodes+j))->actual->membership;
                 if(sum>memory->nn->output->first->membership)
                   {
                     csum=MAF((long int)(*(memory->nn->first_Level->nodes+j))->number_of_characteristics); /* csum calculates part of particular class difference into total difference */
                     for((*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->first, i=0; (*(memory->nn->first_Level->nodes+j))->actual!=0; i++, (*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->actual->follow->follow)
                        *(csum+i)=((*((float*)((*(memory->nn->first_Level->nodes+j))->actual->set))))*(*(memory->nn->first_Level->nodes+j))->actual->membership*((*((float*)((*(memory->nn->first_Level->nodes+j))->actual->follow->set))))*(*(memory->nn->first_Level->nodes+j))->actual->follow->membership;
                     for((*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->first, i=0; (*(memory->nn->first_Level->nodes+j))->actual!=0; i++, (*(memory->nn->first_Level->nodes+j))->actual=(*(memory->nn->first_Level->nodes+j))->actual->follow->follow)
                        (*((float*)((*(memory->nn->first_Level->nodes+j))->actual->set)))-=((*(csum+i))/sum)*(sum-memory->nn->output->first->membership)/(*(memory->nn->first_Level->nodes+j))->actual->membership;
                    };
                };
       } /* ; */

void delete_BP_HDFN_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_HDFN_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head);
        } /* ; */		       

/* BP_CE_without_learning_algorithm functions */

void firing_BP_CE_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_CE_without_learning() maps changes from neurone's output onto its input in order to enable "corner extractor" type of neurones (not proposed for learning) to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input is changed in following way, the first pixel inputs are decreased (increased)  by learning constant multiplied with the difference between actual and expected neuron output */
/* neuron input IS CHANGED  EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        /* changing neuron input (fuzzy set) onto expected values */
        /* the case of changing the input picture itself must be avoided */
        /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
       /* if(memory->code!=0)
          if(memory->code->ahead!=0) */ /* disabling chacking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
            for((*(memory->nn->first_Level->nodes+9))->actual=(*(memory->nn->first_Level->nodes+9))->first; (*(memory->nn->first_Level->nodes+9))->actual!=0; (*(memory->nn->first_Level->nodes+9))->actual=(*(memory->nn->first_Level->nodes+9))->actual->follow->follow->follow)
               (*((float*)((*(memory->nn->first_Level->nodes+9))->actual->set)))-=memory->learning_rate*((*(memory->nn->last_Level->nodes+0))->m.notes-memory->nn->output->first->membership);
       } /* ; */

void delete_BP_CE_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_CE_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head);
        } /* ; */		       

/* BP_NCE_without_learning_algorithm functions */

void firing_BP_NCE_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_NCE_without_learning() maps changes from neurone's output onto its input in order to enable "number of corner extractor" type of neurones (not proposed for learning) to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input is changed in following way, first n (n=(int)neuron->name; means how many corner possibility is to be calculated) inputs are decreased (increased) by the product of learning constant and difference between actual and expected neuron output, while other inputs are increased (decreased) */
/* neuron input IS CHANGED  EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        int i;
        /* changing neuron input (fuzzy set) onto expected values */
        /* the case of changing the input picture itself must be avoided */
        /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
       /* if(memory->code!=0)
          if(memory->code->ahead!=0) */ /* disabling chacking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
            for(i=0, (*(memory->nn->first_Level->nodes+0))->actual=(*(memory->nn->first_Level->nodes+0))->first; (*(memory->nn->first_Level->nodes+0))->actual!=0; i++, (*(memory->nn->first_Level->nodes+0))->actual=(*(memory->nn->first_Level->nodes+0))->actual->follow)
               {
                 if(i<(int)memory->nn->name)
                   (*((float*)((*(memory->nn->first_Level->nodes+0))->actual->set)))-=memory->learning_rate*((*(memory->nn->last_Level->nodes+0))->m.notes-memory->nn->output->first->membership);
                 else
                   (*((float*)((*(memory->nn->first_Level->nodes+0))->actual->set)))+=memory->learning_rate*((*(memory->nn->last_Level->nodes+0))->m.notes-memory->nn->output->first->membership);
                };
       } /* ; */

void delete_BP_NCE_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_NCE_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head);
        } /* ; */		       

/* BP_AS_without_learning_algorithm functions */

void firing_BP_AS_without_learning(neuron_learning_algorithm *memory)
/* firing_BP_AS_without_learning() maps changes from neurone's output onto its input in order to enable "area separator" type of neurones (not proposed for learning) to be a part of larger BackPropagation trained neural structure */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input (each characteristic) is decreased by product of learning_rate and difference of associated neuron output value (2nd Level node's output) and expected value (output characteristic) */
/* neuron input IS CHANGED  EXCEPT in the case input IS PICTURE  (means not a neuron output) */
      {
        /* changing neuron input (fuzzy set) onto expected values */
        /* the case of changing the input picture itself must be avoided */
        /* it is EXPECTED that if the neuron input is another neuron's output the structure nucleotide base of the neuron HAS pointer AHEAD <> 0. Moreover pointer ahead should point onto structure nucleotide base keeping information about neuron (population) the neuron (currently in process) receives input from. */
       /* if(memory->code!=0)
          if(memory->code->ahead!=0) */ /* disabling chacking if there is any preceding population since it doesn't mean input is not the input picture. Even in the case input is the input picture it is, in fact, buffer of the input picture's pixel values so could been changed (just every time before firing neurones buffer MUST BE REFRESHED!) */
            for(memory->nn->output->actual=memory->nn->output->first; memory->nn->output->actual!=0; memory->nn->output->actual=memory->nn->output->actual->follow)
               *((float*)(memory->nn->output->actual->set->first->set->first->set))-=(memory->nn->output->actual->set->m.notes-memory->nn->output->actual->membership)*memory->learning_rate;
       } /* ; */

void delete_BP_AS_without_learning_algorithm(neuron_learning_algorithm *head)
/* delete_BP_AS_without_learning_algorithm() deletes neuron_learning_algorithm pointed by "*head" but not neuron pointed by its element 'neuron* nn'. "*head" is pointer on structure neuron_learning_algorithm to be deleted. */
       {
         testfree((char*)head);
        } /* ; */		       


/* convolutional layer feature map learning algorithms functions */

void equilize_weights_for_convolutional_layer_neuron_population(neuron_population *np)
/* set all neurones, inside the neuron population, weights the same as of the first neuron in the population */
    {
      int i,j;
      for(i=1; inumber_of_neurones; i++)
         {
           /* following (do-while) loop covers multilayer CNs that share weights of all layers */
           (*(np->neurones+0))->actual_Level=(*(np->neurones+0))->first_Level;
           (*(np->neurones+i))->actual_Level=(*(np->neurones+i))->first_Level;
           do
             {
               for(j=0; j<(*(np->neurones+0))->actual_Level->number_of_nodes; j++)
                  for((*((*(np->neurones+0))->actual_Level->nodes+j))->actual=(*((*(np->neurones+0))->actual_Level->nodes+j))->first, (*((*(np->neurones+i))->actual_Level->nodes+j))->actual=(*((*(np->neurones+i))->actual_Level->nodes+j))->first; (*((*(np->neurones+0))->actual_Level->nodes+j))->actual!=0; (*((*(np->neurones+0))->actual_Level->nodes+j))->actual=(*((*(np->neurones+0))->actual_Level->nodes+j))->actual->follow, (*((*(np->neurones+i))->actual_Level->nodes+j))->actual=(*((*(np->neurones+i))->actual_Level->nodes+j))->actual->follow)
                     (*((*(np->neurones+i))->actual_Level->nodes+j))->actual->membership=(*((*(np->neurones+0))->actual_Level->nodes+j))->actual->membership;
               (*(np->neurones+0))->actual_Level=(*(np->neurones+0))->actual_Level->follow;
               (*(np->neurones+i))->actual_Level=(*(np->neurones+i))->actual_Level->follow;
              } while((*(np->neurones+0))->actual_Level!=0);
          };
     } /* ; */

void fire_convolutional_layer_feature_map_learning_algorithm(learning_algorithm *head)
/* fire_convolutional_layer_feature_map_learning_algorithm() fires neuron learning algorithm functions for just the first neurone in the population */
     {
       int i, j, k/*, l*/, memdim;
       float m, *mem;
       
       /* preparing neuron population for learning */
       
       /* filling first neurone's inputs with averaged values of all neurones' inputs on the same positions and storing existing first neurone's inputs in the vector mem */
       for(i=0, memdim=0; i<(*(head->population->neurones+0))->first_Level->number_of_nodes; i++)
          memdim+=(*((*(head->population->neurones+0))->first_Level->nodes+i))->number_of_characteristics;
       mem=MAF((long int)memdim);
       for(i=0; ipopulation->number_of_neurones; i++)
          for(j=0, k=0; j<(*(head->population->neurones+i))->first_Level->number_of_nodes; j++)
             for((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->first; (int)((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual)>0; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->follow)
               {
    										  /* avoiding changing BIAS input */
                if((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->name==0)
                  *(mem+k++)+=*((float*)((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set));
                else if(memcmp((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  *(mem+k++)+=*((float*)((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set));
    										 }
               /* *(mem+k++)+=(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->membership; */
       for(j=0, k=0; j<(*(head->population->neurones+0))->first_Level->number_of_nodes; j++)
          for((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+0))->first_Level->nodes+j))->first; (*((*(head->population->neurones+0))->first_Level->nodes+j))->actual!=0; (*((*(head->population->neurones+0))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->follow)
             {
    										  /* avoiding changing BIAS input */
                if((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->name==0)
                  {
                     m=*((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set));
                     *((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set))=(m+(*(mem+k)))/(float)head->population->number_of_neurones;
                     *(mem+k++)=m;
                  }
                else if(memcmp((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  {
                  			    m=*((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set));
                         *((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set))=(m+(*(mem+k)))/(float)head->population->number_of_neurones;
                         *(mem+k++)=m;
                  			  }
															/* m=(*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->membership;
               (*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->membership=(m+(*(mem+k)))/(float)head->population->number_of_neurones;
               *(mem+k++)=m; */
              };
       
       /* averaging (actual) output values (from neurones' last layers) and storing in the first neurone's last layer output */
       for(i=0; i<(*(head->population->neurones+0))->output->number_of_characteristics; i++)
          {
            for(j=1; jpopulation->number_of_neurones; j++)
               (*((*(head->population->neurones+0))->last_Level->nodes+i))->m.notes+=(*((*(head->population->neurones+j))->last_Level->nodes+i))->m.notes;
            (*((*(head->population->neurones+0))->last_Level->nodes+i))->m.notes/=(float)head->population->number_of_neurones;
           };
       
       /* averaging expected output values (from neurones' output fuzzy object) and storing in the first neurone's output fuzzy object */
       for(i=0; ipopulation->number_of_neurones; i++)
          (*(head->population->neurones+i))->output->actual=(*(head->population->neurones+i))->output->first;
       i=0;
       do
         {
           for(j=1; jpopulation->number_of_neurones; j++)
              {
                (*(head->population->neurones+0))->output->actual->membership+=(*(head->population->neurones+j))->output->actual->membership;
                (*(head->population->neurones+j))->output->actual=(*(head->population->neurones+j))->output->actual->follow;
               };
           (*(head->population->neurones+0))->output->actual->membership/=(float)head->population->number_of_neurones;
           (*(head->population->neurones+0))->output->actual=(*(head->population->neurones+0))->output->actual->follow;
          }while((int)((*(head->population->neurones+0))->output->actual)>0);
       
       /* teaching neuron population is performed by teaching the first neuron presenting shared weight matrix with averaged inputs, actual and expected outputs */
       
       (*(head->neuron_learning+0))->fire(*(head->neuron_learning+0));
       
       /* adjusting all neurones' (except the first one's as they are already corrected) inputs to differ from the value of before learning the same as the first neurone's ones on the same positions */
       for(i=1; ipopulation->number_of_neurones; i++)
          for(j=0, k=0; j<(*(head->population->neurones+i))->first_Level->number_of_nodes; j++)
             for((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->first, (*((*(head->population->neurones+0))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+0))->first_Level->nodes+j))->first; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual!=0; (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->follow, (*((*(head->population->neurones+0))->first_Level->nodes+j))->actual=(*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->follow)
               {
    										  /* avoiding changing BIAS input */
                if((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->name==0)
                  (*((float*)((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set)))+=(*((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set)))-(*(mem+k++));
                else if(memcmp((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->name, "BIAS", sizeof("BIAS")-1)!=0)
                  			  (*((float*)((*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->set)))+=(*((float*)((*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->set)))-(*(mem+k++));
    										 }
                /* (*((*(head->population->neurones+i))->first_Level->nodes+j))->actual->membership+=(*((*(head->population->neurones+0))->first_Level->nodes+j))->actual->membership-(*(mem+k++)); */
       
       /* releasing allocated memory */
       free((char*)mem);
      } /* ; */

void convolutional_layer_feature_map_learning_algorithm_weights_correction(learning_algorithm *head)
/* learning_convolutional_layer_feature_map_algorithm_weights_correction() update weights (fires weights correction functions) for all neurones in the population by correcting the first neuron's weights and replicating them on other neurones in the population */
     {
       (*(head->neuron_learning+0))->weights_correction(*(head->neuron_learning+0));
       equilize_weights_for_convolutional_layer_neuron_population(head->population);
      } /* ; */

void convolutional_layer_feature_map_learning_algorithm_reset_weights_correction(learning_algorithm *head)
/* convolutional_layer_feature_map_learning_algorithm_reset_weights_correction() resets weight corrections (fires reset weights correction functions) for the first neurone in the population */
     {
       (*(head->neuron_learning+0))->reset_weights_correction(*(head->neuron_learning+0));
      } /* ; */

void delete_convolutional_layer_feature_map_learning_algorithm(learning_algorithm *head)
/* delete_convolutional_layer_feature_map_learning_algorithm() delete's learning algorithm structure together with the first neuron learning algorithm structure it points on (neuron learning structures for the first neurone inside the neural population) */
     {
       (*(head->neuron_learning+0))->deleting(*(head->neuron_learning+0));
       if(head->name!=0) free((char*) head->name); /* disable this line if head->name consists square_window_side_lenght */
       if(head->comment!=0) free((char*) head->comment); /* disable this line if head->comment consists overlaping_in_each_dimension */
       free((char*) head->neuron_learning);
       free((char*) head);
      } /* ; */


/* PRINTING WEIGHTS */

void print_node_weights(fuzzy_object *node, FILE *fn)
/* print weights of the node into the file fn, weights are separated with commas */
    {
      /*int i;*/
      
      fprintf(fn, "%f", node->first->membership);
      for(node->actual=node->first->follow; node->actual!=0; node->actual=node->actual->follow)
         fprintf(fn, ",%f", node->actual->membership);
     } /* ; */

void print_layer_weights(Level *layer, FILE *fn)
/* print weights of the layer into the file fn, nodes are separated with ",," (except the first one that hasn't the first comma) where BR is node's order number inside the layer */
    {
      int i;
      
      fprintf(fn, ",");
      print_node_weights(*(layer->nodes+0), fn);
      for(i=1; inumber_of_nodes; i++)
         {
           fprintf(fn, ",,", i+1);
           print_node_weights(*(layer->nodes+i), fn);
          };
      } /* ; */

void print_neuron_weights(neuron *nn, FILE *fn)
/* print weights of the neuron into the file fn, layers are separated with new line (CR) (except the first one) and "," where BR is layer's order number inside the neuron */
    {
      fprintf(fn, ",");
      print_layer_weights(nn->first_Level, fn);
      for(nn->actual_Level=nn->first_Level->follow; nn->actual_Level!=0; nn->actual_Level=nn->actual_Level->follow)
         {
           fprintf(fn, "%#1c,", (char)13, nn->actual_Level->Level_number);
           print_layer_weights(nn->actual_Level, fn);
          };
      } /* ; */

void print_neuron_population_weights(neuron_population *np, FILE *fn)
/* print weights of the neurones, inside the population, into the file fn, neurones are separated with two new lines (CR) (except the first one) and "," where BR is neuron's order number inside the neuron_population */
/* in the case when the population's code (nucleotide base) element create_population_learning_algorithm=create_convolutional_layer_feature_map_learning_algorithm only the first neuron's weights are printed led only with "," */
    {
      int i;
      
      if(np->code->create_population_learning_algorithm==create_convolutional_layer_feature_map_learning_algorithm)
        {
          fprintf(fn, ",");
          print_neuron_weights(*(np->neurones+0), fn);
         }
      else
        {
          fprintf(fn, ",");
          print_neuron_weights(*(np->neurones+0), fn);
          for(i=1; inumber_of_neurones; i++)
            {
              fprintf(fn, "%#1c%#1c,", (char)13, (char)13, i+1);
              print_neuron_weights(*(np->neurones+i), fn);
             };
         };
      } /* ; */

void print_neural_subsystem_weights(neural_subsystem *ns, FILE *fn)
/* print weights of the neurones, inside the subsystem, into the file fn, neuron_populations are separated with two new lines (CR) (except the first one) and "," where BR is neuron_population's nucleotide_base's identification number */
/* neuron_populations, inside the subsystem, are printed in the same order as inside the subsystem's firing_list */
    {
      int i;
      
      fprintf(fn, ",", (*(ns->firing_list+0))->code->identification_number);
      print_neuron_population_weights(*(ns->firing_list+0), fn);
      for(i=1; inumber_of_populations; i++)
         {
           fprintf(fn, "%#1c%#1c,", (char)13, (char)13, (*(ns->firing_list+i))->code->identification_number);
           print_neuron_population_weights(*(ns->firing_list+i), fn);
          };
      } /* ; */

void print_neural_system_weights(neural_system *n, FILE *fn)
/* print weights of the neurones, inside the system, into the file fn, neural_subsystems are separated with two new lines (CR) (except the first one) and "," where BR is neural_subsystem's gene's identification number */
/* neural_subsystems, inside the system, are printed in the same order as inside the system's firing_list */
    {
      int i;
      
      fprintf(fn, "\n,", (*(n->firing_list+0))->code->identification_number);
      print_neural_subsystem_weights(*(n->firing_list+0), fn);
      for(i=1; inumber_of_subsystems; i++)
         {
           fprintf(fn, "%#1c%#1c,", (char)13, (char)13, (*(n->firing_list+i))->code->identification_number);
           print_neural_subsystem_weights(*(n->firing_list+i), fn);
          };
      } /* ; */




/* FUNCTIONS FOR READING DIFFERENT GRAPHIC FORMATS */

float *read_bitmap(char *fname)
/* float *read_bitmap(char *fname) reads file (whose name is pointed by fname) made by UNIX program "bitmap", forms float vector with  dimension width*height+2, and return pointer on the vector. The first 2 elements of the vector are (float)width and (float)height, respectly. "width" presents horisontal picture resolution, while "height" vertical. */
	{
	  int width, height, x2read, xlast, i, j, k, l; /* x2read shows how many hex pairs memorises 1 picture line, while xlast shows how many pixel are presented by the most left pair inside a group of x2read pairs. */
	  char c, c1, c2, c3, c4;
	  float *picture;
	  FILE *fn;
	  
	  fn=fopen(fname,"r");
	  /* reading horisontal resolution, maximal value is 9999 */
	  c4=getc(fn);
	  c3=getc(fn);
	  c2=getc(fn);
	  c1=getc(fn);
	  c=getc(fn);
	  do
	    {
	      c4=c3;
	      c3=c2;
	      c2=c1;
	      c1=c;
	      c=getc(fn);
	     }
	  while(c!='\n');
	  if(((int)c4<48)||((int)c4>57)) c4=(char)48;
	  if(((int)c3<48)||((int)c3>57)) c3=(char)48;
	  if(((int)c2<48)||((int)c2>57)) c2=(char)48;
	  if(((int)c1<48)||((int)c1>57)) c1=(char)48;
	  width=((int)c4-48)*1000+((int)c3-48)*100+((int)c2-48)*10+(int)c1-48;
	  
	  /* waiting for vertical dimension definition (begin with "#") */
	  do
	    c=getc(fn);
	  while(c!='#');

	  /* reading vertical resolution, maximal value is 9999 */
	  do
	    {
	      c4=c3;
	      c3=c2;
	      c2=c1;
	      c1=c;
	      c=getc(fn);
	     }
	  while(c!='\n');
	  if(((int)c4<48)||((int)c4>57)) c4=(char)48;
	  if(((int)c3<48)||((int)c3>57)) c3=(char)48;
	  if(((int)c2<48)||((int)c2>57)) c2=(char)48;
	  if(((int)c1<48)||((int)c1>57)) c1=(char)48;
	  height=((int)c4-48)*1000+((int)c3-48)*100+((int)c2-48)*10+(int)c1-48;
	  
	  /* declaring vector with pixel values preceded with pictures width (horisontal resolution) and height (vertical resolution) respectly */
	  picture=MAF((long int)(unsigned int)(width*height+2));
	  *(picture+0)=(float)width;
	  *(picture+1)=(float)height;
	  
	  /* waiting for pixel description (begin with "{") */
	  do
	    c=getc(fn);
	  while(c!='{');
	  
	  /* reading pixel description */
	  /* each bit in BMP describes one pixel (the rightest bit in row the rightest pixel in line, continouing toward left until all pixel are described; The rest bits in hexadecimal presentation are set 0.) */
	  i=0;
	  j=0;
	  x2read=(int)ceil((double)(width/8.0));
	  xlast=(int)fmod((double)width,(double)8);
	  if(xlast==0) xlast=8;
	  do
	  	{
	  	 c=getc(fn);
	  	 if(c=='x')
	  	   {
	  	     c=getc(fn);
	  	     c1=getc(fn);
	  	     if(j>x2read-2)
	  	       {
	  	         l=(xlast>4)? 4: xlast;
	  	         switch(c1)
	  	             	{
	  	             	  case '0': for(k=0; k4)
	  	           {
	  	             switch(c)
	  	             	   {
	  	             	  	 case '0': for(k=4; k=x2read) j=0;
	  	}
	 while(c!='}');
	 fclose(fn);
	 return(picture);
	} /* ; */





float sum_of_all_times_exponent_of_last_weighted_inputs(fuzzy_object *node, int Level_number)
/* sum of all but the last inputs multiplied each with its weight (membership of pointer onto the input) is multiplied with the exponent (e^) of the last weighted (weight is membership of pointer onto the input) input and returned. */
/* value "int Level_number" has meaning to distinguist the first Level from other Levels */
       {
         float sum=0.0;
         if(Level_number==1)
           {
             for(node->actual=node->first; node->actual->follow!=0; node->actual=node->actual->follow)
                sum+=(*((float*)(node->actual->set)))*node->actual->membership;
             sum*=(float)exp((double)((*((float*)(node->actual->set)))*node->actual->membership));
            }
         else
           {
             for(node->actual=node->first; node->actual->follow!=0; node->actual=node->actual->follow)
                sum+=node->actual->set->m.notes*node->actual->membership;
             sum*=(float)exp((double)(node->actual->set->m.notes*node->actual->membership));
            };
         return(sum);
         } /* ; */


/* setting up BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm */

neuron_learning_algorithm *BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm_setup(nucleotide_base *code, neuron *nn, float learning_rate)
/* *BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm__setup() forms and fills structure neuron_learning_algorithm and setting correction weights on 0.0. "code" is pointer on the nucleotide base used to generate the neuron  "nn" is pointer on neuron BP algorithm is going to be applied on, "learning_rate" is coefficient of learning in BP algorithm. */
		     {
		       Level *act_Level;
		       int i, j, k;
		       neuron_learning_algorithm *head;
		       head=MANLA((long int)1);
		       head->name=MAC((long int)82);
		       head->name="BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm ";
		       head->comment=0;
		       
		       head->code=code;
		       head->learning_rate=learning_rate;
		       head->nn=nn;
		       head->weight_pointer=MAppCl((long int)(head->nn->number_of_Levels));
		       head->weight_correction=MApF((long int)(head->nn->number_of_Levels));
		       
		       head->number_of_weights_per_Level=MAI((long int)(head->nn->number_of_Levels));
    	       for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		           {
		             for(*(head->number_of_weights_per_Level+i)=0, j=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     (*(head->number_of_weights_per_Level+i))++;
		             *(head->weight_pointer+i)=MApCl((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             *(head->weight_correction+i)=MAF((long int)(int)(*(head->number_of_weights_per_Level+i)));
		             
		             for(j=0, k=0; jnumber_of_nodes; j++)
		                 for((*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->first; (*(act_Level->nodes+j))->actual!=0; (*(act_Level->nodes+j))->actual=(*(act_Level->nodes+j))->actual->follow)
		                     {
		                       *(*(head->weight_pointer+i)+k)=(*(act_Level->nodes+j))->actual;
		                       *(*(head->weight_correction+i)+k++)=0.0;
		                      };
		             
		            };
		       		     
		       if(head->nn->name!=0)
		         {
		           if(*(head->nn->name+0)=='r')
		             {
		               head->neuron_copy=MApF((int)(head->nn->number_of_Levels));
		               for(i=0, act_Level=head->nn->first_Level; act_Level!=0; act_Level=act_Level->follow, i++)
		                  {
		                    *(head->neuron_copy+i)=MAF((long int)(int)act_Level->number_of_nodes);
		                    for(j=0; jnumber_of_nodes; j++)
		                       *(*(head->neuron_copy+i)+j)=0.0;
		                   };
		              }
		           else
		             {
		               head->neuron_copy=0;
		              };
		          }
		       else
		         {
		           head->neuron_copy=0;
		          };
		       
		   head->create=BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm_setup;
		   head->fire=firing_BP_sum_of_all_times_exponent_of_last_weighted_inputs;
 	       head->weights_correction=BP_weights_correction_without_limits; /* BP_weights_correction; */
 	       head->reset_weights_correction=reset_weights_correction;
 	       head->deleting=delete_neuron_learning_algorithm;
 	       return(head);
		      } /* ; */

/* BP_sum_of_all_times_exponent_of_last_weighted_inputs_neuron_learning_algorithm functions */

void firing_BP_sum_of_all_times_exponent_of_last_weighted_inputs(neuron_learning_algorithm *memory)
/* firing_BP_sum_of_all_times_exponent_of_last_weighted_inputs() performs a cycle of calculation of all neuron's weights correction (only calculate corrections but DOESN'T change any weight) according the neuron output value */
/* neuron output (fuzzy object characteristics) must have expected values (right values NOT its previous output) since its the last Level remember its previous output */
/* neuron input IS CHANGED to expected values (previous input- learning_rate * sum(calculated derivation of the input value according each the first Level node receiving input from the input characteristic)) (EXCEPT in the case input IS PICTURE  (means not a neuron output) - DISABLED - INPUT FUZZY SET'S MEMBERSHIPS ARE ALWAYS CHANGED!) */
/* NOTE: firing_BP_sum_of_all_times_exponent_of_last_weighted_inputs() doesn't correct weights. To do so one needs to call function BP_weight_correction() after. */
/* Used BackPropagation algorithm is from IEEE "Neural Networks Theoretical Foundations and Analysis", pp.211-221, article "Backpropagation Through Time: What It Does and How to Do It" by P.J. Werbos */
      {
        int i, j, k, l, m;
        enum Bool found;
        float **neti, beta, gama;
        Level *act_Level;
        
        /* "**neti" is pointer to vectors (each for its Level) consisting node output neti (the same label as in the literature) */
        neti=MApF((int)(memory->nn->number_of_Levels));
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
            *(neti+i)=MAF((long int)(int)memory->nn->actual_Level->number_of_nodes);


        memory->nn->actual_Level=memory->nn->last_Level;
        j=memory->nn->number_of_Levels-1;
        for(i=0, memory->nn->output->actual=memory->nn->output->first; inn->actual_Level->number_of_nodes;memory->nn->output->actual=memory->nn->output->actual->follow, i++)
            *(*(neti+j)+i)=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes)*((*(memory->nn->actual_Level->nodes+i))->m.notes-memory->nn->output->actual->membership);


        /* calculating neti - corrected nodes (pre-non-linearised) values */
        do
          {
            j--;
            memory->nn->actual_Level=memory->nn->actual_Level->ahead;
            for(i=0; inn->actual_Level->number_of_nodes-1; i++)
                {
                  
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knn->actual_Level->follow->number_of_nodes; k++)
                      {
                        
                        for((*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual!=(*(memory->nn->actual_Level->follow->nodes+k))->last; (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow)
                           if((*(memory->nn->actual_Level->follow->nodes+k))->actual->set==*(memory->nn->actual_Level->nodes+i)) (*(*(neti+j)+i))+=(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership*(float)exp((double)(-(*(memory->nn->actual_Level->follow->nodes+k))->last->membership*(*(memory->nn->actual_Level->follow->nodes+k))->last->set->m.notes))*(*(*(neti+j+1)+k));
                        
                       };
                  
                  *(*(neti+j)+i)*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);
                  /* should be changed for recurrent neurones whose the last input can be from non-preceeding layer */
                 };
                  
            i=memory->nn->actual_Level->number_of_nodes-1;
                  *(*(neti+j)+i)=0.0;
                  for(k=0; knn->actual_Level->follow->number_of_nodes; k++)
                      {
                        for(beta=0.0, (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->first; (*(memory->nn->actual_Level->follow->nodes+k))->actual!=(*(memory->nn->actual_Level->follow->nodes+k))->last; (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->actual->follow)
                           beta+=(*(memory->nn->actual_Level->follow->nodes+k))->actual->membership*(*(memory->nn->actual_Level->follow->nodes+k))->actual->set->m.notes;
                        beta*=(float)exp((double)(-(*(memory->nn->actual_Level->follow->nodes+k))->last->membership*(*(memory->nn->actual_Level->follow->nodes+k))->last->set->m.notes));
                        
                        (*(memory->nn->actual_Level->follow->nodes+k))->actual=(*(memory->nn->actual_Level->follow->nodes+k))->last;
                        if((*(memory->nn->actual_Level->follow->nodes+k))->actual->set==*(memory->nn->actual_Level->nodes+i)) (*(*(neti+j)+i))+=-beta*(*(memory->nn->actual_Level->follow->nodes+k))->last->membership*(*(*(neti+j+1)+k));
                       };
                  
                  *(*(neti+j)+i)*=memory->code->node_output_derivation((*(memory->nn->actual_Level->nodes+i))->m.notes);

           }while(memory->nn->actual_Level!=0);
        
        
        /* correcting weight values */
        j=memory->nn->number_of_Levels-1;
        memory->nn->actual_Level=memory->nn->last_Level;
        while(memory->nn->actual_Level!=memory->nn->first_Level)
             {
               for(gama=0.0, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=(*(memory->nn->actual_Level->nodes+i))->last; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                  gama+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes;
               gama*=(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->last->membership*(*(memory->nn->actual_Level->nodes+i))->last->set->m.notes));
               
               for(i=0, l=0; inn->actual_Level->number_of_nodes; i++)
                 {
                   for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=(*(memory->nn->actual_Level->nodes+i))->last; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                      if((*(memory->nn->actual_Level->nodes+i))->actual->name!=0)
                       {
                         if(*((*(memory->nn->actual_Level->nodes+i))->actual->name+0)=='r')
                           {
                             found='F';
                             for(act_Level=memory->nn->actual_Level; (act_Level!=0)&&(found=='F'); act_Level=act_Level->follow)
                                for(m=0; (mnumber_of_nodes-1)&&(found=='F'); m++)
                                   {
                                     if(*(act_Level->nodes+m)==(*(memory->nn->actual_Level->nodes+i))->actual->set)
                                       {
                                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))));
                                         found='T';
                                        };
                                    };
                            }
                         else
                          {
                            (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes));
                           };
                        }
                     else
                       {
                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*(memory->nn->actual_Level->nodes+i))->actual->set->m.notes));
                        };
                   
                   /* calculating weights for the last node's input taken into the exponent */
                   if((*(memory->nn->actual_Level->nodes+i))->last->name!=0)
                       {
                         if(*((*(memory->nn->actual_Level->nodes+i))->last->name+0)=='r')
                           {
                             found='F';
                             for(act_Level=memory->nn->actual_Level; (act_Level!=0)&&(found=='F'); act_Level=act_Level->follow)
                                for(m=0; (mnumber_of_nodes-1)&&(found=='F'); m++)
                                   {
                                     if(*(act_Level->nodes+m)==(*(memory->nn->actual_Level->nodes+i))->last->set)
                                       {
                                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))*gama;
                                         found='T';
                                        };
                                    };
                            }
                         else
                          {
                            (*(*(memory->weight_correction+j)+l++))+=-(*(*(neti+j)+i))*(*(memory->nn->actual_Level->nodes+i))->last->set->m.notes*gama;
                           };
                        }
                     else
                       {
                         (*(*(memory->weight_correction+j)+l++))+=-(*(*(neti+j)+i))*(*(memory->nn->actual_Level->nodes+i))->last->set->m.notes*gama;
                        };
                  };
               
               j--;
               memory->nn->actual_Level=memory->nn->actual_Level->ahead;
              };
        
        /* changing the first layer weights */
        memory->nn->actual_Level=memory->nn->first_Level;
        j=0;
               for(gama=0.0, (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=(*(memory->nn->actual_Level->nodes+i))->last; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                  gama+=(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)));
               gama*=(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->last->membership*(*((float*)((*(memory->nn->actual_Level->nodes+i))->last->set)))));
               
               for(i=0, l=0; inn->actual_Level->number_of_nodes; i++)
                 {
                   for((*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->first; (*(memory->nn->actual_Level->nodes+i))->actual!=(*(memory->nn->actual_Level->nodes+i))->last; (*(memory->nn->actual_Level->nodes+i))->actual=(*(memory->nn->actual_Level->nodes+i))->actual->follow)
                      if((*(memory->nn->actual_Level->nodes+i))->actual->name!=0)
                       {
                         if(*((*(memory->nn->actual_Level->nodes+i))->actual->name+0)=='r')
                           {
                             found='F';
                             for(act_Level=memory->nn->actual_Level; (act_Level!=0)&&(found=='F'); act_Level=act_Level->follow)
                                for(m=0; (mnumber_of_nodes-1)&&(found=='F'); m++)
                                   {
                                     if(*(act_Level->nodes+m)==(*(memory->nn->actual_Level->nodes+i))->actual->set)
                                       {
                                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))));
                                         found='T';
                                        };
                                    };
                            }
                         else
                          {
                            (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))));
                           };
                        }
                     else
                       {
                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))*(float)exp((double)(-(*(memory->nn->actual_Level->nodes+i))->actual->membership*(*((float*)((*(memory->nn->actual_Level->nodes+i))->actual->set)))));
                        };
                   
                   /* calculating weights for the last node's input taken into the exponent */
                   if((*(memory->nn->actual_Level->nodes+i))->last->name!=0)
                       {
                         if(*((*(memory->nn->actual_Level->nodes+i))->last->name+0)=='r')
                           {
                             found='F';
                             for(act_Level=memory->nn->actual_Level; (act_Level!=0)&&(found=='F'); act_Level=act_Level->follow)
                                for(m=0; (mnumber_of_nodes-1)&&(found=='F'); m++)
                                   {
                                     if(*(act_Level->nodes+m)==(*(memory->nn->actual_Level->nodes+i))->last->set)
                                       {
                                         (*(*(memory->weight_correction+j)+l++))+=*(*(neti+j)+i)*(*(*(memory->neuron_copy+act_Level->Level_number-1)+m))*gama;
                                         found='T';
                                        };
                                    };
                            }
                         else
                          {
                            (*(*(memory->weight_correction+j)+l++))+=-(*(*(neti+j)+i))*(*((float*)((*(memory->nn->actual_Level->nodes+i))->last->set)))*gama;
                           };
                        }
                     else
                       {
                         (*(*(memory->weight_correction+j)+l++))+=-(*(*(neti+j)+i))*(*((float*)((*(memory->nn->actual_Level->nodes+i))->last->set)))*gama;
                        };
                  };
        
        /* changing neuron input (fuzzy set) onto expected values */
        for(k=0; knn->first_Level->number_of_nodes; k++)
           {
             for(beta=0.0, (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->actual_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=(*(memory->nn->first_Level->nodes+k))->last; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
                 beta+=(*(memory->nn->first_Level->nodes+k))->actual->membership*(*((float*)((*(memory->nn->first_Level->nodes+k))->actual->set)));
             beta*=(float)exp((double)(-(*(memory->nn->first_Level->nodes+k))->last->membership*(*((float*)((*(memory->nn->first_Level->nodes+k))->last->set)))));

             for((*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->first; (*(memory->nn->first_Level->nodes+k))->actual!=(*(memory->nn->first_Level->nodes+k))->last; (*(memory->nn->first_Level->nodes+k))->actual=(*(memory->nn->first_Level->nodes+k))->actual->follow)
                *((float*)((*(memory->nn->first_Level->nodes+k))->actual->set))-=memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->actual->membership*(*(*(neti+0)+k))*(float)exp((double)(-(*(memory->nn->first_Level->nodes+k))->last->membership*(*((float*)((*(memory->nn->first_Level->nodes+k))->last->set)))));
             *((float*)((*(memory->nn->first_Level->nodes+k))->last->set))-=-memory->learning_rate*(*(memory->nn->first_Level->nodes+k))->last->membership*(*(*(neti+0)+k))*beta;
            };
    
    /* releasing allocated memory */
    for(i=0, memory->nn->actual_Level=memory->nn->first_Level; i<(int)(memory->nn->number_of_Levels); i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
        testfree((char*)(*(neti+i)));
    testfree((char*)neti);
    if(memory->neuron_copy!=0)
      {
        for(i=0, memory->nn->actual_Level=memory->nn->first_Level; inn->number_of_Levels; i++, memory->nn->actual_Level=memory->nn->actual_Level->follow)
             for(j=0; jnn->actual_Level->number_of_nodes; j++)
                *(*(memory->neuron_copy+i)+j)=(*(memory->nn->actual_Level->nodes+j))->m.notes;
       };
   } /* ; */




#ifdef __cplusplus
}
#endif

      
/* All comments on this library are welcome. Feel testfree to contact author if there is anything  you would like or you need to be added or anything you suggest to change.
This library is for use only in education and research. It is not for commercial use! Written permission from author is necessary for commercial use or for inclusion as a part of project or program or another library!
Programs, projects, libraries or anything consists this library or its part MUST NOT be sold without author permission!
Author: Dekovich Igor, 11/73 Campbell St., Wollongong, NSW 2500, Australia, 
        ph: xx61 (0)2 4225 2673
		e-mail: idekovich@yahoo.com            */

/* Split 1994 & Auckland 1995/96/97 */
/* Auckland 26/10/96 */
/* revision 15/10/97 */
/* last revision 28/12/2001 */

    Source: geocities.com/idekovich