示例#1
0
        /// <summary>
        /// Crea un cromosoma relleno aleatoriamente con los puntos especificados
        /// </summary>
        /// <param name="puntos">Los puntos que almacenará el cromosoma</param>
        /// <param name="probabilidadMutacion">Probabilidad de mutar</param>
        /// <param name="puntoCorte">Punto de corte</param>
        public Cromosoma(Punto[] puntos, double probabilidadMutacion, int puntoCorte)
        {
            this.ProbabilidadMutacion = probabilidadMutacion;
            this.PuntoCorte = puntoCorte;
            this.estaciones = new Punto[puntos.Length];

            bool[] usadas = new bool[puntos.Length];

            for (int i = 0; i < this.Longitud; i++) usadas[i] = false;

            for (int i = 0; i < this.Longitud; i++)
            {
                int candidata;
                do
                {
                    candidata = NextInt(0, this.Longitud); ;
                } while (usadas[candidata]);
                this[i] = puntos[candidata];//.Clone();
                usadas[candidata] = true;
                PuntoCorte = 1;
            }
        }
示例#2
0
        /// <summary>
        /// Genera un arreglo de puntos aleatorios
        /// </summary>
        /// <param name="numeroPuntos">El número de puntos a generar</param>
        /// <param name="width">El valor máximo que puede tomar un punto en su coordenada Y</param>
        /// <param name="height">El valor máximo que puede tomar un punto en su coordenada X</param>
        /// <param name="offset"></param>
        /// <returns>El set de puntos aleatorios</returns>
        public static Punto[] PuntosAleatorios(int numeroPuntos, int width, int height, int offset)
        {
            Punto[] aleatorias = new Punto[numeroPuntos];

            for (int i = 0; i < numeroPuntos; i++)
            {
                aleatorias[i] = new Punto(i
                , ((int)(r.NextDouble() * (width - offset * 2)) + offset)
                , ((int)(r.NextDouble() * (height - offset * 2)) + offset));
            }

            return aleatorias;
        }
示例#3
0
 /// <summary>
 /// Calcula la distancia entre dos puntos
 /// </summary>
 /// <param name="punto">El punto al cual se desea medir la distancia</param>
 /// <returns>El valor total de la distancia</returns>
 public double Distancia(Punto punto)
 {
     return this.Distancia(punto.X, punto.Y);
 }
示例#4
0
 /// <summary>
 /// Obtiene el índice en el que se encuetra la estación proporcionada
 /// </summary>
 /// <param name="estacion"></param>
 /// <returns>Un entero de 0 a la longitud del cromosoma menos uno, menos uno en caso de que no se encuentre</returns>
 private int IndexEstacion(Punto estacion)
 {
     for (int i = 0; i < estaciones.Length; i++)
     {
         if (estaciones[i].Equals(estacion))
         {
             return i;
         }
     }
     return -1;
 }
示例#5
0
 /// <summary>
 /// Obtiene el índice en el que se encuetra la estación proporcionada
 /// </summary>
 /// <param name="estacion"></param>
 /// <returns>Un entero de 0 a la longitud del cromosoma menos uno, menos uno en caso de que no se encuentre</returns>
 public int this[Punto estacion]
 {
     get { return IndexEstacion(estacion); }
 }