Genetico.bas



rem MECANIA GENERAL DE LOS ALGORITMOS GENETICOS
Option Explicit
Private i, comp1, comp2, punto_cruce As Integer
Private j, tiro, pareja, num_gen As Integer
Private a, a_c, x, sum, CG As Double
Private gen(1 To 100, 0 To 18), gen_hijo(1 To 100, 0 To 19) As Integer
Private TETA(1 To 100), CR(1 To 100), CA(1 To 100), ind_sel(1 To 100) As Double

Private Sub Command1_Click()
Open "C:/curso_ag/pob_ini1" For Output As #1
Open "C:/curso_ag/fenotipos" For Output As #2
Open "C:/curso_ag/calificacion" For Output As #3
Open "C:/curso_ag/seleccion" For Output As #4
Print #1, "INDIVIDUO"; ",";
Rem MODULO POBLACION INICIAL
For j = 0 To 18
    Print #1, "G(IND/"; j; ")"; ",";
Next j
Print #1,
For i = 1 To 100
    Print #1, i; ",";
    For j = 0 To 18
        Randomize Timer
        x = Rnd
        If x <= 0.5 Then
                gen(i, j) = 0
            Else: gen(i, j) = 1
        End If
        Print #1, gen(i, j); ",";
    Next j
    Print #1,
Next i
Rem MODULO TRADUCTOR
Rem========================================
Print #2, "fenotipo_ind,TETA";
CG = 0
For i = 1 To 100
    sum = 0
    For j = 0 To 18
        sum = sum + gen(i, j) * (2 ^ j)
    Next j
    TETA(i) = 0.31415926 + sum * ((9 * 3.1415926) / (10 * (2 ^ 19 - 1)))
    Print #2,
    Print #2, i; ","; TETA(i);
Next i
Rem MODULO EVALUADOR
Rem========================================
Print #3, "ind, CA(i), CR(i), TETA(i), CG";
For i = 1 To 100
    Rem CALIFICACION ABSOLUTA
    CA(i) = Sin(TETA(i))
    Rem CALIFICACION DE LA GENERACION
    CG = CG + CA(i)
Next i
For i = 1 To 100
    CR(i) = CA(i) / CG
    Print #3,
    Print #3, i; ","; CA(i); ","; CR(i); ","; TETA(i); ","; CG;
Next i
Rem========================================
Rem MODULO SELECCION DE MEJORES INDIVIDUOS
Print #4, "Tiro, seleccion";
For tiro = 1 To 100
    Randomize Timer
    x = Rnd
    a = 0
    For i = 1 To 100
        If (a < x) And (x <= (CR(i) + a)) Then
            ind_sel(tiro) = i
            i = 100
        Else
            a = a + CR(i)
        End If
    Next i
    Print #4,
    Print #4, tiro; ","; ind_sel(tiro);
Next tiro
Rem=============================================
Rem MECANICA GENERAL DE LOS ALGORITMOS GENETICOS
Rem MODULO APAREADOR
For pareja = 0 To 50
    a_c = 1
    comp1 = 0
    comp2 = 0
    punto_cruce = 0
    While (comp1 = 0)
        Randomize Timer
        comp1 = Int(Rnd * 100)
    Wend
    While (comp2 = 0)
        Randomize Timer
        comp2 = Int(Rnd * 100)
    Wend
    While (punto_cruce = 0)
        Randomize Timer
        punto_cruce = Int(Rnd * 18)
    Wend
    Rem Genes del hijo 1
    Rem ------------------
    For num_gen = 1 To 19
        If a_c <= punto_cruce Then
            gen_hijo((2 * pareja - 1), (num_gen - 1)) = gen(ind_sel(comp1), (num_gen - 1))
        Else
            gen_hijo((2 * pareja - 1), (num_gen - 1)) = gen(ind_sel(comp2), (num_gen - 1))
        End If
        a_c = a_c + 1
    Next num_gen
    Rem Genes del hijo 2
    Rem __________________
    a_c = 1
    For num_gen = 1 To 19
        If a_c <= punto_cruce Then
            gen_hijo(2 * pareja, num_gen - 1) = gen(ind_sel(comp2), num_gen - 1)
        Else
            gen_hijo(2 * pareja, num_gen - 1) = gen(ind_sel(comp1), num_gen - 1)
        End If
        a_c = a_c + 1
    Next num_gen
Next pareja
Rem=============================================
Close

End Sub