public SpikingNetwork(int InputCount, int OutputCount, int Layers, int NeuronAmount, int SynapsAmount)
        {
            Inputs              = new float[InputCount];
            Outputs             = new float[OutputCount];
            Neurons             = new Neuron[Layers + 2][];
            Neurons[0]          = new Neuron[InputCount];
            Neurons[Layers + 1] = new Neuron[OutputCount];
            for (int i = 0; i < Layers; i++)
            {
                Neurons[i + 1] = new Neuron[NeuronAmount];
            }
            for (int i = 0; i < Layers + 2; i++)
            {
                for (int j = 0; j < Neurons[i].Length; j++)
                {
                    Neurons[i][j] = new Neuron(Form1.Rand.Next(3, 7));
                    if (i < Neurons.Length - 1)
                    {
                        for (int k = 0; k < Neurons[i + 1].Length; k++)
                        {
                            if (Form1.Rand.NextDouble() > 0.1)
                            {
                                Synaps S = new Synaps(k, SynapsDir.Forward);
                                Neurons[i][j].Synapses.Add(S);
                            }
                        }
                    }
                    if (i > 0)
                    {
                        for (int k = 0; k < Neurons[i - 1].Length; k++)
                        {
                            if (Form1.Rand.NextDouble() > 0.01)
                            {
                                Synaps S = new Synaps(k, SynapsDir.Backward);
                                Neurons[i][j].Synapses.Add(S);
                            }
                        }
                    }
                }
            }

            /*for (int i = 0; i < SynapsAmount; i++)
             * {
             *  int Layer = Form1.Rand.Next(Neurons.Length);
             *  SynapsDir Dir = (Form1.Rand.NextDouble()>0.25||Layer==0)&& Layer !=Layers+1? SynapsDir.Forward : SynapsDir.Backward;
             *  if(Dir== SynapsDir.Forward)
             *  {
             *      Synaps S = new Synaps(Form1.Rand.Next(Neurons[Layer + 1].Length), Dir, Lerp(-0.2f, 0.75f, (float)Form1.Rand.NextDouble()), Form1.Rand.Next(2, 5));
             *      Neurons[Layer][Form1.Rand.Next(Neurons[Layer].Length)].Synapses.Add(S);
             *  }else
             *  {
             *      Synaps S = new Synaps(Form1.Rand.Next(Neurons[Layer - 1].Length), Dir, Lerp(-0.2f, 0.75f, (float)Form1.Rand.NextDouble()), Form1.Rand.Next(2, 5));
             *      Neurons[Layer][Form1.Rand.Next(Neurons[Layer].Length)].Synapses.Add(S);
             *  }
             * }*/
        }
 int SynapsExist(int Layer, int Source, int Target, SynapsDir Dir)
 {
     for (int i = 0; i < Neurons[Layer][Source].Synapses.Count; i++)
     {
         Synaps S = Neurons[Layer][Source].Synapses[i];
         if (S.Dir == Dir && S.Id == Target)
         {
             return(i);
         }
     }
     return(-1);
 }