Mathematics">
Métodos Heurísticos2
Métodos Heurísticos2
Métodos Heurísticos2
Una característica recurrente en los problemas de optimización combinatoria es el hecho que son
muy “fáciles de entender y enunciar, pero generalmente son “difíciles” de resolver en tiempo
razonable. Podría pensarse que la solución de un problema de optimización combinatoria se
restringe únicamente a buscar de manera exhaustiva el valor máximo o mínimo en un conjunto
finito de posibilidades y que, usando una computadora veloz, el problema carecería de interés
matemático, sin pensar por un momento, en el tamaño de este conjunto. En la mayoría de los casos,
este conjunto de posibilidades crece de manera alarmante conforme crece el tamaño de la instancia
del problema. Es frecuente que los problemas de este tipo tengan n! (n factorial) o más soluciones
factibles (donde n es el tamaño de la instancia). Ahora, si una computadora pudiera ser programada
para examinar soluciones a razón de un billón de soluciones por segundo, la computadora
terminaría su tarea, para n = 23 en alrededor de 820 años, para n =24 en alrededor de 19,674 años
y así sucesivamente. Por lo que no tiene sentido resolver de esa forma un problema si al interesado
no le alcanza la vida para ver la respuesta.
Durante muchos años se han hecho esfuerzos para resolver problemas de optimización
combinatoria, hay problemas para los que existen algoritmos rápidos y eficientes; por ejemplo, el
problema de programación lineal, flujo en redes, acoplamiento, etc. Sin embargo, existen muchos
problemas de optimización combinatoria para los que no se conocen algoritmos eficientes que los
resuelvan cuando el tamaño del problema es mediano o de gran escala; por ejemplo, el problema
del agente viajero, el problema de asignación cuadrático, el problema de particionamiento, etc.
Estos últimos problemas tienen más de 60 años de ser atacados, en la mayoría de los casos, por
algoritmos desarrollados especialmente para el problema específico y usando una diversidad de
técnicas tales como planos de corte, ramificación y acotamiento, enumeración implícita,
programación dinámica, relajación lagrangeana, entre otras, así como combinaciones de las
técnicas antes mencionadas. Desafortunadamente, no se ha podido dar soluciones eficientes.
También existe la necesidad de producir métodos de aplicabilidad general y flexible para
problemas de optimización combinatoria que obtengan soluciones en un tiempo razonable.
Para los problemas de optimización en la clase NP-Dura, a la fecha, no se conocen algoritmos que
los resuelvan en tiempo polinomial. Es por esto que, en las últimas décadas, se han desarrollado
algoritmos de tipo heurístico o estocástico para resolver instancias grandes de problemas que
pertenecen a esta clase. Estos algoritmos, no necesariamente encuentran la mejor solución al
problema, pero en general se pueden obtener “buenas soluciones” cuando se aplican, aquí se
entiende “buena solución” en términos de cercanía al valor óptimo. La ventaja principal de este
tipo de algoritmos es que son rápidos y corren en un tiempo polinomial.
La búsqueda local constituye una clase interesante de los algoritmos estocásticos y está basada en
el mejoramiento paso a paso de la función de costo al explorar las vecindades de soluciones
cercanas. El uso del algoritmo de búsqueda local presupone la definición de una solución, una
función de costo y una estructura de vecindades. A continuación, se dan algunas definiciones y
ejemplos de las mismas.
El Problema de Optimización
Definición 1.
A la función 𝑓: 𝑆 → 𝑅 donde 𝑆 ⊆ 𝑅𝑛 la denominaremos función costo/beneficio o función objetivo
y al conjunto S lo llamaremos conjunto factible o conjunto de soluciones posibles.
Optimización Continua
f(x) = cos(2x+1)+2cos(3x+2)+3cos(4x+3)+4cos(5x+4)+5cos(6x+5)
donde -10 ≤ x ≤ 10
Se muestra la función en la Figura 1 donde se aprecian tres mínimos y tres máximos globales en
el intervalo.
Definición 2.
Dado un problema de optimización continua definimos una vecindad para 𝑥 ∈ 𝑆 con radio 𝑟 ∈ 𝑅+
como:
𝐵𝑟 (𝑥) = {𝑦 ∈ 𝑆 | ‖𝑥 − 𝑦‖ < 𝑟}
Definición 3.
Sea un problema de optimización continua y 𝑆𝑥̅ una vecindad de 𝑥̅ , entonces 𝑥̅ se llama una
solución óptima local o simplemente un óptimo local con respecto a 𝑆𝑥̅ si 𝑥̅ es mejor que o igual
a, todas sus soluciones vecinas con respecto a la función costo. Específicamente, en el caso de
minimización, 𝑥̅ se llama solución mínima local} o simplemente un mínimo local sí
Optimización Combinatoria
Definición 4.
Una instancia de un problema de optimización combinatoria puede formalizarse como una pareja
(𝑆, 𝑓), donde S denota el conjunto finito de todas las soluciones posibles y f es una función real, la
función de costo o función objetivo, mapeo definido por
𝑓: 𝑆 → 𝑅
Para el caso de minimización, el problema es encontrar 𝑖𝑜𝑝𝑡 ∈ 𝑆 que satisfaga:
𝑓(𝑖𝑜𝑝𝑡 ) ≤ 𝑓 (𝑖 ), para toda 𝑖 ∈ 𝑆
A la solución 𝑖𝑜𝑝𝑡 se le llama una solución globalmente óptima y 𝑓𝑜𝑝𝑡 = 𝑓(𝑖𝑜𝑝𝑡 ) denota el costo
óptimo, mientras que 𝑆𝑜𝑝𝑡 denota el conjunto de soluciones óptimas. Un problema de optimización
combinatoria es un conjunto I de instancias.
Ejemplo: El Problema del Agente Viajero. Considere n ciudades y una matriz dpq de orden 𝑛 ×
𝑛, cuyos elementos denotan la distancia entre cada par (p, q) de ciudades. Se define un recorrido
como una trayectoria cerrada que visita cada ciudad exactamente una vez. El problema es encontrar
el recorrido con longitud mínima.
En este problema, una solución está dada por una permutación cíclica 𝜋 = (𝜋(1), 𝜋(2), … , 𝜋(𝑛)),
permutación cíclica donde 𝜋(𝑘 ) denota la ciudad a visitar después de la ciudad k, con 𝜋 𝑙 (𝑘) ≠
𝑘, 𝑙 = 1,2, … 𝑛 − 1, 𝜋 𝑛 (𝑘) = 𝑘, para toda k. Aquí 𝜋 𝑙 (𝑘) se entiende por la aplicación de l veces
la permutación 𝜋. Cada solución corresponde a un recorrido. El espacio de soluciones espacio de
soluciones está dado por:
𝑓 (𝜋) = ∑ 𝑑𝑖,𝜋(𝑖)
𝑖=1
Definición 5.
Sea (𝑆, 𝑓) una instancia de un problema de optimización combinatoria. Entonces una estructura
de vecindades es un mapeo:
𝑁: 𝑆 → 2𝑆
que define para cada solución 𝑖 ∈ 𝑆 un conjunto 𝑆𝑖 ⊂ 𝑆 de soluciones que son “cercanas” a i en
algún sentido. El conjunto 𝑆𝑖 se llama vecindad de la solución i y cada 𝑗 ∈ 𝑆𝑖 se llama un vecino
de i. Además se supone que 𝑗 ∈ 𝑆𝑖 ⟺ 𝑖 ∈ 𝑆𝑗 .
En el problema del agente viajero una estructura de vecindades 𝑁𝑘 , llamada k-cambios, define
para cada solución i una vecindad 𝑆𝑖 que consiste del conjunto de soluciones que pueden obtenerse
a partir de la solución i cambiando k aristas del recorrido correspondiente a la solución i y
remplazándolos por otras k aristas de tal manera que nuevamente se obtenga un recorrido.
Además, cada solución j puede obtenerse a partir de cualquier solución i por n-2, 2-cambios, es
decir, para toda 𝑖, 𝑗 ∈ 𝑆 existe una sucesión 𝑙0 , 𝑙1 , … , 𝑙𝑛−2 ∈ 𝑆 tal que:
𝜋𝑖 = 𝜋𝑙0 y 𝜋𝑙𝑛−2 = 𝜋𝑗
Definición 6.
Sea (𝑆, 𝑓) una instancia de un problema de optimización combinatoria, N una estructura de
vecindades. Entonces un mecanismo de generación es un medio para seleccionar una solución j de
la vecindad 𝑆𝑖 de la solución i.
Definición 7.
Sea (𝑆, 𝑓) una instancia de un problema de optimización combinatoria y N una estructura de
vecindades, entonces 𝑖̅ se llama una solución óptima local o simplemente un óptimo local con
respecto a N si 𝑖̅ es mejor que o igual a, todas sus soluciones vecinas con respecto al costo.
Específicamente, en el caso de minimización, 𝑖̅ se llama solución mínima local o simplemente un
mínimo local sí
De aquí se observa que, los algoritmos de búsqueda local terminan con un óptimo local a menos
que la estructura de vecindades sea exacta. Generalmente es difícil definir estructuras de
vecindades exactas, ya que la definición de una estructura de vecindades exacta frecuentemente
involucra hacer una búsqueda exhaustiva en todo el conjunto S.
La calidad del óptimo local obtenido por el algoritmo de búsqueda local, depende fuertemente de
la solución inicial y para muchos problemas de optimización combinatoria no se tiene una solución
inicial apropiada a la mano. Además la complejidad del problema, en el peor de los casos, no se
conoce para muchos problemas.
Entre las ventajas de usar el algoritmo de búsqueda local es que se puede aplicar de manera general
a diferentes problemas específicos de optimización combinatoria, sin alterar su estructura, ya que
únicamente se requiere de especificar la función de costo y la estructura de vecindades.
Algunas formas de relajar las desventajas del algoritmo de búsqueda local son las siguientes:
Heurísticas y Metaheurísticas
La palabra heurística proviene del griego heuriskein, al igual que la palabra eureka y quiere decir
encontrar.
La popularización del concepto se debe al matemático George Pólya, con su libro Cómo resolverlo
(How to solve it). El libro contiene recetas heurísticas que trataba de enseñar a sus alumnos.
Los métodos heurísticos son tan antiguos como la toma de decisiones. Hasta antes de la aparición
de las computadoras se utilizaban métodos heurísticos poco elegantes pero efectivos, para obtener
soluciones de problemas grandes de decisión
En las décadas de los 60's y 70's se desarrollaron algoritmos exactos basados en construcciones
matemáticas sofisticadas para ciertos tipos de problemas de optimización tales como programas
lineales, programación cuadrática convexa y problemas de programación no lineal convexa.
Las característica especial que distingue a estos problemas es que las condiciones de optimalidad
proveen caracterizaciones eficientes para las soluciones óptimas sean conocidas. Los algoritmos
exactos para estos problemas están basados en estas condiciones de optimalidad. Por estas
condiciones especiales se considera que son problemas agradables (o fáciles) entre los modelos
de optimización.
En los 80's y actualmente, se implementan paquetes de software para estos algoritmos sofisticados,
y sistemas de computación que pueden ejecutarse para amplia variedad. De modo que hoy en día
no hay razón para usar métodos heurísticos para resolver instancias de estos problemas, ya que
pueden resolverse de manera muy eficiente por estos algoritmos exactos.
Desafortunadamente las investigaciones no han dado algoritmos eficientes para obtener soluciones
exactas para problemas de optimización combinatoria que no están en esta clase agradable.
Por todas estas razones, los métodos heurísticos son métodos que deben ser seleccionados para
resolver problemas de optimización combinatoria de gran escala.
Métodos Glotones
Los métodos heurísticos en general se aplican a problemas específicos, pero tienen varios
principios ampliamente aplicables para el diseño. Uno muy popular es el principio de la
glotonería (en inglés greedy) que guía a los métodos glotones. Cada paso sucesivo en estos
métodos se toma de tal manera que minimiza el costo inmediato (o maximiza la ganancia
inmediata).
Las tres características principales de los métodos glotones son los siguientes.
• Característica incremental. Se representa al problema de tal manera que una solución
puede ser vista o como un subconjunto de un conjunto de elementos o como una sucesión
de un conjunto de elementos en algún orden.
• Característica no marcha para atrás. Una vez que un elemento se selecciona para la
inclusión en el conjunto solución (o el elemento se incluye en la sucesión en la posición
actual) nunca se regresa o se reemplaza por algún otro elemento (o su posición en la
sucesión nunca se altera). Esto es, en un algoritmo glotón, las decisiones que se hacen en
alguna etapa, nunca se revisan posteriormente.
Pueden usarse criterios diferentes para caracterizar el mejor cuando se hace la selección,
dependiendo de la naturaleza del problema a resolver. El éxito del método depende de manera
crítica de cómo se escoja este criterio.
Por lo tanto un algoritmo glotón construye la solución por pasos y en cada paso selecciona un
elemento para incluirlo en la solución que sea el mejor entre todos aquellos que sean elegibles para
incluirse.
La selección en cada etapa está basada en los valores que se tengan en ese momento. Por lo tanto
los métodos glotones se conocen como métodos miopes.
Búsqueda Local
Otra forma de diseñar métodos heurísticos se basa en comenzar con una solución completa del
problema, y tratar de mejorar por medio de una búsqueda local en una vecindad de la solución. La
solución inicial puede obtenerse de manera aleatoria o ser obtenida por algún método glotón. Cada
paso subsecuente, en este método, toma la solución del paso anterior y trata de mejorarla
intercambiando un número pequeño de elementos en la solución con aquellos que no están en la
solución o por alguna otra técnica de búsqueda local.
El proceso continua hasta que no es posible mejorar la solución, con esta búsqueda local, de tal
manera que se tiene un mínimo local. Estos métodos se conocen como métodos de búsqueda local
o intercambio heurístico o de descenso. Un óptimo local es bueno o mejor que todas las
soluciones en esta vecindad, pero puede que no sea un óptimo global, es decir, puede que no sea
la mejor solución del problema.
Por esta limitación generalmente se aplica el método de búsqueda local muchas veces, con
soluciones iniciales diferentes y al final se selecciona la mejor de entre todos los mínimos locales.
Esto se conoce como el método de búsqueda local iterado.
En optimización, el adjetivo heurístico, se suele usar para caracterizar a las técnicas por las cuales
se mejora en promedio la solución de cierto problema. Se utilizan algoritmos heurísticos para
obtener “buenas soluciones” (soluciones subóptimas, o cercanas a la óptima global) de problemas
cuyos algoritmos de solución no son factibles en tiempos polinomiales como, por ejemplo, el
problema del agente viajero.
El nombre de metaheurística, combina el prefijo meta del griego (que significa “más allá”, “a un
nivel más alto”) con la palabra heurística, en otras palabras, se puede decir que metaheurística se
refiere a una estrategia de nivel superior que guía a otras heurísticas para buscar soluciones
factibles en dominios donde la tarea es compleja.
Problemas de Optimización
En este capítulo se proporcionan varios ejemplos de problemas clásicos que se utilizan para probar
la eficiencia, robustez y rapidez computacional de algoritmos. En la primera parte se proporcionan
problemas de optimización combinatoria que en su mayoría son del tipo NP difíciles; en la segunda
parte se presentan problemas de optimización continua, así como algunas gráficas de estos.
Ejemplos de Problemas NP
En esta sección se presentan ejemplos de problemas NP. Algunos de los cuales serán retomados
posteriormente.
Problemas P y NP
Un algoritmo es un procedimiento paso a paso para resolver un problema computacional. Para una
entrada dada, genera la salida correcta después de un número finito de pasos. La complejidad de
tiempo o tiempo de ejecución del algoritmo, expresa el número total de operaciones, como
adiciones o comparaciones, como una función del tamaño de la entrada. Se dice que un algoritmo
es polinomial o un algoritmo es de tiempo polinomial, si su tiempo de ejecución está acotado por
un polinomio con variable en el tamaño de entrada. Se dice que un algoritmo es eficiente si su
tiempo de ejecución es polinomial. Los problemas resolubles en tiempo polinomial forman la clase
P y están considerados como problemas factibles a resolver, por ejemplo, un algoritmo muy
conocido es el de ordenamiento por selección, que ordena una lista de enteros de la siguiente
manera:
Encontrar el valor mínimo en la lista.
Intercambiarlo con el primer elemento.
Repetir los pasos para el resto de la lista.
Para ordenar la lista, (3 1 6 8 2), con el método de selección tenemos los siguientes pasos:
(3 1 6 8 2),
(1 3 6 8 2),
(1 2 6 8 3),
(1 2 3 8 6),
(1 2 3 6 8).
Otra clase de problemas, como el agente viajero, son conocidos como problemas NP, donde NP
significa “polinomial no-determinista”. Para estos problemas, no se conocen algoritmos de tiempo
polinomial que los resuelvan, y generalmente se cree que tampoco existen, aunque la pregunta: ¿P
= NP? es decir, si las dos clases de problemas coinciden, es considerada como una de las más
importantes en la ciencias computacionales teóricas.
También hay una subclase importante de problemas NP conocida como NP-Completa, de los
cuales, si se puede demostrar que uno de ellos es resoluble en tiempo polinomial, entonces también
cualquier problema en NP-Completa sería resoluble en tiempo polinomial. Además la clase NP-
Completa tiene interés práctico porque contiene muchos problemas comunes, como el Problema
del Agente Viajero.
Todavía no se pueden resolver los problemas NP-completos con algoritmos eficientes, es decir, de
tiempo polinomial; sin embargo, estos problemas ocurren con frecuencia. ¿Qué podemos hacer?
En parte, depende si se quiere una solución exacta o aproximada al problema. Por ejemplo, si el
tamaño de entrada del problema no es grande, puede ser factible encontrar la solución exacta con
algún método directo. En el caso del Problema del Agente Viajero, la solución más directa es la
de intentar todas las permutaciones de las n ciudades y encontrar la más barata, dando una
complejidad de O(n!). Desafortunadamente, con menos de 100 ciudades vemos, en la Tabla 1 que
rápidamente encontramos problemas, pero puede haber otros enfoques especializados, por ejemplo
con programación dinámica, que reduce la complejidad y permite resolver exactamente para un
número mayor de ciudades; en el problema del agente viajero, se ha ido resolviendo desde 49
ciudades en 1954, al record actual de 85,900 ciudades en 2006, el último tomando 136 años de
tiempo CPU.
Otra posibilidad es utilizar un método heurístico, que no garantiza encontrar la solución exacta,
pero puede encontrar “buenas soluciones” en tiempos razonables. A continuación, se presentan
algunos ejemplos de problemas NP.
Problema de Asignación Cuadrática
Una formulación matemática de esta problemática fue inicialmente planteada por Koopmans y
Beckmann y consiste en minimizar:
𝑛 𝑛
donde 𝜋 es una permutación del conjunto N ={1,..., n } y 𝑎𝑖𝑘 , 𝑏𝑖𝑘 para i, k = 1,...,n, son números
reales. Equivalentemente, se desea encontrar una permutación 𝜋 del conjunto N que minimice el
valor de 𝑓 (𝜋).
Una forma sencilla de interpretar el problema planteado es suponer que existen n sitios disponibles
y se van a construir n edificios en estos lugares. Sea 𝑎𝑖𝑘 la distancia entre el sitio i y el sitio k y
suponga que las cantidades 𝑏𝑗𝑙 denoten el número de personas por semana que viajarán entre el
edificio j y l. El problema es asignar los sitios de construcción de manera que la distancia recorrida
se minimice. Cada asignación puede describirse matemáticamente como una permutación π del
conjunto N ={1,..., n }, mientras que el producto 𝑎𝑖𝑘 𝑏𝜋(𝑖)𝜋(𝑘) describe la distancia semanal
recorrida por la gente que viaja entre los edificios j = 𝜋(𝑖) y l = 𝜋(𝑘) si la construcción j se realiza
en el sitio i y la construcción l se realiza en el sitio k.
0 80 40 30
80 0 30 20
𝑏𝑗𝑙 = [ ]
40 30 0 10
30 20 10 0
que corresponde a la permutación π(i)=i para i=1,2,3,4. Por otro lado, suponga que A se construye
en el sitio d, B en b, C en c y D en a, se tiene la permutación π(1)=4, π(2)=2, π(3)=3, π(4)=1 y el
valor de la función objetivo es ahora.
𝑛 𝑛
Otra interpretación del problema planteado consiste en suponer que n módulos se han colocado en
un tablero y se han conectado por medio de “alambres”. Los módulos deben colocarse de manera
que la longitud total del alambre que los conecta sea mínima.
Denote la distancia entre las posiciones i y k en el tablero por 𝑎𝑖𝑘 . Sea 𝑏𝑗𝑙 el número de conexiones
entre el módulo j y el módulo l. Entonces, una permutación π del conjunto N ={1,..., n } asigna
una posición en el tablero a todo módulo. Si j se sitúa en la posición i y l está situado en la posición
k, el producto 𝑎𝑖𝑘 𝑏𝜋(𝑖)𝜋(𝑘) es la longitud del alambre entre los módulos j=π(i) y l=π(k). Por lo tanto
la longitud total del alambrado es:
𝑛 𝑛
∑ ∑ 𝑎𝑖𝑘 𝑏𝜋(𝑖)𝜋(𝑘)
𝑖=1 𝑘=1
y el problema se reduce a:
𝑛 𝑛
Un conjunto independiente se llama maximal si no existe otro conjunto que sea independiente en
el que esté contenido propiamente. Esto es, un conjunto independiente I es maximal si para todo
conjunto H tal que 𝐼 ⊂ 𝐻 con 𝐼 ⊂≠ 𝐻, se tiene que H no es independiente. Por ejemplo, para la
Figura 3, los conjuntos {1,5,7}, {2,4,6}, {3,6} y {1,8}, son conjuntos independientes maximales
y los conjuntos {1}, {2,6}, {1,5} no son maximales.
En general, existe más de un conjunto independiente maximal para una gráfica dada. También,
como se vio en los ejemplos anteriores, el número de vértices en los conjuntos independientes
maximales no es necesariamente el mismo.
𝛼|𝐺 | = max|𝐼 |
𝐼∈𝑄
se llama el número independiente o de estabilidad de una gráfica G}, y el conjunto I* para el que
se obtiene este número se llama un conjunto independiente máximo. El Problema de Conjunto
Independiente consiste en encontrar dentro de todos los conjuntos independientes I en Q, un
conjunto independiente I* cuya cardinalidad sea máxima; es decir, que tenga el número máximo
de elementos. En la Figura 3, la familia de conjuntos maximales está compuesta por:
el más grande de estos conjuntos tiene 3 elementos y por lo tanto 𝛼 |𝐺 | = 3. Cualquier conjunto
de la familia maximal con 3 elementos es un conjunto independiente máximo, por lo tanto, los
conjuntos independientes máximos para la gráfica de la Figura 3 son: {1,5,7}, {2,4,6} y {2,4,8}.
que identifica a C(i) como el color del vértice i, de forma tal que dos vértices adyacentes no tengan
el mismo color, es decir, {i, j} ∈ E ⇒ C (i) ≠ C (j).
Una coloración de una gráfica G con k colores define una partición del conjunto de vértices en
subconjuntos V1, V2,…, Vk, donde Vj denota los vértices que tienen asignado el color j. Claramente,
cada Vj es un conjunto independiente, al cual se le llama clase de color j o clase cromática j. Se
dice que una k-coloración de G es una coloración que no utiliza más de k colores, y una gráfica es
k-coloreable si admite una k-coloración. Al mínimo valor k tal que G es k-coloreable se le llama
número cromático de la gráfica y se denota por 𝜒(𝐺).
En una gráfica G, el Problema de Coloración Mínima busca una coloración de G que no utilice
más de 𝜒(𝐺) colores.
Problema de Empaquetamiento
El Problema de Empaquetamiento (Bin Packing Problem) consiste en acomodar el mayor número
de objetos (cada uno con determinado peso o valor) en el menor número de contenedores (cajas,
huecos, camiones, etc.). En el problema de empaquetamiento se tienen n objetos a1, a2,…, an, los
cuales tienen un peso w(ai) ∈ (0,1] que serán empaquetados en un número mínimo de contenedores
B1, B2,…, Bm tal que
∑ 𝑤(𝑎𝑖 ) ≤ 1, 1 ≤ 𝑗 ≤ 𝑚
𝑎𝑖 ∈𝐵𝑗
Por ejemplo, si se tienen 5 objetos a1, a2, a3, a4, a5 con pesos w(a1)=0.8, w(a2)=0.6, w(a3)=0.5,
w(a4)=0.2, w(a5)=0.3. Para este ejemplo, el mínimo número de contenedores que se requieren es 3
y una posible solución es: B1 = {a1}, B2 = {a2 , a5}, B3 = {a3, a4}.
Por ejemplo, para la Figura 3, un cubrimiento por vértices está dado por los conjuntos: C1 = {1, 2,
3, 6, 7, 8}, C2 = {1, 3, 5, 6, 7}, C3 = {2, 3, 4, 6, 8}, C4 = {1, 2, 3, 4, 5, 6, 7, 8}. Los conjuntos C2
y C3 son dos posibles soluciones al problema. No existe ningún cubrimiento que tenga 4 o menos
elementos.
En la Figura 3, el conjunto C1 = {3,5,6,8} hace que el conjunto de aristas A1 = {(1,3), (2,5), (2,3),
(3,4), (3,7), (6,7), (7,8)}. Tengan un vértice en C1 y el otro fuera de C1.
Problema de Satisfacibilidad
Una variable booleana x es una variable que toma solamente valores de cierto o falso. Las variables
booleanas pueden combinarse usando los conectores lógicos “o” (denotado aquí por +), “y”
(denotado como multiplicación), y “no” (denotado por ⌐) para formar una expresión booleana, se
hace lo mismo que con variables reales, se combinan con operaciones algebraicas. Por ejemplo,
es una fórmula booleana. Dados los valores de cierto o falso para cada variable, se puede evaluar
la fórmula booleana, justo como una expresión algebraica. Por ejemplo, para la fórmula booleana
anterior tomando x1 = cierto, x2 = cierto, y x3 = falso, la expresión da el valor cierto.
La fórmula anterior puede hacerse cierta para algunas asignaciones. Tal fórmula booleana se dice
que es satisfacible. No todas las fórmulas son satisfacibles; hay algunas que no se pueden hacer
ciertas para ninguna asignación, esencialmente porque tienen alguna “contradicción”. Por ejemplo,
considere
Para que la fórmula anterior sea cierta, todas las subfórmulas dentro de paréntesis (llamadas
cláusulas) que contienen literales (esto es, variables o negaciones) deben ser ciertas. La primera
cláusula dice que al menos una de las variables debe ser cierta. Las siguientes tres cláusulas forzan
a todas las variables a tener el mismo valor y como al menos una debe ser cierta (de la primera
cláusula), entonces todas deben ser ciertas. A pesar de esto, la última cláusula requiere que no
todas sean ciertas, y así la fórmula contiene una contradicción, por lo tanto es no satisfacible. El
problema de satisfacibilidad se puede enunciar como:
Dadas m cláusulas C1,..., Cm que contienen las variables x1,..., xn, ¿Es la fórmula 𝐶1 ∙ 𝐶2 ⋯ 𝐶𝑚
satisfacible?
Problema de la Mochila
Dado un conjunto U = { a1, a2,…, an}, de n elementos con pesos pi, i=1,2,…, n y un parámetro B
> 0. El objetivo es encontrar un subconjunto U' ⊂ U tal que
∑ 𝑝𝑗 ≤ 𝐵
𝑗∈𝑈 ′
Cuadrados Mágicos.
Dada una matriz de 4x4 como:
16 3 2 13
5 10 11 8
[ ]
9 6 7 12
4 15 14 1
Esta matriz no es un arreglo al azar. Todos los enteros del 1 al 16 se usan, la suma de cada renglón,
columna y las dos diagonales son iguales a 34. Este tipo de matrices se conocen como cuadrados
mágicos. Hay cuadrados mágicos de cualquier tamaño, excepto de 2x2. Claramente la suma común
de los renglones columnas y diagonales está en función de n. Para n = 3, la suma es 15.
17 24 1 8 15
16 3 2 13
8 1 6 23 5 7 14 16
5 10 11 8
[3 5 7] [ ] 4 6 13 20 22
9 6 7 12
4 9 2 10 12 19 21 3
4 15 14 1 [11 18 25 2 9]
Así, el problema de Cuadrados Mágicos (Magic Squares) es a partir de un valor entero n > 2 se
debe construir una matriz cuadrada de n x n con entradas del 1 al n x n tal que la suma de cada
renglón, columna y las dos diagonales son iguales a una constante que depende del valor n.
En el caso general, el objetivo del Sudoku es llenar una cuadrícula de n2 x n2 celdas, dividida en
n2 subcuadrículas de n x n en donde se deben colocar los enteros del 1 a n2 de acuerdo a los
siguientes tres reglas:
1. Las celdas de cada uno de los renglones deben contener los enteros de 1 a n2 exactamente
una vez.
2. Las celdas de cada una de las columnas deben contener los enteros de 1 a n2 exactamente
una vez.
3. Cada una de las subcuadrículas deben contener los enteros de 1 a n2 exactamente una vez.
Figura 4. Sudoku.
A continuación, definimos algunas de las funciones que se han utilizadas (Molga, Michalewicz),
formulando todos los problemas para minimización.
La función de Ackley
La función de Ackley es una función multimodal. Está definida por:
𝑥𝑖2
−0.2√∑𝑁
𝑖=1 𝑁 𝑁
(𝑓(𝑥1 , 𝑥2 , . . . , 𝑥𝑛 ) = −20 𝑒 − 𝑒 (∑𝑖=1 cos 2𝜋𝑥𝑖 )/𝑁 + 20 + 𝑒1
-32.768 ≤ xi ≤ 32.768, i = 1, 2, …, N.
-5 ≤ x ≤10, 0 ≤ y ≤ 15
2 − (𝑦−𝜋)2
𝑓 (𝑥, 𝑦) = −cos(𝑥 )cos(𝑦)exp−(𝑥−𝜋)
-100 ≤ x,y ≤ 100.