INSTITUTO TECNOLÓGICO DE CHIHUAHUA II

Inteligencia artificial 2

Nombre: David Humberto Orquiz Ruelas Número de Control: 07550466 Carrera: ISC Tema: Algoritmo Genético Binario

Se implementara un algoritmo genético para obtener el valor mínimo de la siguiente función:

f(x,y)=4x2 +7(y í4)2 í4x +3y
Las restricciones serán las siguientes: 0”x”15 0”y”15 Nipop = 32 Reproducción= Rank Weighting Cruce Libre Convergencia Libre Sin mutación El algoritmo será realizado en Microsoft office Excel 2007. En la hoja numero 1 se generaran los números aleatorios para generar los cromosomas utilizados en el algoritmo. Con la formula ´=ALEATORIO.ENTRE (0,1)µ se llenaran las columnas necesarias para generar un numero binario con las restricciones antes mencionadas, y así será para generar los 32 que serán los valores de x en el cromosoma, así mismo se realizara el procedimiento para generar los números binarios para y.

Se insertaran dos botones los cuales copiaran los números binarios de 4 digitos generados y los pegara en la hoja siguiente, ( este procedimiento se realiza dado a que los números aleatorios se recalculan cada vez que se realiza una acción y hay que hacer un pegado especial para que esto no ocurra)

CutCopyMode = True Sheets ("hoja1").Select Range ("c4").Copy Sheets ("hoja3"). Range ("g2". "g33" & fila).CutCopyMode = True End Sub Se creara una tabla en la siguiente hoja para calcular los valores en decimal y sacar el costo con la función dada en las restricciones para el algoritmo.PasteSpecial Paste:=xlValues Application.Copy Sheets ("hoja3"). Range ("g36". .Select Range ("d4").Select End Sub Sub Botón6_Haga_clic_en () 'copiar números aleatorios para formar los cromosomas de la segunda variable.PasteSpecial Paste:=xlValues Application. "g67" & fila).El código de los botones será el siguiente: Sub Botón1_Haga_clic_en () 'copiar números aleatorios para formar los cromosomas de la primer variable.

A. Range("b4". .Select Range("b17").PasteSpecial End Sub Sub Botón3_Haga_clic_en() µNpop.Next.Select Sheets("hoja4").Copy 'ActiveSheet. El código para los botones mostrados en la imagen es el siguiente: Sub Hoja3_Botón2_Haga_clic_en() 'copiar tabla. "g35").DEC (C4)µ y µ =(4*E4^2)+(7*((F4-4)^2))-4*E4+3*F4µ para calcular el costo.Para sacar el valor decimal de x y de y se usara la siguiente fórmula: ´ =BIN.

PasteSpecial Paste:=xlValues Application.PasteSpecial Paste:=xlValues Application.Value b = Range("u1").Value b = Range("y1").Select Dim a As String Dim b As String a = Range("h17").CutCopyMode = True Range("c4").Select Range("g17".Value Sheets("hoja4").Copy Range("h17").CutCopyMode = True 'Range("c1").CutCopyMode = True Range("c4").Select Dim a As String Dim b As String a = Range("g17").Value Sheets("hoja4").Select . b & fila).Copy Range("t1").PasteSpecial Paste:=xlValues Application.Select End Sub Sub Botón4_Haga_clic_en() 'Ngood.Range("r1"). Range("v1").Copy Range("x1").

Value = Cells(a + 16.Value Then Cells(b + 16.Value a=1 Else a=a+1 . Sub Hoja4_Botón4_Haga_clic_en() Dim iRow As Integer Dim i As Integer Dim j As Integer Dim k As Integer b=1 a=1 k=1 iRow = Range("l6"). En la hoja siguiente se tendrán botones con el siguiente código que al igual que los anteriores van a ejecutarse también en el botón ejecutar.PasteSpecial Paste:=xlValues Application.Value For b = 1 To iRow If Cells(a + 16.Select End Sub En el botón ejecutar se encuentra el siguiente código en el cual se encuentran los procedimientos anteriores para que se ejecuten con solo presionarlo y no tener que hacerlo botón por botón. 15). 14). 16).Copy Range("i17"). 18).Range("h17". b & fila).Value >= Cells(b + 16.CutCopyMode = True 'Range("c1").

Sort Key1:=Range("bi17").Select Selection.Copy Range("o17"). MatchCase:=False. Sheets("hoja4").PasteSpecial Paste:=xlValues End Sub Sub Botón52_Haga_clic_en() 'ordenar.Copy Sheets("hoja4"). Header:=xlGuess. _ DataOption1:=xlSortNormal End Sub . Order1:=xlAscending.PasteSpecial Paste:=xlValues 'aleatorio para cruce Range("ab1").PasteSpecial Paste:=xlValues End Sub Sub Botón53_Haga_clic_en() 'copiar tabla hijos. "l48" & fila).Select Range("be17:bj80"). "bd80").b=b-1 End If Next End Sub Sub Hoja4_Botón5_Haga_clic_en() Range("l17". Orientation:=xlTopToBottom. _ OrderCustom:=1.Select Range("be17"). Range("az17".Copy Range("ac1").

Copy ActiveSheet.Previous.Previous.Add ActiveSheet.Next.Value = Cells(17.Value = Cells(17. 7). 5). 71).Next. "bs81").Select 'ActiveSheet. 69).Select 'Sheets("hoja4"). "bj81").Copy ActiveSheet.Value = Cells(17.Select 'Range("c17").Select Range("a1"). 6).El siguiente botón contiene el código encargado de generar cada iteración en el algoritmo hasta encontrar el valor mínimo de la función.PasteSpecial ActiveSheet.Value Cells(iter + 16. 70). Sub Botón55_Haga_clic_en() Dim iter As Integer For iter = 1 To 1000 Cells(iter + 16.Select Range("a1".Previous.Value 'copiar tabla.PasteSpecial '''''''''' . ' Sheets.Value Cells(iter + 16.Select 'Range("be17".

'''''''''''''''''''''' '''''''''''''''''''''' '''copiar tabla hijos. "v48"). _ .PasteSpecial Paste:=xlValues Application.Copy Range(b).CutCopyMode = True '''''''''''''''''''''' '''''''''''''''''''''' '''''''''''''''''''''' 'ordenar nueva tabla Range("b16:g48"). Order1:=xlAscending.Sort Key1:=Range("g16"). "w48"). "b100").Clear ''''' '''' Range("v17".Select Range("be17". "bj48").Select Selection.Copy Range("w17".CutCopyMode = True Range("b48".PasteSpecial Paste:=xlValues Application. a = Range("g17").Value b = Range("u2").Value 'Sheets("hoja4"). Header:=xlGuess.

Range("v1").PasteSpecial Paste:=xlValues Application.PasteSpecial Paste:=xlValues Application.OrderCustom:=1. Orientation:=xlTopToBottom.CutCopyMode = True '''''''''''''''''''''' 'npop Dim e As String Dim f As String Dim ff As String .Copy Range("x1").Copy Range("t1"). MatchCase:=False. _ DataOption1:=xlSortNormal '''''''''''''''''''''' '''''''''''''''''''''' 'copiar aleatorios Range("r1").CutCopyMode = True '''''''''' ''''''''' 'copiar aleatorios.

ClearContents 'Range("c1").CutCopyMode = True Range(dd.ClearContents 'Range("c1"). f & fila).Value 'Sheets("hoja4").Copy Range("i17").Select Range("g17".Value dd = Range("y2").Select Range("h17".PasteSpecial Paste:=xlValues Application.Copy Range("h17").Value 'Sheets("hoja4").Value f = Range("u1").Select 'Ngood.e = Range("g17"). d & fila).PasteSpecial Paste:=xlValues Application. "h50").Value d = Range("y1").Select .CutCopyMode = True Range(ff.Value ff = Range("u3"). Dim c As String Dim d As String Dim dd As String c = Range("h17"). "i50").

Value For i = 1 To iRow If Cells(j + 16. "l48" & fila).Value >= Cells(i + 16. 15). 14).Copy Range("ac1").PasteSpecial Paste:=xlValues 'metodo rank weighting Dim iRow As Integer Dim i As Integer Dim j As Integer Dim k As Integer i=1 j=1 k=1 iRow = Range("l6").PasteSpecial Paste:=xlValues 'aleatorio para cruce Range("ab1").Copy Range("o17").Value Then .'''''''''''' ''''''''''''''' ''''''''''''''''''' Range("l17".

Select Selection. Range("az17".Copy Range("be17"). "bd80").Value = Cells(j + 16.PasteSpecial Paste:=xlValues '''''''''''' '''''''''''''''' 'ordenar.Cells(i + 16.Value Range(gg. Order1:=xlAscending.Sort Key1:=Range("bi17"). 16). Header:=xlGuess.ClearContents '''''''''''''' 'copiar tabla hijos. "p50").Value j=1 Else j=j+1 i=i-1 End If Next Dim gg As String gg = Range("n6"). _ . 18). Range("be17:bj80").

xlsx".xls". "") fichero = Replace(fichero.Select .PasteSpecial On Error Resume Next 'Ocultamos el procedimiento Application. "bs81"). "") 'seleccionamos la hoja activa ActiveSheet. Orientation:=xlTopToBottom. _ DataOption1:=xlSortNormal If Range("bn17") = Range("g17") Then Range("bo17".Copy Sheets.OrderCustom:=1. MatchCase:=False. ".Add Range("a1").Select Selection.Copy Selection.Path 'Quitamos la extenxión de excel fichero = Replace(fichero.ScreenUpdating = False 'copiamos la hoja activa en un nuevo libro ActiveSheet. ".PasteSpecial Paste:=xlPaste 'Nos quedamos con el nombre del 'fichero y la ruta donde está fichero = ThisWorkbook.Name ruta = ThisWorkbook.Copy 'copiamos y pegamos los valores Cells.

'omitimos los mensajes de aviso Application. FileFormat:=xlText 'cerramos el fichero de texto ActiveWorkbook. .ScreenUpdating = True End If If Range("bn17") = Range("g17") Then Exit For Next '''''''''' End Sub Algunas de las celdas van a tener formulas para agilizar el trabajo del algoritmo. A continuación se enlistara la columna con la formula insertada en cada una de sus celdas.DisplayAlerts = False 'guardamos el fichero de texto acomodado 'en el mismo directorio donde tenemos el 'fichero de excel normal ActiveWorkbook. (hay columnas auxiliares).Close 'Mostramos el procedimiento Application.SaveAs Filename:=ruta & "###BOT_TEXT###quot; & "salida" & ".txt".

R17) =ALEATORIO() =($L$6-R17+1)/SI(R17<=$L$6.I:I.((($L$6+1)/2)*$L$6)) PN acumulado =M17 Ngood X =I:I =BUSCAR(S17.T:T) =BUSCAR(Y17.R:R.R:R.R:R.2*R17-1.MENOR($J$17:$J$48.R:R.P:P) .FALSO) =BUSCAR(X17.U:U) =SI(R17*2<=$L$6.2*R17.ESIMO. =SI(H17<>I17.FALSO) =BUSCAR(AB17.7) =SI(R17*2<=$L$6.I:I.ENTRE(2.Nbada.D:D) =ALEATORIO.H17) Nbad Ngood*al Pn formula =K.P:P) =BUSCAR(Y17.C:C) Y Col v Col x Padre x y col AB Padre2 =BUSCAR(S17.

R:R.DEC(AS17) =BIN.5.1.W17.W17.4) Yhijo1 Decimalx1 Decimaly2 Xhijo2 Yhijo2 Decimalx1 Decimaly2 =EXTRAE(AM17.DEC(AT17) .A.1.DEC(AP17) =EXTRAE(AN17.R:R.T:T) =BUSCAR(AC17.X Y Padre1 Padre2 Padre1a Padre1b Padre2a Padre2b Hijo1 Hijo2 Xhijo1 =BUSCAR(AC17.4) =EXTRAE(AN17.8) =BIN.8) =AH17&AK17 =AJ17&AI17 =EXTRAE(AM17.1.8) =EXTRAE(AG17.DEC(AO17) =BIN.5.W17-1) =EXTRAE(AF17.W17-1) =EXTRAE(AG17.1.A.8) =BIN.U:U) =Z17&AA17 =AD17&AE17 =EXTRAE(AF17.A.A.

Costo1 Costo2 Xhijo1 Yhijo1 Decimalx1 Decimaly2 =(4*AQ17^2)+(7*((AR17-4)^2))-4*AQ17+3*AR17 =(4*AU17^2)+(7*((AV17-4)^2))-4*AU17+3*AV17 =AO17 =AP17 =AQ17 =AR17 .

DEC."")) =SI(BR17>0. ' Define el archivo de ayuda.HLP" Ctxt = 1000 ' Define el título.Costo1 Col BJ =AW17 =SI. Ctxt.ERROR(SI(G17=0.BK17) Col BM Promedio Col BO Col BP =SI."".4). ' Define el tema .ERROR(BI17.MENOR(BJ17:BJ81."") =PROMEDIO(BM:BM) =SI(BQ17>0.DEC. ' Define los botones."")) Todos los métodos de los botones anteriores sirven para realizar paso por paso el algoritmo. Título.G17).SI(BR17=0.SI(BQ17=0.A.txt se agregan en un botón que se muestra con un mensaje justo al activar los macros de Excel.BIN(BR17.ESIMO.FALSO) Número menor =K. MiCadena Mensaje = "¿Desea continuar?" ' Define el mensaje.4). Estilo.BIN(BQ17. Respuesta. Para ejecutar el algoritmo desde que abrimos el documento y para que sean creados los archivos . Estilo = vbYesNo + vbCritical + vbDefaultButton2 Título = "Demostración de MsgBox" Ayuda = "DEMO. El código del botón principal es el siguiente: Sub auto_open() Dim Mensaje. Ayuda.A.

Respuesta = MsgBox(Mensaje. Ctxt) If Respuesta = vbYes Then '''' 'copiar numeros aleatorios para formar los cromosomas de la primer variable.Select .Copy 'copiamos y pegamos los valores Cells.PasteSpecial Paste:=xlValues Application.' el contexto ' Muestra el mensaje.Select Range("d4").PasteSpecial Paste:=xlValues Application. Range("g2".Select ''' 'copiar numeros aleatorios para formar los cromosomas de la segunda variable. "g33" & fila). Título.CutCopyMode = True Sheets("hoja1"). "g67" & fila).ScreenUpdating = False 'copiamos la hoja activa en un nuevo libro ActiveSheet.Copy Sheets("hoja3").CutCopyMode = True ''' On Error Resume Next 'Ocultamos el procedimiento Application. Range("g36".Copy Sheets("hoja3"). Estilo.Select Range("c4"). Ayuda.

Selection.OnTime Now + TimeValue("00:00:002"). FileFormat:=xlText 'cerramos el fichero de texto ActiveWorkbook.ScreenUpdating = True Application.xls".xlsx". "Hoja3_Botón1_Haga_clic_en" Application.DisplayAlerts = False 'guardamos el fichero de texto acomodado 'en el mismo directorio donde tenemos el 'fichero de excel normal ActiveWorkbook. "Hoja3_Botón2_Haga_clic_en" Application.Select 'omitimos los mensajes de aviso Application.OnTime Now + TimeValue("00:00:001").Path 'Quitamos la extenxión de excel fichero = Replace(fichero.txt".SaveAs Filename:=ruta & "###BOT_TEXT###quot; & "poblacioninIcial" & ".OnTime Now + TimeValue("00:00:003").Name ruta = ThisWorkbook. "") fichero = Replace(fichero. "Botón3_Haga_clic_en" . ". "") 'seleccionamos la hoja activa ActiveSheet.PasteSpecial Paste:=xlPaste 'Nos quedamos con el nombre del 'fichero y la ruta donde está fichero = ThisWorkbook.Close 'Mostramos el procedimiento Application. ".Copy Selection.

"Hoja4_Botón4_Haga_clic_en" Application.Select End If End Sub Al terminar las iteraciones se generaran dos archivos de texto.OnTime Now + TimeValue("00:00:009").Application. "Botón4_Haga_clic_en" Application.OnTime Now + TimeValue("00:00:006"). el primero con el nombreµ poblacionInicialµ.OnTime Now + TimeValue("00:00:007"). ya sea el mínimo de una ecuación. En conclusión se obtiene que al generar nuevos descendientes de una población aleatoria podemos encontrar el resultado que estemos buscando.OnTime Now + TimeValue("00:00:008").OnTime Now + TimeValue("00:00:005"). "Hoja4_Botón5_Haga_clic_en" Application. "Botón52_Haga_clic_en" Application. el máximo de una ecuación u otros resultados que estemos buscando.OnTime Now + TimeValue("00:00:004"). "Botón53_Haga_clic_en" Application. .OnTime Now + TimeValue("00:00:010"). El segundo archivo de texto se llamara ´Salidaµ y en él se encontraran los cromosomas con el menor costo de cada iteración. en el se encontrara la tabla con los primeros cromosomas y sus costos que fueron creados con la unión de números aleatorios entre 0 y 1. "Botón55_Haga_clic_en" '''''''' Else Range("A1"). "Hoja4_Botón3_Haga_clic_en" Application.