public static GeneticValue[] Reproduce(GeneticValue[] par)
        {
            var ngv = new GeneticValue[par.Length];

            for (int i = 0; i < ngv.Length; i++)
                ngv[i] = par[i].Reproduce();

            return ngv;
        }
        public static GeneticValue[][] Reproduce(GeneticValue[][] par)
        {
            var ngv = new GeneticValue[par.Length][];

            for (int i = 0; i < par.Length; i++)
                ngv[i] = GeneticValue.Reproduce(par[i]);

            return ngv;
        }
        //Reproduce
        public GeneticValue Reproduce()
        {
            var ngv = new GeneticValue(this.Value, this._momentumRetainment);

            ngv._storedMomentumValue = this._storedMomentumValue;

            return ngv;
        }