Algoritmos de Aproximación

Operadores genéticos (mutación y cruzamiento)Un algoritmo de aproximación es un algoritmo usado para encontrar soluciones aproximadas a problemas de optimización.

Están a menudo asociados con problemas NPcompletos ya que como es poco probable que alguna vez se descubran algoritmos eficientes de tiempo polinómico que resuelvan exactamente problemas NP-completos, se opta por encontrar soluciones no-óptimas en tiempo polinomial.

A diferencia los algoritmos que utilizan heurísticas, que usualmente sólo encuentran soluciones razonablemente buenas en tiempos razonablemente rápidos, lo que se busca en por parte de un algoritmo de aproximación es encontrar soluciones que está demostrado son de calidad y cuyos tiempos de ejecución están acotados por cotas conocidas.

Los algoritmos de aproximación están siendo cada vez más utilizados para resolver problemas donde los algoritmos exactos de tiempo polinomial son conocidos pero demasiado costosos debido al tamaño de la entrada.

Determinismo

Un algoritmo de aproximación puede ser determinista o no determinista

Si el algoritmo de aproximación es determinista, se sabe que siempre obtendrá la misma solución para los parámetros de entrada y esta será aproximada según su factor de aproximación determinista.

Si el algoritmo de aproximación no es determinista y se ejecuta muy rápidamente, es común ejecutarlo varias veces y elegir la mejor de las soluciones aproximadas producidas.

Factor de aproximación

Un algoritmo de aproximación bien diseñado cuenta con un análisis formal que muestra que la diferencia entre su solución y la solución optima es de un factor constante.

Este factor se llama el factor de aproximación.
       < 1 para maximización
        > 1 para minimización

Depende de la aplicación qué tan cerca debería ser la solución aproximada a la solución óptima

Naturaleza de los problemas

 La mayoría de los problemas NP-completos de optimización se puede ver en la Naturaleza y existen muchos procesos que buscan un estado estable.

Dichos procesos pueden contemplarse como procesos naturales de optimización. Se han propuesto varios algoritmos de optimización global que simulan estos procesos naturales.

Tres ejemplos clásicos son:

Recocido Simulado, basado en el proceso natural de enfriamiento de un sólido hasta que alcanza su punto de equilibrio.
Algoritmos Evolutivos, basados en el concepto de evolución biológica. Entre los mismos se pueden considerar las siguientes ramas : Algoritmos Genéticos, Estrategias Evolutivas, Programación Evolutiva y Programación Genética.
Redes Neuronales Artificiales, basadas en procesos relacionados con el sistema nervioso central.

Recocido Simulado

El recocido simulado, o enfriamiento simulado es un algoritmo de búsqueda meta-heurística para problemas de optimización global; el objetivo general de este tipo de algoritmos es encontrar una buena aproximación al valor óptimo de una función en un espacio de búsqueda grande. A este valor óptimo se lo denomina "óptimo global"

El nombre e inspiración viene del proceso de recocido del acero y cerámicas, una técnica que consiste en calentar y luego enfriar lentamente el material para variar sus propiedades físicas. El calor causa que los átomos aumenten su energía y que puedan así desplazarse de sus posiciones iniciales (un mínimo local de energía); el enfriamiento lento les da mayores probabilidades de recristalizar en configuraciones con menor energía que la inicial (mínimo global).

El método fue descrito independientemente por Scott Kirkpatrick, C. Daniel Gelatt y Mario P. Vecchi en 1983,2 y por Vlado Černý en 1985.

El método es una adaptación del algoritmo Metropolis-Hastings, un método de Montecarlo utilizado para generar muestras de estados de un sistema termodinámico.

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 estado s. En el ejemplo de recocido de metales, 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.  

Algoritmos Evolutivos

Los algoritmos evolutivos son métodos de optimización y búsqueda de soluciones basados en los postulados de la evolución biológica. En ellos se mantiene un conjunto de entidades que representan posibles soluciones, las cuales se mezclan, y compiten entre sí, de tal manera que las más aptas son capaces de prevalecer a lo largo del tiempo, evolucionando hacia mejores soluciones cada vez.

Los algoritmos evolutivos, y la computación evolutiva, son una rama de la inteligencia artificial. Son utilizados principalmente en problemas con espacios de búsqueda extensos y no lineales, en donde otros métodos no son capaces de encontrar soluciones en un tiempo razonable.

Siguiendo la terminología de la teoría de la evolución, las entidades que representan las soluciones al problema se denominan individuos o cromosomas, y el conjunto de éstos, población. Los individuos son modificados por operadores genéticos, principalmente el sobrecruzamiento, que consiste en la mezcla de la información de dos o más individuos; la mutación, que es un cambio aleatorio en los individuos; y la selección, consistente en la elección de los individuos que sobrevivirán y conformarán la siguiente generación. Dado que los individuos que representan las soluciones más adecuadas al problema tienen más posibilidades de sobrevivir, la población va mejorando gradualmente. 

Suele hablarse de tres paradigmas principales de algoritmos evolutivos:
  • Programación evolutiva 
  • Estrategias evolutivas
  • Algoritmos genéticos
Cada uno de estos paradigmas se originó independientemente y con distintas motivaciones. Actualmente, los algoritmos tienden a combinar características de éstos tres y a incluir mecanismos de otros campos de estudio, tales como el aprendizaje automático, otros algoritmos de búsqueda, o diferentes estructura de datos. Algunas de las tendencias actuales son las siguientes:
  • Evolución diferencial  
  • Modelos probabilísticos
  • Evolución simulada 
  • Algoritmos culturales
  • Algoritmos meméticos 
  • Programación genética

Algoritmos Genéticos

Son llamados así porque se inspiran en la evolución biológica y su base genético-molecular. Estos algoritmos hacen evolucionar una población de individuos sometiéndola a acciones aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y recombinaciones genéticas), así como también a una selección de acuerdo con algún criterio, en función del cual se decide cuáles son los individuos más adaptados, que sobreviven, y cuáles los menos aptos, que son descartados.

Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad. Bajo una condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde siempre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrar que el algoritmo converge en probabilidad al óptimo.

Funcionamiento de un algoritmo genético 
Entre un conjunto de soluciones de un problema, llamado fenotipo, y el conjunto de individuos de una población natural, codifica la información de cada solución en una cadena, generalmente binaria, llamada cromosoma. Los símbolos que forman la cadena son llamados genes. Cuando la representación de los cromosomas se hace con cadenas de dígitos binarios se le conoce como genotipo. Los cromosomas evolucionan a través de iteraciones, llamadas generaciones. En cada generación, los cromosomas son evaluados usando alguna medida de aptitud. Las siguientes generaciones (nuevos cromosomas), operadores genéticos, de sobrecruzamiento y de mutación.


Los componentes básicos de un algoritmo genético son 

  1. Operadores genéticos (mutación y cruzamiento)
  2. Una representación apropiada del problema a resolver
  3. Una función de Oportunidad o bien llamada de Aptitud (fitness)
  4. Un procedimiento de inicialización

RedesNeuronales


Las redes de neuronas artificiales son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexión de neuronas que colaboran entre sí para producir un estímulo de salida.

Consisten en unidades de procesamiento densamente interconectadas , llamadas neuronas por su similaridad funcional con las neuronas biológicas. Las unidades de procesamiento reciben, pro-cesan y transmiten señales, tal como las neuronas biológicas

Composición de las redes neuronales artificiales

Los nueve componentes principales del funcionamiento de las Redes Neuronales Artificiales son:
  1. Un conjunto de unidades de procesamiento (neuronas);
  2. Un estado de activación (variable de estado);
  3. Una función de salida para cada unidad;
  4. Un conjunto de conexiones (patrón de conectividad);
  5. Un conjunto de reglas de propagación para propagar las señales de salida a través de la RNA.
  6. Una regla de combinación
  7. Una regla de activación
  8. Una regla de modificación
  9. Un ambiente en el cual opera la RNA

Ejemplo: RedNeuronal Perceptrón Multicapa


 

Comentarios