private Tuple<IIndividuo, IIndividuo> CruzarIndividuos(IIndividuo individuo1, IIndividuo individuo2)
        {
            IIndividuo hijo1 = individuo1.GenerarDescendencia(individuo1);

            for (int indiceGen = 0; indiceGen < individuo1.Cromosoma.CantidadGenes; indiceGen++)
            {
                if (_generador.Next(0, 100) >= 50)
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }
                else
                {
                    var genMadre = individuo2.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);
                }
            }

            IIndividuo hijo2 = individuo1.GenerarDescendencia(individuo1);
            for (int indiceGen = 0; indiceGen < individuo1.Cromosoma.CantidadGenes; indiceGen++)
            {
                if (_generador.Next(0, 100) >= 50)
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }
                else
                {
                    var genMadre = individuo2.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);
                }
            }

            return new Tuple<IIndividuo, IIndividuo>(hijo1, hijo2);
        }
        private Tuple<IIndividuo, IIndividuo> CruzarIndividuos(IIndividuo individuo1, IIndividuo individuo2)
        {
            IIndividuo hijo1 = individuo1.GenerarDescendencia(individuo1);
            IIndividuo hijo2 = individuo1.GenerarDescendencia(individuo1);

            for (int indiceGen = 0; indiceGen <= _parametrosCruzamiento.Mascara.Length - 1; indiceGen++)
            {
                if (_parametrosCruzamiento.Mascara[indiceGen] == 'P')
                {
                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);

                    var genMadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);

                }
                else
                {
                    var genMadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo1.Cromosoma.Genes.SetValue(genMadre.Clonar(), indiceGen);

                    var genPadre = individuo1.Cromosoma.Genes.GetValue(indiceGen) as IGen;
                    hijo2.Cromosoma.Genes.SetValue(genPadre.Clonar(), indiceGen);
                }

            }

            return new Tuple<IIndividuo, IIndividuo>(hijo1, hijo2);
        }