lunes, 18 de febrero de 2013

Tecnicas Heuristicas


Se puede definir Heurística como un arte, técnica o procedimiento práctico o informal, para resolver problemas. Alternativamente, se puede definir como un conjunto de reglas metodológicas no necesariamente formalizadas, positivas y negativas, que sugieren o establecen cómo proceder y problemas a evitar a la hora de generar soluciones y elaborar hipótesis.
Es generalmente considerado que la capacidad heurística es un rasgo característico de los humanos desde cuyo punto de vista puede describirse como el arte y la ciencia del descubrimiento y de la invención o de resolver problemas mediante la creatividad y el pensamiento lateral o pensamiento divergente. Según el matemático George Pólya la base de la heurística está en la experiencia de resolver problemas y en ver cómo otros lo hacen. Consecuentemente se dice que hay búsquedas ciegas, búsquedas heurísticas (basadas en la experiencia) y búsquedas racionales.

La palabra heurística procede del término griego εὑρίσκειν, que significa «hallar, inventar» (etimología que comparte con Eureka). La palabra «heurística» aparece en más de una categoría gramatical. Cuando se usa como sustantivo, identifica el arte o la ciencia del descubrimiento, una disciplina susceptible de ser investigada formalmente. Cuando aparece como adjetivo, se refiere a cosas más concretas, como estrategias heurísticas, reglas heurísticas o silogismos y conclusiones heurísticas. Claro está que estos dos usos están íntimamente relacionados ya que la heurística usualmente propone estrategias heurísticas que guían el descubrimiento.
La robótica trata de cubrir todos los temas necesarios para programar un robot con inteligencia artificial en aplicaciones de sensado y planificación de rutas para dar solución a un problema. A través del tiempo, el campo de la robótica se ha transformado, al pasar de máquinas rústicas hasta la construcción de humanoides, que permiten resolver tareas sencillas o complicadas.
Algunos de estos robots, se han construido basándose en el comportamiento de seres vivos dándole un toque sutil del raciocinio. No sólo la parte física y de comportamiento se ha basado en la vida, sino también los algoritmos que controlan dichos robots, los cuales nos dan una mayor posibilidad de encontrar soluciones a problemas difíciles de resolver para el ser humano.

Algunas de las técnicas que involucran procedimientos de búsqueda en el espacio de soluciones factibles.

Búsqueda local.
Los algoritmos de búsqueda local parten de una solución inicial  y aplicándole operadores de variación, la van alterando; si la solución alterada es mejor que la original, se acepta, si no lo es, se vuelve a la inicial. El procedimiento se repite hasta que no se consigue mejora en la solución. Los procedimientos de búsqueda local más usados son los basados en el gradiente: en este caso, el operador de variación selecciona una nueva solución teniendo en cuenta la derivada de la función que se quiere optimizar en el punto, tratando de ascender o descender usando el gradiente hasta llegar a un punto de inflexión donde no se puede obtener ninguna mejora adicional.

Métodos que usan soluciones parciales.
Estos métodos van construyendo soluciones variables a variable, no obteniendo una solución completa al problema hasta que todas las variables han sido asignadas. Uno de los métodos más conocidos son los algoritmos voraces o greedy, que funcionan de la forma siguiente: para cada variable, se asigna aquél valor que maximice alguna función de utilidad.
En el caso del TSP, un algoritmo voraz comenzaría con una ciudad elegida aleatoriamente, y elegiría la ciudad más cercana a ésta. Para esta segunda ciudad, elegiría la más cercana, y así sucesivamente.
En este caso, el problema estaría simplemente parametrizado con la ciudad inicial elegida. Los algoritmos voraces sustituyen un criterio de optimalidad global por un criterio en cada paso; no siempre los dos se corresponden, y por tanto, no tienen porqué hallar el máximo global del problema.
Otros métodos consisten en dividir el problema general en problemas más simples, y hallar la solución a estos problemas más simples; el método se denomina divide y vencerás; en algunos casos, la solución a un problema de orden n puede venir resolver a otro problema de orden n-1, tal como sucede, por ejemplo en el conocido problema de las torres de Hanói. Ejemplo branch and bound. Algunos métodos consisten en ir descartando partes del espacio de búsqueda, con el objeto de acotar cada vez más la solución al problema.
El branch and bound. Este método imagina el espacio de búsqueda como un árbol de decisión; en cada paso del algoritmo, se toma la decisión de podar las ramas del árbol que parezcan menos prometedoras.
Este método procede de la forma siguiente: se establece una cota inferior a la posible solución (o superior, si se trata de minimizar). Se va siguiendo una rama del árbol, hasta que se encuentra que la solución parcial es menor que esa cuota; en ese caso, se descarta la rama completa.

En el caso del recorrido del viajante, supongamos que hemos establecido que la cota superior es 200 Km. Se establece un árbol de la forma siguiente: tomando una ruta entre dos ciudades, pongamos AB, se establecen dos ramas para una posible solución con y sin esa ruta; a partir de ahí, se hace lo mismo con el resto de las rutas.
Se van recorriendo las ramas, y si se encuentra que la suma parcial de las rutas supera los 200 Km, se elimina esa rama y ya no se sigue recorriendo. Si se ha organizado el espacio de búsqueda en forma de árbol, puede resultar importante la ordenación de las ramas, porque si se consigue colocar las ramas "mejores" antes, el algoritmo será capaz de encontrar la solución con más rapidez. Algoritmos como él A* toman este tipo de enfoque. En este algoritmo, se usa un método mejor-primero para recorrer las ramas, y un método heurístico para estimar el coste de las ramas que quedan por recorrer. La principal diferencia con el método anterior es que se usan heurísticas para estimar valores de las ramas restantes, en vez de valores exactos.
Estos métodos se pueden extender también a problemas de optimización numérica, en cuyo caso
darían cotas entre las cuales se moverían las soluciones. Pero si el espacio de búsqueda no se puede enumerar bien, o si existe un número de variables excesivo, este tipo de algoritmos no suelen funcionar bien.

Hillclimbing
Estos procedimientos se suelen llamar de hillclimbing, o de escalado de colinas; el mayor truco en ellos consiste en escoger correctamente el tamaño de paso para ascender y el punto de inicio. Pero se trata de algoritmos de búsqueda locales, y, como tales, sólo van a encontrar el máximo local más cercano al punto de inicio.  Esto se puede resolver usando una estrategia de multicomienzo, pero, en todo caso, no te garantizan que se encuentre, o incluso de acerque uno, al máximo global. En todo caso, tiene la ventaja de que, en cada iteración del algoritmo, se tiene una solución válida, aunque no tiene porqué ser la mejor. En el caso del TSP, un procedimiento de búsqueda local se denomina 2-opt. Consiste en escoger una permutación inicial aleatoria, e ir probando con todas las posibles soluciones en la vecindad de esta, entendiendo como vecindad el conjunto de todos los recorridos que pueden ser alcanzados intercambiando dos caminos no adyacentes en el recorrido original. Un recorrido reemplaza al original si es mejor; una vez que no se puede mejorar un recorrido, se considera óptimo y se da como solución.
El mejor algoritmo de búsqueda local conocido para el recorrido del viajante es el llamado Lin-Kernighan. Es una variación del anterior, permitiendo el número de caminos a intercambiar en cada iteración variar; además, en vez de tomar cualquier mejora, prueba varias y se queda con la mejora de más valor.

Recocido Simulado
El recocido simulado o algoritmo de los Dioses (es un escalador estocástico). Se basa en el proceso de recocido, en la cual los metales se funden y se forjan a la par que se enfrían, hasta conseguir una estructura cristalina, dura y resistente.
Éste método realiza una búsqueda global que requiere de una “temperatura” inicial, una final y una función de variación de la temperatura. Consiste en un ascenso de gradiente comenzando en un punto aleatorio; dependiendo de la temperatura es como se mueve por el espacio de búsqueda. La probabilidad de escoger una solución peor que la actual, desciende con el tiempo; la solución (se aproxima a la solución óptima) se escoge de manera determinista evitando los mínimos locales.

Iteración básica
En cada iteración, el método de recocido simulado evalúa algunos vecinos del estado actual s y probabilísticamente decide entre efectuar una transición a un nuevo estado s' o quedarse en el estados. En el ejemplo de recocido de metales descrito arriba, el estado s se podría definir en función de la posición de todos los átomos del material en el momento actual; el desplazamiento de un átomo se consideraría como un estado vecino del primero en este ejemplo. Típicamente la comparación entre estados vecinos se repite hasta que se encuentre un estado óptimo que minimice la energía del sistema o hasta que se cumpla cierto tiempo computacional u otras condiciones.

Vecindario de un estado
El vecindario de un estados está compuesto por todos los estados a los que se pueda llegar a partir de s mediante un cambio en la conformación del sistema. Los estados vecinos son generados mediante métodos de Montecarlo.
El método de evaluación de estados vecinos es fundamental para encontrar una solución óptima global al problema dado. Los algoritmos heurísticos, basados en buscar siempre un estado vecino mejor (con energía más baja) que el actual se detienen en el momento que encuentran un mínimo local de energía. El problema con este método es que no puede asegurar que la solución encontrada sea un óptimo global, pues el espacio de búsqueda explorado no abarca todas las posibles variaciones del sistema.

Búsqueda Tabú

La búsqueda tabú fue propuesta por Glover, Taillard y de Werra. El método es utilizado para resolver problemas complejos de optimización. Esta técnica, en realidad es una meta-heurística,
que guiará a otras técnicas para que no se quede en óptimos locales. También ayuda a la resolución de problemas combinatorios.
La búsqueda Tabú, explora el espacio de búsqueda de todas las soluciones por medio de movimientos que se harán sólo si la solución siguiente es mejor que la anterior. Para que esta técnica no quede atrapada en un óptimo local o se generen movimientos cíclicos la búsqueda tabú utiliza una “memoria” (lista taboo) en donde se almacenan las soluciones examinadas recientemente, volviéndose prohibidas para el siguiente movimiento que se realizará. También, registra los atributos más comunes de un conjunto de soluciones para buscar en la zona que le corresponde y a largo plazo se extiende sobre regiones no exploradas.

Conceptos Básicos de Búsqueda Tabú

Los orígenes de la búsqueda tabú se ubican a fines de los 60s y principios de los 70s, y se atribuye a Fred Glover, quien desarrolló esta heurística para tratar de resolver problemas de cubierta no lineal (nonlinear covering), aunque varios de sus principios también fueron delineados independientemente por P. Hansen. La búsqueda tabú surgió como un dispositivo que permitiría implementar una estrategia para resolver problemas de programación entera con restricciones sustitutas (surro-gate constraints),  y aunque su planteamiento original ha sufrido varios cambios a través de los años, la idea básica propuesta por Glover ha permanecido intacta desde sus orígenes.
La búsqueda tabú puede verse como una meta-heurística que se superpone a una técnica de búsqueda y que se encarga de evitar que dicha técnica caiga en óptimos locales prohibiendo (o, en un sentido más general, penalizando) ciertos movimientos. El propósito de clasificar ciertos movimientos como prohibidos (o "tabú") es para evitar que se caiga en ciclos durante la búsqueda. 
Debido a esto, Glover sugiere como nombre alternativo para su método el de búsqueda con "inhibición débil", ya que los movimientos que se consideran prohibidos constituyen generalmente una pequeña fracción del total de movimientos disponibles, y un movimiento pierde su status de prohibido después de un período de tiempo relativamente corto, volviéndose después nuevamente accesible. A este respecto, este método puede contrastarse con la técnica de ramificación y límites (branch and bound) que también prohíbe ciertos movimientos para evitar ciclos, pero lo hace de una manera
La búsqueda tabú se encuentra fundamentada en 3 cosas principales:
1. El uso de estructuras flexibles de memoria basadas en atributos, diseñadas para permitir una mejor explotación de los criterios de evaluación y la información histórica de la búsqueda que lo que se conseguiría con estructuras rígidas de memoria (como las que se usan en la búsqueda de ramificación y límites y el algoritmo A*) o con sistemas carentes de memoria (como la técnica de "enfriamiento simulado" simulated annealing y otras técnicas aleatorias similares).
2. Un mecanismo asociado de control (para emplear las estructuras de memoria) basado en la interacción entre las condiciones que limitan y hacen más flexible el proceso de búsqueda. Este mecanismo se encuentra inmerso en la técnica en la forma de restricciones y criterios de aspiración (un criterio de aspiración es aquél que permite que un movimiento pierda su status de "tabú" debido a que proporciona una mejor solución que la actual).
3. La incorporación de memorias de diferente duración (de corto a largo plazo), para implementar estrategias que intensifiquen y diversifiquen la búsqueda. Las estrategias de intensificación refuerzan las propiedades de las combinaciones de movimientos que han demostrado (históricamente) ser buenas, mientras que las estrategias de diversificación dirigen la búsqueda hacia nuevas regiones del espacio de soluciones factibles. Note que estos dos mecanismos son muy similares a la cruza y la mutación en los algoritmos genéticos, ya que la primera nos permite delimitar una cierta región del espacio de búsqueda, mientras que la segunda nos permite saltar a nuevas regiones del mismo, evitando que quedemos atrapados en un óptimo local.
La parte medular de la búsqueda tabú se localiza en el proceso de memoria de corto plazo, y muchas de las consideraciones estratégicas en que se fundamenta este proceso reaparecen, amplifica-das pero sin mayores modificaciones, en los procesos de memoria de largo plazo.

Ejemplo de Uso

Para ilustrar el funcionamiento de esta técnica, utilizaremos un ejemplo clásico de estructuras de datos e Inteligencia Artificial: el problema de las N reinas. La idea básica es colocar N reinas en un tablero de ajedrez de N×N casillas, de tal manera que ninguna de ellas pueda capturar a otra.
Este problema puede verse como uno de optimización en el que el objetivo es minimizar el número de colisiones (una colisión se presenta cuando una reina puede capturar a otra). Si asumimos que cada reina se colocará siempre en una fila determinada de acuerdo a un cierto orden pre-establecido, podemos representar cualquier estado del tablero usando una permutación de la forma (p1, p2,..., pn), donde el valor de p1 representa la columna donde se colocará a  la reina que está en la fila 1, y así sucesivamente.
Una de las operaciones básicas que el algoritmo utilizará es el intercambio de 2 elementos cualquiera de una permutación en la que haya colisiones. A fin de evitar la repetición de intercambios realizados recientemente, consideraremos tabú cualquier intercambio de este tipo. Debido a condiciones de simetría (intercambiar las reinas 1 y 4 es lo mismo que intercambiar las reinas 4 y 1), una estructura puede usarse para almacenar el número de iteraciones que faltan para permitir que 2 reinas intercambien posiciones nuevamente.

La restricción de los intercambios de 2 reinas puede ser ignorada si un cierto movimiento (prohibido) conduce a una mejor solución (este es el criterio de aspiración).

Escalando la colina

Esta técnica se basa en optimización local, sigue la dirección de ascenso o descenso a partir de su posición y requiere muy poco costo computacional. Su comportamiento es irrevocable porque no permite regresarnos a otra alterativa.
La técnica de escalando la colina, evalúa la función en varios puntos, pasando de un punto a otro donde el valor de la evaluación es mayor. La búsqueda termina cuando se ha encontrado el punto con un valor máximo, por lo que no se obtendría la mejor solución.

Algoritmos Bio-inspirados

Son propuestas inspiradas en modelos biológicos, tales como Algoritmos de Optimización basada en Colonias de Hormigas, Algoritmos basados en Enjambres (de abejas, termitas) y Computación Evolutiva. Basan su operación en los principios de la teoría Neo-Darwiniana de la evolución natural. Los problemas combinatoriales pueden ser divididos en dos grandes grupos considerando la existencia de algoritmos polinomiales para resolver cada tipo de problema. El primero es el problema tipo P (polinomial) para el cual existen algoritmos con esfuerzos computacionales de tipo polinomial para encontrar la solución óptima; y el segundo es el problema tipo NP (no polinomial) para el cual no se conocen algoritmos con esfuerzos computacionales de tipo polinomial para encontrar la solución óptima. Las técnicas heurísticas son algoritmos que encuentran soluciones de buena calidad para problemas combinatoriales complejos; o sea, para problemas tipo NP. Los algoritmos heurísticos son más fáciles de implementar y encuentran buenas soluciones con esfuerzos computacionales relativamente pequeños;  sin embargo, renuncian (desde el punto de vista teórico) a encontrar la solución óptima global de un problema.
En problemas de gran tamaño rara vez un algoritmo heurístico encuentra la solución óptima global. Los algoritmos heurísticos se clasifican en algoritmos constructivos (golosos), algoritmos de descomposición y división, algoritmos de reducción, algoritmos de manipulación del modelo y algoritmos de búsqueda usando vecindad. En esta última categoría pueden ser agrupados los Algoritmos Genéticos (AG),
 Simulated Annealing (SA),
Búsqueda Tabú (TS), Colonia de
Hormigas (ACO) y GRASP, [4, 5].
Algoritmos Genéticos (AG)

Son herramientas matemáticas que imitan a la naturaleza e intentan resolver problemas complejos empleando el concepto de la evolución. El algoritmo ejecuta una búsqueda simultánea en diferentes regiones del espacio factible, realiza una intensificación sobre algunas de ellas y explora otros subespacios a través de un intercambio de información entre configuraciones. Emplea tres mecanismos básicos que son: La selección, el crossover y la mutación, [4, 5]:

Algoritmos Genéticos:
En forma aleatoria se conformó una población inicial, en la que cada cromosoma representa una posible ruta a seguir y cada gen indica el número de la ciudad.
Los datos utilizados por el algoritmo son:
Población inicial: 14 cromosomas (aleatoria)
Número de genes por cromosoma: 8
Proceso de selección: Esquema de la ruleta
Tipo de crossover: Punto simple
Tasa de crossover: ρc = 0.9
Tasa de mutación: ρm = 0.02
Máximo número de generaciones: 400
Criterio de parada: 20 generaciones consecutivas sin que mejore la función objetivo o máximo número de generaciones.
Los resultados encontrados por el algoritmo de AG son:
Ruta óptima: 1 4 8 7 6 5 3 2
Función objetivo: 1490
Total de generaciones: 125

Crossover

Consiste en el intercambio de material genético entre dos cromosomas (a veces más, como el operador orgía propuesto por Eiben et al.). El crossover es el principal operador genético, hasta el punto que se puede decir que no es un algoritmo genético si no tiene crossover, y, sin embargo, puede serlo perfectamente sin mutación, según descubrió Holland. El teorema de los esquemas confía en él para hallar la mejor solución a un problema, combinando soluciones parciales.

Para aplicar el crossover, entrecruzamiento o recombinación, se escogen aleatoriamente dos miembros de la población. No pasa nada si se emparejan dos descendientes de los mismos padres; ello garantiza la perpetuación de un individuo con buena puntuación (y, además, algo parecido ocurre en la realidad; es una práctica utilizada, por ejemplo, en la cría de ganado, llamada inbreeding, y destinada a potenciar ciertas características frente a otras). Sin embargo, si esto sucede demasiado a menudo, puede crear problemas: toda la población puede aparecer dominada por los descendientes de algún gen, que, además, puede tener caracteres no deseados. Esto se suele denominar en otros métodos de optimización atranque en un mínimo local, y es uno de los principales problemas con los que se enfrentan los que aplican algoritmos genéticos.

En cuanto al teorema de los esquemas, se basa en la noción de bloques de construcción. Una buena solución a un problema está constituido por unos buenos bloques, igual que una buena máquina está hecha por buenas piezas. El crossover es el encargado de mezclar bloques buenos que se encuentren en los diversos progenitores, y que serán los que den a los mismos una buena puntuación. La presión selectiva se encarga de que sólo los buenos bloques se perpetúen, y poco a poco vayan formando una buena solución. El teorema de los esquemas viene a decir que la cantidad de buenos bloques se va incrementando con el tiempo de ejecución de un algoritmo genético, y es el resultado teórico más importante en algoritmos genéticos.

El intercambio genético se puede llevar a cabo de muchas formas, pero hay dos grupos principales Crossover n-puntos: Los dos cromosomas se cortan por n puntos, y el material genético situado entre ellos se intercambia. Lo más habitual es un crossover de un punto o de dos puntos.

Crossover uniforme: Se genera un patrón aleatorio de 1s y 0s, y se intercambian los bits de los dos cromosomas que coincidan donde hay un 1 en el patrón. O bien se genera un número aleatorio para cada bit, y si supera una determinada probabilidad se intercambia ese bit entre los dos cromosomas.

Crossover especializados: En algunos problemas, aplicar aleatoriamente el crossover da lugar a cromosomas que codifican soluciones inválidas;  en este caso hay que aplicar el crossover de forma que genere siempre soluciones válidas. Un ejemplo de estos son los operadores de crossover usados en el problema del viajante.

Algoritmo genético simple.
John Holland desde pequeño, se preguntaba cómo logra la naturaleza, crear seres cada vez más perfectos (aunque, como se ha visto, esto no es totalmente cierto, o en todo caso depende de qué entienda uno por perfecto). Lo curioso era que todo se lleva a cabo a base de interacciones locales entre individuos, y entre estos y lo que les rodea. No sabía la respuesta, pero tenía una cierta idea de cómo hallarla: tratando de hacer pequeños modelos de la naturaleza, que tuvieran alguna de sus características, y ver cómo funcionaban, para luego extrapolar sus conclusiones a la totalidad. De hecho, ya de pequeño hacía simulaciones de batallas célebres con todos sus elementos: copiaba mapas y los cubría luego de pequeños ejércitos que se enfrentaban entre sí.

En los años 50 entró en contacto con los primeros ordenadores, donde pudo llevar a cabo algunas de sus ideas, aunque no se encontró con un ambiente intelectual fértil para propagarlas. Fue a principios de los 60, en la Universidad de Michigan en Ann Arbor, donde, dentro del grupo Logis of
Computes, sus ideas comenzaron a desarrollarse y a dar frutos. Y fue, además, leyendo un libro escrito por un biólogo evolucionista, R. A. Fisher, titulado La teoría genética de la selección natural, como comenzó a descubrir los medios de llevar a cabo sus propósitos de comprensión de la naturaleza. De ese libro aprendió que la evolución era una forma de adaptación más potente que el simple aprendizaje, y tomó la decisión de aplicar estas ideas para desarrollar programas bien adaptados para un fin determinado. En esa universidad, Holland impartía un curso titulado Teoría de sistemas adaptativos. Dentro de este curso, y con una participación activa por parte de sus estudiantes, fue donde se crearon las ideas que más tarde se convertirían en los algoritmos genéticos. Por tanto, cuando Holland se enfrentó a los algoritmos genéticos, los objetivos de su investigación fueron dos: imitar los procesos adaptativos de los sistemas naturales, diseñar sistemas artificiales (normalmente programas) que retengan los mecanismos importantes de los sistemas naturales.
Unos 15 años más adelante, David Goldberg, actual delfín de los algoritmos genéticos, conoció a Holland, y se convirtió en su estudiante. Golberg era un ingeniero industrial trabajando en diseño de pipelines, y fue uno de los primeros que trató de aplicar los algoritmos genéticos a problemas industriales. Aunque Holland trató de disuadirle, porque pensaba que el problema era excesivamente complicado como para aplicarle algoritmos genéticos, Goldberg consiguió lo que quería, escribiendo un algoritmo genético en un ordenador personal Apple II. Estas y otras aplicaciones creadas por estudiantes de Holland convirtieron a los algoritmos genéticos en un campo con base suficiente aceptado para celebrar la primera conferencia en 1985, ICGA´85. Tal conferencia se sigue celebrando bianualmente.

Anatomía de un algoritmo genético simple
Los algoritmos genéticos son métodos sistemáticos para la resolución de problemas de búsqueda y optimización que aplican a estos los mismos métodos de la evolución biológica: selección basada en la población, reproducción sexual y mutación.

Los algoritmos genéticos son métodos de optimización, que tratan de resolver el mismo conjunto de problemas que se ha contemplado anteriormente, es decir, hallar (xi,..., xn) tales que F (xi,..., xn) sea máximo. En un algoritmo genético, tras parametrizar el problema en una serie de variables, (xi,..., xn) se codifican en un cromosoma. Todas los operadores utilizados por un algoritmo genético se aplicarán sobre estos cromosomas, o sobre poblaciones de ellos. En el algoritmo genético va implícito el método para resolver el problema; son solo parámetros de tal método los que están codificados, a diferencia de otros algoritmos evolutivos como la programación genética. Hay que tener en cuenta que un algoritmo genético es independiente del problema, lo cual lo hace un algoritmo robusto, por ser útil para cualquier problema, pero a la vez débil, pues no está especializado en ninguno.
Las soluciones codificadas en un cromosoma compiten para ver cuál constituye la mejor solución (aunque no necesariamente la mejor de todas las soluciones posibles). El ambiente, constituido por las otras camaradas soluciones, ejercerá una presión selectiva sobre la población, de forma que sólo los mejor adaptados (aquellos que resuelvan mejor el problema) sobrevivan o leguen su material genético a las siguientes generaciones, igual que en la evolución de las especies. La diversidad genética se introduce mediante mutaciones y reproducción sexual.

En la Naturaleza lo único que hay que optimizar es la supervivencia, y eso significa a su vez maximizar diversos factores y minimizar otros. Un algoritmo genético, sin embargo, se usará para optimizar habitualmente para optimizar sólo una función, no diversas funciones relacionadas entre sí simultáneamente. Este tipo de optimización, denominada optimización multimodal, también se suele abordar con un algoritmo genético especializado.

Por lo tanto, un algoritmo genético consiste en lo siguiente: hallar de qué parámetros depende el problema, codificarlos en un cromosoma, y se aplican los métodos de la evolución: selección y reproducción sexual con intercambio de información y alteraciones que generan diversidad. En las
siguientes secciones se verán cada uno de los aspectos de un algoritmo genético.





 1.2 LOS FUNDAMENTOS DE LA INTELIGENCIA ARTIFICIAL

Esto es una breve historia de las disciplinas que han contribuido con las ideas, puntos de vista y técnicas en el desarrollo de la inteligencia artificial.
Sobre personas que han contribuido para avanzar en responder a las cuestiones sobre la inteligencia artificial.
FILOSOFÍA (DESDE EL AÑO 428 A.C. HASTA EL PRESENTE).

Aristóteles fue el primero quien formulo un conjunto preciso de leyes que gobernaban la parte racional de la inteligencia. El cual consistía en razonar con silogismos que permitía obtener conclusiones mecánicamente.
Thomas Hobbes el propuso que el razonamiento era como la computación numérica.
Una vez que se sabe que un conjunto de reglas pueden describir la parte racional y formal de la mente, lo siguiente seria considerar la mente como un sistema físico.
Rene Descartes fue quien proporcionó la primera discusión sobre la distinción entre la mente y la materia y sobre los problemas que surgen. Descartes fue también un defensor del dualismo: el sostenía que existe una parte de la mente que está al margen de la naturaleza, exenta de la influencia de las leyes físicas y que los animales no poseen esta dualidad esto es que como alternativa al dualismo ellos conciben el materialismo es decir que las operaciones que realiza el cerebro son de acuerdo con las leyes físicas.
La teoría de la confirmación de Carnap y Carl Hempel intenta la explicación que el conocimiento se obtiene a partir de la experiencia.
MATEMÁTICAS (APROXIMADAMENTE DESDE EL AÑO 800 AL PRESENTE).

Una vez que los filósofos delimitaron las ideas más importantes de la inteligencia artificial para poder pasar a una ciencia formal sería necesario contar con un formulación matemática en tres áreas fundamentales: lógica, computación y probabilidad.
George Boole este filosofo definió la lógica proposicional o Booleana, Gottlob Frege fue quien más tarde extendió la lógica de Boole para incluir objetos y relaciones, y también creó la lógica de primer orden que se utiliza hoy como el sistema más básico de representación de conocimiento.
La probabilidad también tuvo un lugar en contribución a la inteligencia artificial. La probabilidad se convirtió en una parte imprescindible de las ciencias cuantitativas, ayudando en el tratamiento de mediciones con incertidumbre y de teorías incompletas, como por ejemplo;
Thomas Bayes propuso una regla para la actualización de probabilidades subjetivas a la luz de nuevas evidencias.
ECONOMÍA (DESDE EL AÑO 1776 HASTA EL PRESENTE).

Adam Smith fue el primero en tratar al pensamiento económico como una ciencia, utilizando la idea de que las economías pueden concebirse como un conjunto de agentes individuales que intentan maximizar su propio estado de bienestar económico.
La teoría de la decisión proporciona un marco completo y formal para la toma de decisiones realizadas bajo incertidumbre.
El trabajo de la economía y la investigación operativa ha contribuido en gran medida a la noción de agente racional.
NEUROCIENCIA (DESDE EL AÑO 1861 HASTA EL PRESENTE).

La neurociencia es el estudio del sistema neurológico, y en especial del cerebro, es decir la forma de como el cerebro procesa la información.
Searle concluye que una colección de simples células puede llegar a generar razonamiento, acción y conciencia.
La teoría como alternativa es el misticismo: que nos dice que existe alguna esfera mística en la que las mentes operan fuera del control de la ciencia física.
Los psicólogos comparten que se debe de describir un mecanismo de procesamiento de información detallado, lo cual lleva consigo la implementación de algunas funciones cognoscitivas.
PSICOLOGÍA (DESDE EL AÑO 1879 HASTA EL PRESENTE).

La psicología se encarga del estudio de cómo piensan y actúan los humanos.
La concepción del cerebro como un dispositivo de procesamiento de información, característica principal de la psicología cognitiva, se remota por lo menos a las obras de William James.
INGENIERÍA COMPUTACIONAL (DESDE EL AÑO 1940 HASTA EL PRESENTE).

Para que la inteligencia pueda llegar a ser una realidad se necesitan dos cosas: inteligencia y artefacto.
La inteligencia artificial también tiene una deuda con la parte software de la informática que ha proporcionado los sistemas operativos, los lenguajes de programación, y las herramientas necesarias para escribir programas modernos, sin embargo la investigación en la IA ha generado numerosas ideas novedosas de las que se ha beneficiado la informática en general, como por ejemplo los computadores personales con interfaces gráficas y ratones.
Entonces la ingeniería computacional tiene mucho que ver con la construcción de un computador más eficiente.
TEORÍA DE CONTROL Y CIBERNÉTICA (DESDE EL AÑO 1948 HASTA EL PRESENTE).

Esta teoría trata sobre como los artefactos pueden tener control de ellos.
La teoría de control de Norbert Wiener el trabajo en sistemas de control biológico y mecánico y en sus vínculos con la cognición. La teoría de control moderna, especialmente la rama conocida como control optimo estocástico, tiene como objetivo el diseño de sistemas que maximizan una función objetivo en el tiempo. Lo cual hace similitud en la visión de lo que es la inteligencia artificial.
Las herramientas de inferencia lógica y computación permitieron a los investigadores de la inteligencia artificial afrontar problemas relacionados con el lenguaje, visión y planificación, que estaban completamente fuera del punto de mira de la teoría de control.
LINGÜÍSTICA (DESDE EL AÑO 1957 HASTA EL PRESENTE).

Esta teoría se basa en la relación del lenguaje con el pensamiento.
El entendimiento del lenguaje requiere de la comprensión de la materia bajo estudio y de su contexto, y no solamente el entendimiento de la estructura de las sentencias.
La representación del conocimiento estaba vinculada al lenguaje y a la búsqueda de información en el campo del lenguaje.
1.3 HISTORIA DE LA INTELIGENCIA ARTIFICIAL GÉNESIS DE LA INTELIGENCIA ARTIFICIAL.

Warren McCulloch Y Walter Pitss (1943) Partieron de la filosofía básica y funcionamiento de las neuronas del cerebro, el análisis formal de la lógica proposicional de Russell y Whitehead y la teoría de la computación de Turín. Propusieron un modelo constituido por neuronas artificiales, en el que cada una de ellas se caracterizaba por estar <activada> o <desactivada>; la activación o desactivación daba como respuesta la estimulación producida por la entidad suficientes de neuronas vecinas.
Dos estudiantes graduados en el Departamento de Matemáticas de Princeton, Marvin Minsky y Deán Edmons, construyeron el primer computador a partir de una red neural en 1951.
NACIMIENTO DE LA INTELIGENCIA ARTIFICIAL (1956).

McCarthy se trasladó al Dartmouth College, quien organizó un congreso para aumentar el interés de los investigadores americanos en la teoría de autómatas, las redes neuronales y el estudio de la inteligencia. Este congreso no dio grandes resultados pero logro relacionar grandes figuras. Dos integrantes de ese congreso crearon un programa llamado el teórico lógico (TL) que fueron Newell y Simon McCarthy propuso el nombre de INTELIGENCIA ARTIFICIAL.
ENTUSIASMO INICIAL GRANDES ESPERANZAS (1952-1969).

Los primero s años de la IA fueron exitosos pero con limitaciones aunque la mayoría de la comunidad científica creía que una maquina nunca podría realizar tareas como los humanos. Al corto tiempo Newell Y Simon desarrollaron el sistema de resolución general de problemas (SRGP) este programa se diseñ0 para que imitara protocolos de resolución de problemas de los seres humanos. Los modelos de cognición llevaron a Newell y Simon (1976) a la famosa hipótesis del SISTEMA DE SIMBOLOS FISICOS. Que afirmaba que los símbolos físicos tienen los medios suficientes y necesarios para generar una acción inteligente.
En IBM, Nathaniel Rochester y sus colegas desarrollaron algunos de los primeros programas de IA Herbert Gelenter (1956) construyo el demostrador de teoremas de geometría (DTG). McCarthy se trasladó de Darmouth al MIT, Donde definió el lenguaje de alto nivel LISP, que se convirtió el lenguaje de programación dominante en la IA.
Minsky superviso el trabajo de unos estudiantes que eligieron un número de problemas limitados cuya solución pareció requerir inteligencia. Estos dominios limitados se conocen como micro mundos. El micro mundo más famoso fue el mundo de los bloques, que consiste en un conjunto de bloques solidos colocados sobre una mesa que su tarea típica era la reordenación de bloques.
UNA DOSIS DE REALIDAD.

Desde el principio, los investigadores de la IA hicieron públicas, sin timidez, Predicciones sobre el éxito que les esperaba:
Sin afán de sorprenderlos y dejarlos atónitos, pero la forma más sencilla que tengo de resumirlo es diciéndoles que actualmente en el mundo existen maquinas capaces de pensar, aprender y crear. Además, su aptitud para hacer lo anterior aumentara rápidamente hasta que la magnitud de problemas que serán capaces de resolver ira a la par que la capacidad de la mente humana para hacer lo mismo.
El primer tipo de problemas surgió porque la mayoría de los primeros programas contaban con poco o ningún conocimiento de la materia objeto de estudio, el segundo problema era que los problemas que intentaban resolver eran intratables
SISTEMAS BASADOS EN EL CONOCIMIENTO: ¿CLAVE DEL PODER? (1969-1976).

El cuadro que dibuja la resolución de problemas durante la primera década de la investigación en la IA estaba centrado en el desarrollo de mecanismos de búsqueda de propósito general, en los que se entrelazaban elementos de razonamiento básico para encontrar así soluciones completas. A estos procedimientos se les ha denominado métodos débiles, debido a que no tratan problemas más amplios y complejos,
EL programa DENDRAL (Buchanan et al 1969) constituye uno de los primeros ejemplos de este enfoque fue diseñado en Stanford donde se colaboraron en la resolución del problema de inferir una estructura molecular a partir de la información proporcionada por un espectrómetro de masas.
La versión más simple del [programa generaba todas la posibles estructuras posibles que correspondían a la formula.
LA trascendencia de DENDRAL se debió a ser el primer sistema de conocimiento intenso que tuvo éxito: su base de conocimiento estaba formada por grandes cantidades de reglas de propósito particular.
La IA se convierte en une industria (desde 1980 hasta el presente)
El primer sistema experto comercial que tuvo éxito, R1, inicio su actividad en Digital Equipment Corporation el programa se utilizaba en la elaboración de pedidos de nuevos sistemas informáticos. El grupo de inteligencia artificial DEC había distribuido ya 40 sistemas expertos, y había más en camino.
En 1981 los japoneses anunciaron el proyecto quinta generación un plan de 10 años para construir computadores inteligentes en los que pudiese ejecutarse Prolog. Como respuesta estados unidos Construyo la Microelectronics and Competer Tecnología Corporation (MCC)
En su conjunto la industria de la IA creció rápidamente, pasando de unos pocos millones de dólares en 1980 a billones de dólares en 1988.
REGRESO DE LAS REDES NEURONALES (DESDE 1986 HASTA EL PRESENTE).

Aunque la información había abandonado de manera general el campo de las redes neuronales a finales de los años 70, el trabajo continúo en otros campos. Físicos como John Hopfield (1982) utilizaron técnicas de mecánica estadística para analizar las propiedades de almacenamiento y optimización de las redes, tratando colecciones de nodos como colecciones de átomos. Aquellos modelos de inteligencia artificial llamados conexionistas fueron vistos por algunos como competidores tanto de3 los modelos simbólicos propuestos por Newell y Simon como la aproximación lógica de McCarthy entre otros.
IA SE CONVIERTE EN UNA CIENCIA (DESDE 1987 HASTA EL PRESENTE).

En los últimos años se ha producido una revolución tanto en el contenido como en la metodología de trabajo en el campo de la inteligencia artificial.
En la década de los 70’s se sometió a prueba una gran variedad de arquitecturas y enfoques. Muchos de ellos fueron un tanto ad hoc y resultaban frágiles, y fueron probados solo en unos pocos ejemplos elegidos especialmente.
EMERGENCIA DE LOS SISTEMAS INTELIGENTES.

El llamado movimiento situado intenta entender la forma de actuar de los agentes inteligentes inmersos en entornos reales, que disponen de sensores de entradas continuas. Uno de los medios más importantes para los agentes inteligentes es internet. Los sistemas IA han llegado a ser tan comunes en aplicaciones desarrolladas para; la web como que el sufijo bot se ha introducido en lenguaje común.