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