Sistemas Inteligentes

Unidad 2: Búsqueda

Presentación de unidad

En esta unidad el estudiante podrá vincular la práctica y la teoría relacionada con los sistemas de búsqueda en una inteligencia artificial.

Debido a que la búsqueda es el núcleo de muchos procesos inteligentes, es adecuado estructurar los programas de IA de forma que se facilite describir y desarrollar el proceso de búsqueda. Los sistemas de producción proporcionan tales estructuras.

Un sistema de producción consiste en:

  • Un conjunto de reglas.
  • Una o más bases de datos/conocimiento.
  • Una estrategia de control que especifique el orden en el que las reglas se comparan con la base de datos, y la forma de resolver los conflictos que surjan cuando varias reglas puedan ser aplicadas a la vez.
  • Un aplicador de reglas.

El proceso de solución del problema puede modelarse como un sistema de producción. El problema que se plantea es escoger la estructura de control apropiada para el sistema de producción (base de datos, hechos, conocimiento o información sobre el problema, conjunto de reglas o aplicador) con el fin de que el proceso de búsqueda sea lo más eficiente posible.

Existen varias taxonomías de los sistemas de producción / búsqueda / estrategia de control (J. Molina, C. Torres, 2008):

  • Informada / no informada
  • Irrevocable / tentativa
  • Hacia adelante / hacia atrás / bidireccional

Objetivo de unidad

Al finalizar la unidad, el alumno podrá vincular la práctica y la teoría relacionada con los sistemas de búsqueda en una inteligencia artificial.

¡Bienvenidos a esta unidad!

Sistemas de Búsqueda

1. Búsqueda

La búsqueda en inteligencia pretende resolver los problemas o tareas complejas a través de algoritmos que garanticen la solución del problema o tarea. Los sistemas o las técnicas de búsqueda son una serie de esquemas de representación del conocimiento, que mediante diversos algoritmos nos permite resolver problemas desde el punto de vista de lA.

INTELIGENCIA ARTIFICIAL: Técnicas de Búsqueda en la Inteligencia artificial

2. Objetivos y Características Generales

Objetivos

  • Encontrar el camino óptimo entre la descripción del problema o estado inicial y el estado meta.
  • A veces basta con devolver el estado meta y no es necesario conocer todo el camino.

Características:

  • No dejar (a priori) ningún nodo sin explorar.
  • No explorar un nodo más de una vez.

A continuación se profundiza en las diferentes técnicas de búsqueda:

3. Búsqueda sin información del dominio (Búsqueda Ciega)

También se denominan técnicas de búsqueda ciega, porque realizan una búsqueda sistemática y objetiva (en el sentido de que el control del proceso no depende del problema concreto que se esté resolviendo).

Por el contrario las técnicas de búsqueda heurística realizan una búsqueda informada e intentan optimizar dicho proceso eligiendo los caminos que a priori van a suponer un menor coste.


3.1 Búsqueda en amplitud (Breadth-First Search)

Es aquella estrategia de control en la que se revisan todas las trayectorias de una determinada longitud antes de crear una trayectoria más larga. Es decir, no se genera ningún nodo de nivel N hasta que no se hayan obtenido todos los del nivel N-1.

Algoritmo de búsqueda en amplitud

  1. 1. Crear una lista de nodos llamada ABIERTA e “inicializarla” con un único nodo raíz, al que se le asigna el estado inicial del problema.
  2. 2. Hasta que ABIERTA esté vacía o se encuentre una meta realizar las siguientes acciones:
    1. 2.1. Extraer el primer nodo de ABIERTA y llamar a ese nodo m.
    2. 2.2. Expandir m (generar todos los sucesores). Para cada operador aplicable y cada forma de aplicación:
      1. a) Aplicar el operador a m, obtener un nuevo estado y crear un puntero que permita saber que su predecesor es m
      2. b) Si el nuevo estado generado es meta, salir del proceso iterativo iniciado en paso 2 y devolver dicho estado.
      3. c) Incluir el nuevo estado al final de ABIERTA (una vez completado este proceso para todos los sucesores de m - cuando no se haya encontrado una meta- se continúa el proceso iterativo en el paso 2).
Consideraciones del Algoritmo
  • En este algoritmo la lista ABIERTA va a funcionar como una cola FIFO (First-In, First-Out).
  • Los nodos que haya en ABIERTA serán aquellos que hayan sido generados, pero que todavía no han sido expandidos.
  • Los elementos que van a ser expandidos se toman al comienzo de la lista ABIERTA.
  • Sus sucesores se añaden al final.
  • De esta forma siempre se expandirán los nodos más antiguos.

Ventajas: si el problema tiene una solución este procedimiento garantiza el encontrarla. Si hubiera varias soluciones se obtiene la de menor coste (la óptima), es decir, la que requiere un menor número de pasos (si consideramos un coste uniforme de aplicación de los operadores)

Desventajas: si el nivel de profundidad asociado a la solución es significativamente menor que el factor de ramificación se expandirían demasiados nodos inútilmente. Por otro lado la principal desventaja de este método es el espacio de almacenamiento requerido. Esto lo hace prácticamente inviable para problemas complejos, como suelen ser los del mundo real.


3.2 Búsqueda en profundidad (Depth-First Search)

Es aquél procedimiento de control en el que se centra en expandir un único camino desde la raíz. En el caso de llegar a un callejón sin salida se retrocede hasta el nodo más cercano desde donde se puede tomar una ruta alternativa para poder seguir avanzando.

Para llevar a cabo este tipo de búsqueda debe utilizarse una estructura de tipo pila (LIFO - Last-In, First-Out) que vaya almacenando los nodos generados. Suele establecerse el llamado límite de exploración (lp), que marca la máxima longitud que puede alcanzar cualquier camino desde la raíz durante el proceso de búsqueda (J. Molina, C. Torres, 2008):


Algoritmo de búsqueda en profundidad

  1. 1. Crear una lista de nodos llamada ABIERTA e “inicializarla” con un único nodo raíz, al que se le asigna el estado inicial del problema.
  2. 2. Hasta que ABIERTA esté vacía o se encuentre una meta realizar las siguientes acciones:
    1. 2.1. Extraer el primer nodo de ABIERTA y llamar a ese nodo m.
    2. 2.2. Si la profundidad de m es igual a lp o si m no tiene más sucesores posibles (que no hayan sido examinados anteriormente), eliminarlo de ABIERTA y regresar al paso 2. En caso contrario, continuar.
    3. 2.3. Expandir m (generar todos los sucesores). Para cada operador aplicable y cada forma de aplicación:
      1. a) Aplicar el operador a m, obtener un nuevo estado y crear un puntero que permita saber que su predecesor es m.
      2. b) Si el nuevo estado generado meta, salir del proceso iterativo iniciado en el paso 2.1 y devolver dicho estado.
      3. c) Incluir el nuevo estado al principio de ABIERTA en un orden arbitrario.
        • Si algún sucesor de m es meta, abandonar el proceso iterativo señalado en 2.1 devolviendo el camino de la solución que se obtiene recorriendo los punteros de sus antepasados.
        • Si algún sucesor de m se encuentra en un callejón sin salida eliminarlo de ABIERTA y continuar en 2.2
  3. Ventajas: la principal ventaja de esta algoritmo radica en el reducido valor de su complejidad espacial. Cuando existen múltiples soluciones posibles la eficiencia del algoritmo aumenta.

    Desventajas: la dificultad estriba en el tiempo requerido. El algoritmo puede dedicarse a recorrer un camino demasiado largo que no conduzca a ninguna solución. Es más, si no se guarda constancia de los nodos que forman el camino recorrido se podría caer en ciclos y el proceso no acabaría.

    El Problema del Límite de Exploración (lp)

    El problema por tanto es determinar cuál debe ser lp. Si éste es inferior a la longitud real del camino de la solución, ésta nunca se encontraría, y si es mucho mayor sería ineficiente. Esta es la razón por la que lp debería llamarse límite de exploración.


3.3 Búsqueda con retroceso (Backtracking)

Es una técnica que a diferencia de los algoritmos en amplitud y en profundidad (que consideran todos los sucesores) solamente expande un sucesor en cada iteración, restringiendo por lo tanto el espacio de estados considerado.

Cuanto mejor sea el criterio para limitar el número de estados considerados más eficiente será el proceso de búsqueda.

Es decir, es como el recorrido en profundidad pero nos ahorramos tener que expandir todos los nodos para obtener sus sucesores. El camino sigue avanzando por ese sucesor, y si nos encontramos con un callejón sin salido retrocedemos hasta el primer antepasado desde el que todavía partan caminos inexplorados.


Algoritmo de búsqueda con retroceso

(Nota: El texto original no proporciona los pasos detallados para este algoritmo. Se recomienda añadir los pasos aquí para una explicación completa.)

Ventajas: la principal ventaja de esta algoritmo respecto al de profundidad es la de necesitar un menor espacio de almacenamiento. Sólo hay que recordar en cada instante un sucesor del nodo seleccionado. Otra ventaja es que no se generan las ramas del árbol que se encuentran después (a la derecha) de la solución.

Desventajas: Vuelve a ser el problema determinar cuál debe ser lp. Para conocer su valor deberíamos saber de antemano en qué nivel se encuentra la solución(J. Molina, C. Torres, 2008):.

2. Referencias

  • Benítez, A. (2007). Fundamentos de Inteligencia Artificial libro tercero. España: Escolar y mayo.
  • Escolano, F. (2003). Inteligencia Artificial (Modelos, Técnicas y Áreas de Aplicación) México: Thomson.
  • Marín, R. (2008). Inteligencia Artificial y sistemas inteligentes. España: McGraw-Hill.
  • Nilsson, N. (2001). Inteligencia artificial (Una nueva síntesis) México: McGraw–Hill.
  • Ponce, P. (2011). Inteligencia Artificial con aplicaciones a la ingeniería. España: MARCOMBO.
  • SEDU. (2018). Todo sobre inteligencia artificial. Ciudad de México.

Búsqueda Heurística

1. La Búsqueda Heurística y sus propiedades

Las técnicas de búsqueda heurística disponen de alguna información sobre la proximidad de cada estado a un estado objetivo, lo que permite explorar en primer lugar los caminos más prometedores.

Las características de las técnicas heurísticas:

  • No garantizan que se encuentre una solución, aunque existan soluciones.
  • Si encuentran una solución, no se asegura que ésta tenga las mejores propiedades (que sea de longitud mínima o de coste óptimo).
  • En algunas ocasiones (que, en general, no se podrán determinar a priori), encontrarán una solución (aceptablemente buena) en un tiempo razonable.

En general, las técnicas heurísticas son preferibles a los métodos no informados en la solución de problemas difíciles para los que una búsqueda exhaustiva necesitaría un tiempo demasiado grande. Esto cubre prácticamente la totalidad de los problemas reales que interesan en Inteligencia Artificial.

La información del problema concreto que estamos intentando resolver se suele expresar por medio de heurísticas.

El concepto de heurística es difícil de aprender. Newell, Shaw y Simon en 1963 dieron la siguiente definición: "Un proceso que puede resolver un problema dado, pero que no ofrece ninguna garantía de que lo hará, se llama una heurística para ese problema".

Si nos planteamos seguir concretando como aprovechar la información sobre el problema en sistemas de producción, la siguiente idea consiste en concentrar toda la información heurística en una única función que se denomina función de evaluación heurística. Se trata de una función que asocia a cada estado del espacio de estados una cierta cantidad numérica que evalúa de algún modo lo prometedor que es ese estado para acceder a un estado objetivo. Habitualmente, se denota esa función por h(e).

La función heurística puede tener dos interpretaciones. Por una parte, la función puede ser una estimación de lo próximo que se encuentra el estado de un estado objetivo. Bajo esta perspectiva, los estados de menor valor heurístico son los preferidos. Pero en otros casos puede suceder que lo que convenga sea maximizar esa función.

2. Ejemplos de funciones heurísticas

Veamos ejemplos de heurísticas para algunos problemas concretos. Para el problema del 8-puzzle tenemos la siguientes heurísticas:

  1. a) La basada en la distancia Manhattan (o distancia taxi). Se asocia a cada casilla un número que es la suma de las distancias horizontal y vertical a su posición en el tablero objetivo (esto es, la suma de diferencias de sus coordenadas x e y). La función heurística es la suma de las distancias de cada una de las casillas (excluyendo la que se encuentra vacía).

    2

    3

    1

    8

    4

    7

    6

    5

    Figura 1: 8-puzzle

    H = n(Ei) = 2 (1 de la casilla 1 más 1 de la casilla 8)

  2. b) Otra heurística, mucho más simple, consiste en contar el número de casillas que están fuera de su sitio (respecto al tablero objetivo). Es una heurística más pobre que la anterior, puesto que no usa la información relativa al esfuerzo (número de movimientos) necesario para llevar una pieza a su lugar.

Ejercicio:
Otra heurística posible para el 8-puzzle, si el estado objetivo es el recogido en la figura 1, es la siguiente: h(e) = 3 * seq(e), donde seq(e) cuenta 1 si hay un dígito central en e y 2 por cada dígito x no central que no es seguido (en el sentido de la agujas del reloj) por su sucesor x+1 (imponemos por convenio que 8 + 1 = 1).

  • Calcular el valor de esta heurística para los estados que aparecen en la tabla a figura 1.

3. El problema del agente viajero

  • El problema del viajante
    • Estado inicial: un viajante se encuentra en una capital de provincia.
    • Estado meta: quiere viajar a otra capital por la mejor ruta posible (la más corta).
    • Medios: Las capitales de provincia colindantes están unidas por carreteras; se dispone de un mapa con la disposición de las provincias y sus "coordenadas" en kilómetros respecto al "centro" (por ejemplo, Madrid, con coordenadas (0,0)).
  • Una función heurística para ese problema consiste en asignar a cada estado un valor que es la distancia aérea (en línea recta) con el estado objetivo. Dicha distancia es la distancia euclídea entre las coordenadas de dos ciudades.
  • Se elige una ciudad como siguiente en el camino cuando la suma de la distancia a la ciudad actual más la distancia aérea a la meta sea la menor.

  • Una persona quiere viajar de Madrid a Santander considerando el siguiente mapa de carreteras (J.Ramírez, L. Laureano-Cruces, 2015).
Ilustración 1 Mapa del Problema del Viajero
Ilustración 1 Mapa del Problema del Viajero
  • Cuatro alternativas en la primera etapa: Cáceres, Palencia, Zaragoza y Valencia.
  • Función heurística considerando la distancia aérea:
    • Distancia (Madrid, Santander) = Distancia(Madrid, Palencia) + Distancia aérea (Palencia, Santander) que es más pequeña que la obtenida a través de Cáceres
    • Distancia (Madrid,Santander) = Distancia(Madrid, Cáceres) + Distancia aérea (Cáceres, Santander)
  • Función heurística considerando distancias parciales: Distancia (Madrid, Santander) = Distancia(Madrid, Palencia) + Distancia (Palencia, Santander)

4. Referencias

  •  Benítez, A. (2007). Fundamentos de Inteligencia Artificial libro tercero. España: Escolar y mayo.
  • Escolano, F. (2003). Inteligencia Artificial (Modelos, Técnicas y Áreas de Aplicación) México: Thomson.
  • Marín, R. (2008). Inteligencia Artificial y sistemas inteligentes. España: McGraw-Hill.
  • Nilsson, N. (2001).  Inteligencia artificial (Una nueva síntesis) México: McGraw–Hill.
  • Ponce, P. (2011). Inteligencia Artificial con aplicaciones a la ingeniería. España: MARCOMBO.

Algoritmos Genéticos

1. Algoritmos Genéticos

Los algoritmos genéticos pertenecen a la computación evolutiva, son considerados también una técnica de inteligencia artificial. A través de millones de años, los organismos han evolucionado biológicamente para sobrevivir y crecer en un mundo cambiante.

Los materiales genéticos de todos los organismos vivos consisten de cromosomas que están divididos en genes; su codificación y desarrollo son considerados un proceso clave en la continuación de las especies. El proceso de selección natural y el sobrevivir de los más aptos son considerados elementos importantes en la evolución, que ha sido estudiada desde el siglo XVII. Los Algoritmos Genéticos están basados en estos aspectos de evolución.

Los algoritmos genéticos utilizan ideas de biología como población de cromosomas, selección natural para selección de pareja, cruza para producción de descendencia y mutación para diversidad. El punto importante de los algoritmos genéticos es la representación de un problema-solución que use un cromosoma de longitud constante o cambiante. La variable representada por la posición es un gen, y su valor se conoce como alelo. Una vez que obtenida la representación (codificado), es decir la manera en que el espacio de soluciones potenciales se transforma en el dominio de trabajo, la metodología de Algoritmos Genéticos puede ser aplicada para alcanzar una buena solución del problema. El codificado más popular por su simplicidad es el binario, donde los alelos son los valores de 0 ó 1. De ser necesario, el codificado basado en valor o de caracteres puede ser usado también. A pesar de que el codificado fijo es popular, los investigadores han usado uno que puede adaptarse para algunos problemas para mejorar los resultados.

El uso de los Algoritmos genéticos está relacionado con el concepto de Optimización, por lo que también es abordada, siendo el objetivo, maximizar el beneficio o minimizar el costo. Adicionalmente se muestran algunas aplicaciones de los algoritmos genéticos: escoger el arreglo de trabajos y de máquinas para minimizar el tiempo de producción, el problema del agente viajero, minimizar la cantidad de merma en el corte de madera, vidrio, entre otros; todos ellos problemas combinatorios que pueden modelarse a través de programación matemática pero que conforme crecen el número de variables no son factibles de resolverse en un tiempo computacional razonable; por lo que resulta interesante uso de los algoritmos genéticos.

Para poder explicar la estructura de los algoritmos genéticos voy a introducir primero algunos términos que serán útiles:

Individuo:  los individuos de nuestra población son las posibles soluciones al problema que estamos tratando.

Población: conjunto de individuos (soluciones).

Función fitness o de adaptación: función que evalúa a los individuos y les asigna una puntuación en función de lo buenas soluciones que sean para el problema.

Función de cruce: función que, dados dos individuos, genera dos ‘descendientes’ a partir de la combinación de genes de sus ‘padres’. Esta función se diseña especialmente para el problema que se esté tratando y, por lo general, se encarga de que los hijos sean mejores soluciones que los padres.

Entonces, la estructura de un algoritmo genético es la siguiente:

  1. Se genera una población inicial de individuos (soluciones), usualmente de manera aleatoria.
  2. Fase de evaluación: se evalúan los individuos de la población con la función fitness.
  3. Fase de selección: se seleccionan los mejores individuos.
  4. Fase de reproducción: se cruzan los individuos seleccionados mediante la función de cruce, dando lugar a una nueva generación que va a sustituir a la anterior.
  5. Fase de mutación: se introducen mutaciones (pequeños cambios) en ciertos individuos de la nueva población de manera aleatoria.
  6. Tenemos una nueva generación, generalmente, con soluciones mejores que la anterior. Volvemos al punto 2.

Los algoritmos genéticos finalizan o bien cuando alcanzan un número de generaciones concreto o cuando cumplen una condición de parada (M, Gestal, 2013).

A continuación, para ejemplificar, diagrama de flujo de un algoritmo genético.

Ilustración 2 Diagrama de flujo de un algoritmo genético
Ilustración 2 Diagrama de flujo de un algoritmo genético

2. Cierre de unidad

El hombre es el sistema del que mejor se conoce el cómo lleva a cabo las tareas con las que estamos familiarizados y por lo tanto tiene sentido fijarse en él para buscar pistas de cómo crear inteligencia artificial. Si lo que se quiere es escribir programas que simulen el comportamiento humano ante una tarea, la forma de medir el éxito está en que el comportamiento del programa corresponda con el humano, así como mediante distintas clases de experimentos y análisis de protocolos. Cuando se quiere diseñar un programa de IA, se debe intentar especificar tan bien como sea posible el criterio de éxito para el funcionamiento del programa en su particular y restringido dominio.

Para construir un sistema que resuelva un problema específico, es necesario realizar estas cuatro acciones:

  • Definir el problema con precisión.
  • La definición debe incluir especificaciones precisas tanto sobre las situaciones iniciales como sobre las situaciones finales que se aceptarían como soluciones al problema
  • Analizar el problema. Algunas características de gran importancia pueden tener un gran efecto sobre la conveniencia o no de utilizar diversas técnicas que resuelvan el problema.
  • Aislar y representar el conocimiento necesario para resolver el problema.
  • Elegir la mejor técnica de búsqueda que resuelva el problema y aplicarla al problema particular.

3. Referencias

  • Benitez, R., Escudero, G., Kannan, S. y Masip, R. (2010) Inteligencia Artificial Avanzada. España: UOC.
  • Pajares G. y Santos M. (2006). Inteligencia Artificial e Ingeniería del Conocimiento
  • Alfaomega. ISBN: 970-15-1166-2. Mexico. Rusell & Norving (2003). Inteligencia Artificial. Un enfoque moderno, Segunda Edición. Prentice Hall.
  • García Serrano, A. (2016) Inteligencia Artificial. Fundamentos, práctica y aplicaciones. México: Alfaomega.
  • Ponce Cruz, P. (2014) Inteligencia Artificial con aplicaciones en la Ingeniería. México: Alfaomega.

Algoritmos Genéticos 2

1. Algoritmo Genético

Los Algoritmos Genéticos (AGs) son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. Están basados en el proceso genético de los organismos vivos. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selección natural y la supervivencia de los más fuertes, postulados por Darwin. Por imitación de este proceso, los Algoritmos Genéticos son capaces de ir creando soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos del problema depende en buena medida de una adecuada codificación de las mismas.

Un algoritmo genético consiste en una función matemática o una rutina de software que toma como entradas a los ejemplares y retorna como salidas cuáles de ellos deben generar descendencia para la nueva generación.

Versiones más complejas de algoritmos genéticos generan un ciclo iterativo que directamente toma a la especie (el total de los ejemplares) y crea una nueva generación que reemplaza a la antigua una cantidad de veces determinada por su propio diseño. Una de sus características principales es la de ir perfeccionando su propia heurística en el proceso de ejecución, por lo que no requiere largos períodos de entrenamiento especializado por parte del ser humano, principal defecto de otros métodos para solucionar problemas, como los Sistemas Expertos.

  • Operan de forma simultánea con varias soluciones, en vez de trabajar de forma secuencial como las técnicas tradicionales.
  • Cuando se usan para problemas de optimización maximizar una función objetivo- resultan menos afectados por los máximos locales (falsas soluciones) que las técnicas tradicionales.
  • Resulta sumamente fácil ejecutarlos en las modernas arquitecturas masivamente paralelas.
  • Usan operadores probabilísticos, en vez de los típicos operadores determinísticos de las otras técnicas.
  • Pueden tardar mucho en converger, o no converger en absoluto, dependiendo en cierta medida de los parámetros que se utilicen tamaño de la población, número de generaciones, etc.-.
  • Pueden converger prematuramente debido a una serie de problemas de diversa índole.

2. Aplicación de los Algoritmos Genéticos

La aplicación más común de los algoritmos genéticos ha sido la solución de problemas de optimización, en donde han mostrado ser muy eficientes y confiables. Sin embargo, no todos los problemas pudieran ser apropiados para la técnica, y se recomienda en general tomar en cuenta las siguientes características del mismo antes de intentar usarla:

  • Su espacio de búsqueda (i.e., sus posibles soluciones) debe estar delimitado dentro de un cierto rango.
  • Debe poderse definir una función de aptitud que nos indique qué tan buena o mala es una cierta respuesta.
  • Las soluciones deben codificarse de una forma que resulte relativamente fácil de implementar en la computadora.

El primer punto es muy importante, y lo más recomendable es intentar resolver problemas que tengan espacios de búsqueda discretos aunque éstos sean muy grandes. Sin embargo, también podrá intentarse usar la técnica con espacios de búsqueda continuos, pero preferentemente cuando exista un rango de soluciones relativamente pequeño.

La función de aptitud no es más que la función objetivo de nuestro problema de optimización. El algoritmo genético únicamente maximiza, pero la minimización puede realizarse fácilmente utilizando el recíproco de la función maximizante (debe cuidarse, por supuesto, que el recíproco de la función no genere una división por cero). Una característica que debe tener esta función es que tiene ser capaz de "castigar" a las malas soluciones, y de "premiar" a las buenas, de forma que sean estas últimas las que se propaguen con mayor rapidez.

La codificación más común de las soluciones es a través de cadenas binarias, aunque se han utilizado también números reales y letras. El primero de estos esquemas ha gozado de mucha popularidad debido a que es el que propuso originalmente Holland, y además porque resulta muy sencillo de implementar

Como información para completar lo explicado en la secuencia sobre algoritmo genético, el desarrollo de software basados en A.G es importante para terminar de comprender la importancia de este con respecto a las búsquedas y temas anteriores, dirígete a la siguiente presentación en slideshare.

Nombre: Desarrollo de software con algorítmicos genéticos

Link: https://es.slideshare.net/uni_fcys_sistemas/desarollo-de-sofware-con-algoritmos-genticos

3. El Algoritmo Genético Simple

El Algoritmo Genético Simple, también denominado Canónico, se necesita una codificación o representación del problema, que resulte adecuada al mismo. Además se requiere una función de ajuste ó adaptación al problema, la cual asigna un número real a cada posible solución codificada. Durante la ejecución del algoritmo de más abajo, los padres deben ser seleccionados para la reproducción, a continuación dichos padres seleccionados se cruzaran generando dos hijos, sobre cada uno de los cuales actuará un operador de mutación.

El resultado de la combinación de las anteriores funciones será un conjunto de individuos (posibles soluciones al problema), los cuales en la evolución del Algoritmo Genético formaran parte de la siguiente población.

BEGIN /* Algoritmo Genético Simple */
  Generar una población inicial.
  Computar la función de evaluación de cada individuo.

  WHILE NOT Terminado DO

  BEGIN /* Producir nueva generación */
    FOR Tamaño población/2 DO

    BEGIN /*Ciclo Reproductivo */

      Seleccionar dos individuos de la anterior generación,
      para el cruce (probabilidad de selección proporcional
      a la función de evaluación del individuo).

      Cruzar con cierta probabilidad los dos
      individuos obteniendo dos descendientes.

      Mutar los dos descendientes con cierta probabilidad.

      Computar la función de evaluación de los dos
      descendientes mutados.

      Insertar los dos descendientes mutados en la nueva generación.

      END
      IF la población ha convergido THEN Terminado:= TRUE
  END
END
            

INICIO
    // Generar población inicial
    Generar una población inicial de individuos.
                  
    // Evaluar población inicial
    Evaluar la función de aptitud (fitness) de cada individuo.
                  
    MIENTRAS NO se cumpla la condición de parada HACER:
                  
        // Iniciar nueva generación
        PARA i = 1 HASTA (Tamaño de la población / 2) HACER:
                  
            // Selección
            Seleccionar dos individuos de la población actual.
            (La probabilidad de selección es proporcional a su aptitud).
                  
            // Cruce
            Con cierta probabilidad, cruzar los dos individuos seleccionados,
            produciendo dos descendientes.
                  
            // Mutación
            Con cierta probabilidad, mutar cada descendiente.
                  
            // Evaluar descendientes
            Evaluar la aptitud de los dos descendientes.
                  
            // Insertar en nueva generación
            Insertar los descendientes en la nueva población.
                  
        FIN PARA
                  
        // Comprobar convergencia
        SI la población ha convergido ENTONCES
            Terminar := VERDADERO
                  
    FIN MIENTRAS
                  
FIN
            

4. Referencias

  • Benítez, A. (2007). Fundamentos de Inteligencia Artificial libro tercero. España: Escolar y mayo.
  • Escolano, F. (2003). Inteligencia Artificial (Modelos, Técnicas y Áreas de Aplicación) México: Thomson.
  • Marín, R. (2008). Inteligencia Artificial y sistemas inteligentes. España: McGraw-Hill.
  • Nilsson, N. (2001). Inteligencia artificial (Una nueva síntesis) México: McGraw–Hill.
  • Ponce, P. (2011). Inteligencia Artificial con aplicaciones a la ingeniería. España: MARCOMBO.
  • Facultad de ciencias y sistemas. (2011). Desarrollo de software con algorítmicos genéticos. Sitio web: https://es.slideshare.net/uni_fcys_sistemas/desarollo-de-sofware-con-algoritmos-genticos

Algoritmos Genéticos 3

1. Algoritmo Genético

Los Algoritmos Genéticos (AGs) son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. Están basados en el proceso genético de los organismos vivos. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selección natural y la supervivencia de los más fuertes, postulados por Darwin. Por imitación de este proceso, los Algoritmos Genéticos son capaces de ir creando soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos del problema depende en buena medida de una adecuada codificación de las mismas.

Un algoritmo genético consiste en una función matemática o una rutina de software que toma como entradas a los ejemplares y retorna como salidas cuáles de ellos deben generar descendencia para la nueva generación.

Versiones más complejas de algoritmos genéticos generan un ciclo iterativo que directamente toma a la especie (el total de los ejemplares) y crea una nueva generación que reemplaza a la antigua una cantidad de veces determinada por su propio diseño. Una de sus características principales es la de ir perfeccionando su propia heurística en el proceso de ejecución, por lo que no requiere largos períodos de entrenamiento especializado por parte del ser humano, principal defecto de otros métodos para solucionar problemas, como los Sistemas Expertos.

  • Operan de forma simultánea con varias soluciones, en vez de trabajar de forma secuencial como las técnicas tradicionales.
  • Cuando se usan para problemas de optimización maximizar una función objetivo- resultan menos afectados por los máximos locales (falsas soluciones) que las técnicas tradicionales.
  • Resulta sumamente fácil ejecutarlos en las modernas arquitecturas masivamente paralelas.
  • Usan operadores probabilísticos, en vez de los típicos operadores determinísticos de las otras técnicas.
  • Pueden tardar mucho en converger, o no converger en absoluto, dependiendo en cierta medida de los parámetros que se utilicen tamaño de la población, número de generaciones, etc.-.
  • Pueden converger prematuramente debido a una serie de problemas de diversa índole.

2. Aplicación de los Algoritmos Genéticos

La aplicación más común de los algoritmos genéticos ha sido la solución de problemas de optimización, en donde han mostrado ser muy eficientes y confiables. Sin embargo, no todos los problemas pudieran ser apropiados para la técnica, y se recomienda en general tomar en cuenta las siguientes características del mismo antes de intentar usarla:

  • Su espacio de búsqueda (i.e., sus posibles soluciones) debe estar delimitado dentro de un cierto rango.
  • Debe poderse definir una función de aptitud que nos indique qué tan buena o mala es una cierta respuesta.
  • Las soluciones deben codificarse de una forma que resulte relativamente fácil de implementar en la computadora.

El primer punto es muy importante, y lo más recomendable es intentar resolver problemas que tengan espacios de búsqueda discretos aunque éstos sean muy grandes. Sin embargo, también podrá intentarse usar la técnica con espacios de búsqueda continuos, pero preferentemente cuando exista un rango de soluciones relativamente pequeño.

La función de aptitud no es más que la función objetivo de nuestro problema de optimización. El algoritmo genético únicamente maximiza, pero la minimización puede realizarse fácilmente utilizando el recíproco de la función maximizante (debe cuidarse, por supuesto, que el recíproco de la función no genere una división por cero). Una característica que debe tener esta función es que tiene ser capaz de "castigar" a las malas soluciones, y de "premiar" a las buenas, de forma que sean estas últimas las que se propaguen con mayor rapidez.

La codificación más común de las soluciones es a través de cadenas binarias, aunque se han utilizado también números reales y letras. El primero de estos esquemas ha gozado de mucha popularidad debido a que es el que propuso originalmente Holland, y además porque resulta muy sencillo de implementar.

Como información para completar lo explicado en la secuencia sobre algoritmo genético, el desarrollo de software basados en A.G es importante para terminar de comprender la importancia de este con respecto a las búsquedas y temas anteriores, dirígete a la siguiente presentación en slideshare.

Nombre: Desarrollo de software con algorítmicos genéticos

Link: https://es.slideshare.net/uni_fcys_sistemas/desarollo-de-sofware-con-algoritmos-genticos