Está en la página 1de 34

Curso: Optimización II.

Clase 1: Heurística Codiciosa.


Estructura del curso
Clase 1: Heurística codiciosa.

Clase 2: Algoritmo de búsqueda tabú.


Unidad 1: Métodos Heurísticos y Metaheurísticos.
Clase 3: Algoritmo de recocido simulado.
Clase 4: Algoritmo genético y aplicación de metaheurística a
programas lineales entero.
Clase 5: Procesos Estocáticos.

Clase 6: Solemne
Unidad 2: Cadenas de Markov.
Optimización II Clase 7: Cadenas de Markov.
Clase 8: Ecuaciones de Chapman-Kolmogorov y clasificación de
estados.
Clase 9: Modelo de colas y Proceso de nacimiento y muerte.
Clase 10: Teoría de espera en procesos exponenciales de
nacimiento y muerte.
Unidad 3: Sistemas de Colas. Clase 11: Modelo de colas con distribuciones no exponenciales.
Clase 12: Modelo de colas con disciplina de prioridades y
disciplina de cola.
Clase 13: Solemne
Estructura del curso
Clase 1: Heurística codiciosa.

Clase 2: Algoritmo de búsqueda tabú.


Unidad 1: Métodos Heurísticos y Metaheurísticos.
Clase 3: Algoritmo de recocido simulado.
Clase 4: Algoritmo genético y aplicación de metaheurística a
programas lineales entero.
Clase 5: Procesos Estocáticos.

Clase 6: Solemne
Unidad 2: Cadenas de Markov.
Optimización II Clase 7: Cadenas de Markov.
Clase 8: Ecuaciones de Chapman-Kolmogorov y clasificación de
estados.
Clase 9: Modelo de colas y Proceso de nacimiento y muerte.
Clase 10: Teoría de espera en procesos exponenciales de
nacimiento y muerte.
Unidad 3: Sistemas de Colas. Clase 11: Modelo de colas con distribuciones no exponenciales.
Clase 12: Modelo de colas con disciplina de prioridades y
disciplina de cola.
Clase 13: Solemne
Resultado de Aprendizaje de la Clase
Determinar el óptimo local para la solución de los problemas de
optimización propuestos en clase.
¿Por qué es importante este tema?
Este tema introduce al estudiante en las nociones básicas para
construir los modelos de programación lineal que permitirán
encontrar soluciones óptimas para la toma de decisiones en
torno a la asignación de los recursos disponibles en un sistema
productivo.
Introducción
Existen problemas de Investigación de Operaciones que pueden ser
tan complicados que no es posible resolverlos para encontrar una
solución óptima.
En tales situaciones, aún es importante encontrar una buena solución
factible que al menos esté razonablemente cerca de ser óptima. Por lo
general, para buscar esa solución se utilizan métodos heurísticos.
Un método heurístico es un procedimiento que trata de descubrir una
solución factible muy buena, pero no necesariamente una solución
óptima, para el problema específico bajo consideración.

La clase de hoy abarcará la definición de programación heurística,


heurística codiciosa y un ejemplo de aplicación en variables discretas.
Programación Heurística
La heurística está diseñada para encontrar buenas soluciones
aproximadas de problemas combinatorios difíciles que de lo contrario
no pueden resolverse mediante los algoritmos de optimización
disponibles.

Una heurística es una técnica de búsqueda directa que utiliza reglas


favorables prácticas para localizar soluciones mejoradas.
Programación Heurística…
Con frecuencia, el procedimiento es un algoritmo iterativo novedoso,
donde cada iteración implica la realización de una búsqueda de una
nueva solución que puede ser mejor que la solución que se encontró
con anterioridad.

Cuando el algoritmo termina después de un tiempo razonable, la


solución que proporciona es la mejor que se pudo encontrar en
cualquier iteración.
Programación Heurística…
• Los métodos heurísticos se basan en ideas bastante simples, de
sentido común, acerca de la forma en que se debe buscar una buena
solución.
• Estas ideas deben ajustarse al problema específico de interés. En
consecuencia, los métodos heurísticos tienden a ser ad hoc por
naturaleza.
• Esto es, por lo general cada método se diseña para abordar un tipo
específico de problema en vez de una variedad de aplicaciones.
Programación Heurística…
Para comprender el concepto de heurística, se presenta como ejemplo
la manera de abordar un problemas matemático mediante la
heurística.
Encuentra el último dígito de la siguiente multiplicación:
92008 x 162009

Por las dimensiones de la potencia, una calculadora no nos dará el


resultado. Como la pregunta se refiere únicamente al último dígito, es
posible emplear la heurística para dar respuesta a esta pregunta.
Programación Heurística…
El punto de partida es hacer un análisis de los resultados de elevar las
bases (9 y 16 en este caso) a distintas potencias:

Es posible notar que cuando el


número 9 se eleva a una
potencia impar, el resultado
termina en 9, mientras que
cuando se eleva a una, el
resultado termina en 1.
Programación Heurística…
El punto de partida es hacer un análisis de los resultados de elevar las
bases (9 y 16 en este caso) a distintas potencias:

En el caso de 16,
indistintamente de que se
eleve a una potencia par
o impar, el resultado
termina en 6.
Programación Heurística…
Retomando el enunciado:
Encuentra el último dígito de la siguiente multiplicación:
92008 x 162009

• 9 elevado a potencia par, termina en 1 92008


162009
• 16 elevado a potencia par o impar, termina en 6,
por tanto,

..……1 x ……….6 = …………6


la respuesta a la pregunta es 6
Programación Heurística…

La ventaja de la heurística es
que en general determina
(buenas) soluciones con
rapidez, utilizando reglas de
solución simples.

La desventaja es que la calidad


de la solución (con respecto a la
óptima) suele desconocerse.
Heurística Codiciosa
Las primeras generaciones de heurística se basan en la regla de
búsqueda codiciosa que dicta que se mejore el valor de la función
objetivo con cada movimiento de búsqueda.

La búsqueda termina en un óptimo local donde ya no son posibles


más mejoras.

La heurística codiciosa también se le denomina búsqueda local.


Heurística Codiciosa (Búsqueda local)
Las ideas principales de la heurística codiciosa se explican por medio
de un problema de una sola variable.

Defina el problema de optimización con espacio de soluciones S como:

Minimizar z = F(x), x ϵ S

El proceso iterativo de una heurística codiciosa se inicia en un punto


factible (aleatorio) y luego intenta moverse a un punto de mejor
solución en las inmediaciones (vecindad) del punto de solución actual.
Heurística Codiciosa (Búsqueda local)…

Específicamente, en la iteración k, dado el punto de solución xk, la


heurística examina todos los puntos factibles en las inmediaciones
N(xk) en busca de una mejor solución. La búsqueda finaliza cuando ya
no son posibles más mejoras.

La definición de N(xk) es importante en el diseño de la heurística. Por


ejemplo, para x entera, N(xk) = [xk - 1, xk + 1] define la vecindad
inmediata de xk. Alternativamente, una vecindad expandida puede
incluir puntos de solución cercanos adicionales.
Heurística Codiciosa (Búsqueda Local)…

• La primera definición implica menos cálculos de búsqueda local pero


podría deteriorar la calidad de la solución final.

• La segunda definición (vecindad expandida) requiere más cálculos


de búsqueda local, pero podría mejorar la calidad de la solución.
Heurística de Variable Discreta
Para la explicación de la heurística de variable discreta se presentaran
dos ejemplos, el primero utiliza la vecindad inmediata y el segundo
expande el dominio para incluir más puntos de solución l. Ambos casos
se refieren a una sola variable discreta.
Heurística de Variable Discreta…

Ejemplo 1: Vecindad Inmediata.

Considere la función F(x) dada en la


figura y defina el problema de
optimización como

Minimizar F(x), x ϵ S = {1, 2,..., 8}

La función tiene un mínimo local en x =


3(B) y un mínimo global en x = 7(D).
Fuente: Taha (2004)
Heurística de Variable Discreta…
Ejemplo 1: Vecindad Inmediata.

Heurística codiciosa aplicada a F(x) de la figura presentada en el slide anterior. Comenzando en x0=1 con N(xk) =[xk-1, xk+1]

Fuente: Adaptación de Taha (2004)


Heurística de Variable Discreta…
Ejemplo 1: Vecindad Inmediata.

Heurística codiciosa aplicada a F(x) de la figura presentada en el slide anterior. Comenzando en x0=4 con N(xk) =[xk-1, xk+1]

4 4

Fuente: Adaptación de Taha (2004)


Heurística de Variable Discreta…
Vecindad Expandida.

La búsqueda de vecindad expandida puede basarse en la evaluación de


todos los puntos cercanos, una estrategia que incrementa la carga
computacional.

Alternativamente, es posible determinar el siguiente movimiento de


búsqueda mediante la selección aleatoria de la vecindad.
Específicamente, en la iteración k, el siguiente movimiento, xk+1, se
selecciona de N (xk) con probabilidad de 1/m, donde m es el número de
elementos en el conjunto de vecindades.
Heurística de Variable Discreta…

Vecindad Expandida.

El muestreo de la vecindad se repite, si es necesario, hasta que se


determina una solución mejorada, o hasta que un número
especificado de iteraciones se ha alcanzado. La regla de selección
aleatoria describe lo que se conoce como heurística de caminata
aleatoria.
Heurística de Variable Discreta…

Ejemplo de Vecindad Expandida.

Este ejemplo se aplica una vez más a F(x) de la figura presentada


previamente.

Arbitrariamente definimos el conjunto de vecindades


expandidas N(xk) como {1,2,…,xk-1, xk+1,…,8}. La búsqueda
continúa durante cinco iteraciones comenzando en x0=1.
Indique [seleccionada de entre N(xk)] como un posible siguiente
movimiento. Se acepta como el nuevo movimiento de
búsqueda sólo si mejora la solución. Si no lo hace, se intenta
una nueva selección aleatoria de N(xk).
Heurística de Variable Discreta…

Ejemplo de Vecindad Expandida.

La tabla que se presenta a continuación detalla la aplicación de la


heurística de caminata aleatoria.

En contraste con la heurística de vecindad inmediata del ejemplo


anterior, la heurística de caminata aleatoria produce la solución x=7
y F(x)=40 en la iteración 4, la que por accidente resulta ser mejor
que la obtenida en el ejemplo de vecindad inmediata.
Heurística de Variable Discreta…
Ejemplo de Vecindad Expandida.
Heurística codiciosa de caminata aleatoria aplicada a F(x). Comenzando en x0=1

.3712

Fuente: Adaptación de Taha (2004)

En la iteración 3, el posible movimiento aleatorio desde N(xk)= 2 =


{1,3,4,5,6,7,8} no mejora la solución. Por consiguiente, en la iteración 4 se
intenta otro movimiento aleatorio desde la misma vecindad.
En esta ocasión el movimiento produce la solución superior x* = 6.
Desventaja de la Heurística Codiciosa
Cuando se aplica un procedimiento de mejora local bien diseñado a un
problema de optimización con múltiples óptimos locales, el
procedimiento convergirá hacia un óptimo local y se detendrá.

El óptimo local que encuentre dependerá del punto en el que el


procedimiento inicia su búsqueda. Por lo tanto, el procedimiento
encontrará el óptimo global sólo si inicia la búsqueda en la vecindad de
dicho óptimo global.

Para tratar de evitar esta desventaja se puede reiniciar el


procedimiento de mejora local cierto número de veces a partir de
soluciones de prueba aleatorias.
Desventaja de la Heurística Codiciosa…

Con frecuencia, cuando se reinicia desde una parte nueva de la región


factible se llega a un nuevo óptimo local.

Si se repite esta rutina cierta cantidad de veces se incrementa la


posibilidad de que el mejor óptimo local que se obtuvo en realidad
sea el óptimo global.

Este enfoque funciona bien con problemas pequeños. Sin embargo, es


mucho menos exitoso en problemas grandes con muchas variables y
una región factible complicada, en estos casos se aplica la
metaheurística que será explicada en las clases siguientes.
Preguntas
• ¿Qué es la Programación Heurística?
• ¿Cuáles son las ventajas y desventajas de la programación
heurística?
Resumen de la clase

Programación
Heurística

Heurística Codiciosa

Heurística de Variable
Discreta

Vecindad inmediata

Vecindad expandida
Bibliografía
Bibliografía Obligatoria:
• Investigación de Operaciones
– Taha Hamdy (2004), Pearson Educación.
Taller Práctico Colaborativo
Título
• Programación heurística.

Resultado de Aprendizaje
• Determinar el óptimo local para la solución de los
problemas de optimización propuestos en clase.

Tiempo
• 80 minutos (5 min. organización, 75 min. desarrollo del taller)
Actividad online Clase 1
Guía
• Programación Heurística en variables continuas.
• Tiempo de Desarrollo: 80 minutos.
• Lleve el desarrollo de la Guía y las principales dudas a
la siguiente Clase presencial.

También podría gustarte