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