示例#1
0
    public GeneticAlgorithm()
    {
        Random random = new Random();

        GenerarPoblacion();
        for (int j = 0; j < 30; j++)
        {
            SeleccionarPoblacion(poblacion);
            for (int i = 0; i < 100; i++)
            {
                if (random.NextDouble() <= probabilidad_combinacion)
                {
                    Combinar(poblacion[i], poblacion[random.Next(0, i)]);
                }
                if (random.NextDouble() <= probabilidad_mutacion)
                {
                    Mutacion(poblacion[i]);
                }
            }
        }
        MejorIA = SeleccionFinal(poblacion);

        string filename = "ResultadoIA";

        if (!File.Exists(filename))
        {
            using (StreamWriter sw = File.CreateText(filename)) {
                sw.WriteLine("distancia 1 = " + MejorIA.k_distancia1.ToString());
                sw.WriteLine("distancia 2 = " + MejorIA.k_distancia2.ToString());
                sw.WriteLine("distancia 3 = " + MejorIA.k_distancia3.ToString());
                sw.WriteLine("diferencia para ganar = " + MejorIA.diferencia_para_ganar.ToString());
            }
        }
    }
示例#2
0
    public FluidIAIndividual SeleccionFinal(FluidIAIndividual[] poblacion)
    {
        FluidIAIndividual ganador = poblacion [0];

        for (int i = 1; i < poblacion.Length(); i++)
        {
            ganador = EvaluarIndividuos(ganador, poblacion[i]);
        }
    }
示例#3
0
    public void Combinar(FluidIAIndividual individuo1, FluidIAIndividual individuo2)
    {
        Random random = new Random();
        int    j      = random.Next(1, 3); // elegimos punto de corte al azar
        double aux1;

        switch (j)
        {
        case 1:
            aux1 = individuo1.k_distancia2;
            individuo1.k_distancia2 = individuo2.k_distancia2;
            individuo2.k_distancia2 = aux1;

            aux1 = individuo1.k_distancia3;
            individuo1.k_distancia3 = individuo2.k_distancia3;
            individuo2.k_distancia3 = aux1;

            aux2 = individuo1.diferencia_para_ganar;
            individuo1.diferencia_para_ganar = individuo2.diferencia_para_ganar;
            individuo2.diferencia_para_ganar = aux2;
            break;

        case 2:
            aux1 = individuo1.k_distancia3;
            individuo1.k_distancia3 = individuo2.k_distancia3;
            individuo2.k_distancia3 = aux1;

            aux2 = individuo1.diferencia_para_ganar;
            individuo1.diferencia_para_ganar = individuo2.diferencia_para_ganar;
            individuo2.diferencia_para_ganar = aux2;
            break;

        case 3:
            aux2 = individuo1.diferencia_para_ganar;
            individuo1.diferencia_para_ganar = individuo2.diferencia_para_ganar;
            individuo2.diferencia_para_ganar = aux2;
            break;
        }
    }
示例#4
0
    public void Mutacion(FluidIAIndividual individuo)
    {
        Random random = new Random();
        int    i      = random.Next(0, 3); //elegimos un atributo al azar

        switch (i)
        {
        case 0:
            individuo.k_distancia1 = random.NextDouble();
            break;

        case 1:
            individuo.k_distancia2 = random.NextDouble();
            break;

        case 2:
            individuo.k_distancia3 = random.NextDouble();
            break;

        case 3:
            individuo.diferencia_para_ganar = random.NextDouble() * 100;
            break;
        }
    }
示例#5
0
 public FluidIAIndividual EvaluarIndividuos(FluidIAIndividual individuo1, FluidIAIndividual individuo2)
 {
     //simulamos partida entre los dos individuos y devolvemos al ganador.
 }