Un problema de programación entera es un programa matemático de optimización o viabilidad en el que algunas o todas las variables están restringidas a ser números enteros . En muchos entornos, el término se refiere a la programación lineal entera (ILP), en la que la función objetivo y las restricciones (distintas de las restricciones enteras) son lineales .
La programación entera es NP-completa . En particular, el caso especial de programación lineal entera 0-1, en el que las incógnitas son binarias y solo se deben satisfacer las restricciones, es uno de los 21 problemas NP-completos de Karp . [1]
Si algunas variables de decisión no son discretas, el problema se conoce como un problema de programación entera mixta . [2]
En la programación lineal entera, la forma canónica es distinta de la forma estándar . Un programa lineal entero en forma canónica se expresa así (nótese que es el vector el que se debe decidir): [3]
y un ILP en forma estándar se expresa como
donde son vectores y es una matriz. Al igual que con los programas lineales, los ILP que no están en forma estándar se pueden convertir a forma estándar eliminando desigualdades, introduciendo variables de holgura ( ) y reemplazando variables que no están restringidas por signos con la diferencia de dos variables restringidas por signos.
El gráfico de la derecha muestra el siguiente problema.
Los puntos enteros factibles se muestran en rojo, y las líneas discontinuas rojas indican su envoltura convexa, que es el poliedro convexo más pequeño que contiene todos estos puntos. Las líneas azules junto con los ejes de coordenadas definen el poliedro de la relajación LP, que está dado por las desigualdades sin la restricción de integralidad. El objetivo de la optimización es mover la línea discontinua negra hacia arriba lo más lejos posible sin dejar de tocar el poliedro. Las soluciones óptimas del problema entero son los puntos y ambos tienen un valor objetivo de 2. El óptimo único de la relajación es con valor objetivo de 2,8. Si la solución de la relajación se redondea a los enteros más cercanos, no es factible para el ILP.
Lo que sigue es una reducción de la cobertura mínima de vértices a la programación entera que servirá como prueba de la dureza NP.
Sea un grafo no dirigido. Definamos un programa lineal de la siguiente manera:
Dado que las restricciones limitan a 0 o 1, cualquier solución factible para el programa entero es un subconjunto de vértices. La primera restricción implica que al menos un punto final de cada arista está incluido en este subconjunto. Por lo tanto, la solución describe una cobertura de vértices. Además, dada una cobertura de vértices C, se puede establecer en 1 para cualquier y en 0 para cualquier, lo que nos da una solución factible para el programa entero. Por lo tanto, podemos concluir que si minimizamos la suma de , también hemos encontrado la cobertura de vértices mínima. [4]
La programación lineal de enteros mixtos ( MILP ) implica problemas en los que solo algunas de las variables, , están restringidas a ser números enteros, mientras que se permite que otras variables no sean números enteros.
La programación lineal cero-uno (o programación entera binaria ) implica problemas en los que las variables están restringidas a ser 0 o 1. Cualquier variable entera acotada se puede expresar como una combinación de variables binarias . [5] Por ejemplo, dada una variable entera, , la variable se puede expresar utilizando variables binarias:
Hay dos razones principales para utilizar variables enteras al modelar problemas como un programa lineal:
Estas consideraciones ocurren con frecuencia en la práctica, por lo que la programación lineal entera se puede utilizar en muchas áreas de aplicación, algunas de las cuales se describen brevemente a continuación.
La programación entera mixta tiene muchas aplicaciones en la producción industrial, incluida la modelización de talleres. Un ejemplo importante se da en la planificación de la producción agrícola e implica determinar el rendimiento de la producción de varios cultivos que pueden compartir recursos (por ejemplo, tierra, mano de obra, capital, semillas, fertilizantes, etc.). Un posible objetivo es maximizar la producción total, sin exceder los recursos disponibles. En algunos casos, esto se puede expresar en términos de un programa lineal, pero las variables deben estar restringidas para que sean números enteros.
Estos problemas involucran la programación de servicios y vehículos en redes de transporte. Por ejemplo, un problema puede involucrar la asignación de autobuses o subterráneos a rutas individuales para que se pueda cumplir un horario, y también para equiparlos con conductores. Aquí las variables de decisión binarias indican si un autobús o subterráneo está asignado a una ruta y si un conductor está asignado a un tren o subterráneo en particular. La técnica de programación cero-uno se ha aplicado con éxito para resolver un problema de selección de proyectos en el que los proyectos son mutuamente excluyentes y/o tecnológicamente interdependientes. Se utiliza en un caso especial de programación entera, en el que todas las variables de decisión son números enteros. Variable puede asumir solo los valores cero o uno.
Los problemas de compartimentación o deslindamiento territorial consisten en dividir una región geográfica en distritos para planificar determinadas operaciones teniendo en cuenta diferentes criterios o restricciones. Algunos requisitos de este problema son: contigüidad, compacidad, equilibrio o equidad, respeto de los límites naturales y homogeneidad socioeconómica. Algunas aplicaciones de este tipo de problemas son: deslindamiento político, deslindamiento escolar, deslindamiento de servicios de salud y deslindamiento de gestión de residuos.
El objetivo de estos problemas es diseñar una red de líneas para instalar de manera que se cumpla un conjunto predefinido de requisitos de comunicación y el costo total de la red sea mínimo. [6] Esto requiere optimizar tanto la topología de la red como la configuración de las capacidades de las distintas líneas. En muchos casos, las capacidades están limitadas a cantidades enteras. Por lo general, existen, según la tecnología utilizada, restricciones adicionales que se pueden modelar como desigualdades lineales con variables enteras o binarias.
La tarea de planificación de frecuencias en redes móviles GSM implica distribuir las frecuencias disponibles entre las antenas de modo que los usuarios puedan ser atendidos y se minimice la interferencia entre las antenas. [7] Este problema se puede formular como un programa lineal entero en el que las variables binarias indican si una frecuencia está asignada a una antena.
La forma ingenua de resolver un problema de programación in vitro es simplemente eliminar la restricción de que x es un número entero, resolver el problema de programación in vitro correspondiente (llamado relajación de programación in vitro) y luego redondear las entradas de la solución a la relajación de programación in vitro. Pero, no sólo puede ser que esta solución no sea óptima, sino que incluso puede no ser factible; es decir, puede violar alguna restricción.
Si bien en general no se garantiza que la solución de la relajación LP sea integral, si el ILP tiene la forma tal que donde y tienen todas las entradas enteras y es totalmente unimodular , entonces toda solución factible básica es integral. En consecuencia, se garantiza que la solución devuelta por el algoritmo símplex es integral. Para demostrar que toda solución factible básica es integral, sea una solución factible básica arbitraria . Como es factible, sabemos que . Sean los elementos correspondientes a las columnas de la base para la solución básica . Por definición de una base, existe una submatriz cuadrada de con columnas linealmente independientes tales que .
Dado que las columnas de son linealmente independientes y es cuadrada, no es singular y, por lo tanto, por suposición, es unimodular y, por lo tanto , . Además, dado que no es singular, es invertible y, por lo tanto , . Por definición, . Aquí denota el adjunto de y es integral porque es integral. Por lo tanto, Por lo tanto, si la matriz de un ILP es totalmente unimodular, en lugar de utilizar un algoritmo ILP, se puede utilizar el método simplex para resolver la relajación LP y la solución será entera.
Cuando la matriz no es totalmente unimodular, existen diversos algoritmos que se pueden utilizar para resolver programas lineales enteros de manera exacta. Una clase de algoritmos son los métodos de plano de corte , que funcionan resolviendo la relajación de PL y luego agregando restricciones lineales que conducen la solución hacia un entero sin excluir ningún punto factible entero.
Otra clase de algoritmos son las variantes del método de ramificación y acotación . Por ejemplo, el método de ramificación y corte que combina los métodos de ramificación y acotación y de plano de corte. Los algoritmos de ramificación y acotación tienen una serie de ventajas sobre los algoritmos que solo utilizan planos de corte. Una ventaja es que los algoritmos pueden terminarse antes y, siempre que se haya encontrado al menos una solución integral, se puede devolver una solución factible, aunque no necesariamente óptima. Además, las soluciones de las relajaciones de LP se pueden utilizar para proporcionar una estimación del peor caso posible de qué tan lejos de la optimalidad se encuentra la solución devuelta. Finalmente, los métodos de ramificación y acotación se pueden utilizar para devolver múltiples soluciones óptimas.
Supongamos que es una matriz de números enteros de m por n y es un vector de números enteros de m por 1. Nos centramos en el problema de viabilidad, que consiste en decidir si existe un vector de números enteros de n por 1 que satisfaga .
Sea V el valor absoluto máximo de los coeficientes en y . Si n (el número de variables) es una constante fija, entonces el problema de viabilidad puede resolverse en un polinomio de tiempo en m y log V . Esto es trivial para el caso n = 1. El caso n = 2 fue resuelto en 1981 por Herbert Scarf . [13] El caso general fue resuelto en 1983 por Hendrik Lenstra , combinando ideas de László Lovász y Peter van Emde Boas . [14] El teorema de Doignon afirma que un programa entero es factible siempre que cada subconjunto de restricciones sea factible; un método que combina este resultado con algoritmos para problemas de tipo LP puede usarse para resolver programas enteros en el tiempo que son lineales en y manejables con parámetros fijos (FPT) en , pero posiblemente doblemente exponenciales en , sin dependencia de . [15]
En el caso especial de 0-1 ILP, el algoritmo de Lenstra es equivalente a una enumeración completa: el número de todas las soluciones posibles es fijo (2 n ), y la comprobación de la viabilidad de cada solución se puede realizar en el tiempo poly( m , log V ). En el caso general, donde cada variable puede ser un entero arbitrario, la enumeración completa es imposible. Aquí, el algoritmo de Lenstra utiliza ideas de la Geometría de los números . Transforma el problema original en uno equivalente con la siguiente propiedad: o bien la existencia de una solución es obvia, o bien el valor de (la n -ésima variable) pertenece a un intervalo cuya longitud está acotada por una función de n . En el último caso, el problema se reduce a un número acotado de problemas de menor dimensión. La complejidad en tiempo de ejecución del algoritmo se ha mejorado en varios pasos:
Estos algoritmos también se pueden utilizar para programas lineales enteros mixtos (MILP): programas en los que algunas variables son enteras y otras son reales. [23] El algoritmo original de Lenstra [14] : Sec.5 tiene tiempo de ejecución , donde n es el número de variables enteras, d es el número de variables continuas y L es el tamaño de codificación binaria del problema. Utilizando técnicas de algoritmos posteriores, el factor se puede mejorar a o a . [23]
Dado que la programación lineal entera es NP-hard , muchas instancias de problemas son intratables y, por lo tanto, se deben utilizar métodos heurísticos en su lugar. Por ejemplo, la búsqueda tabú se puede utilizar para buscar soluciones a los ILP. [24] Para utilizar la búsqueda tabú para resolver ILP, los movimientos se pueden definir como incrementar o decrementar una variable entera restringida de una solución factible mientras se mantienen constantes todas las demás variables enteras restringidas. Luego se resuelven las variables no restringidas. La memoria de corto plazo puede consistir en soluciones previamente probadas, mientras que la memoria de mediano plazo puede consistir en valores para las variables enteras restringidas que han resultado en valores objetivos altos (asumiendo que el ILP es un problema de maximización). Finalmente, la memoria de largo plazo puede guiar la búsqueda hacia valores enteros que no se han probado previamente.
Otros métodos heurísticos que se pueden aplicar a los ILP incluyen:
También existen otras heurísticas específicas para cada problema, como la heurística k-opt para el problema del viajante de comercio. Una desventaja de los métodos heurísticos es que si no logran encontrar una solución, no se puede determinar si es porque no existe una solución factible o si el algoritmo simplemente no pudo encontrarla. Además, suele ser imposible cuantificar cuán cerca de la solución óptima está la solución obtenida con estos métodos.
A menudo ocurre que la matriz que define el programa entero es dispersa . En particular, esto ocurre cuando la matriz tiene una estructura de bloques , que es el caso en muchas aplicaciones. La escasez de la matriz se puede medir de la siguiente manera. El gráfico de tiene vértices correspondientes a columnas de y dos columnas forman una arista si tiene una fila donde ambas columnas tienen entradas distintas de cero. De manera equivalente, los vértices corresponden a variables y dos variables forman una arista si comparten una desigualdad. La medida de escasez de es el mínimo de la profundidad del árbol del gráfico de y la profundidad del árbol del gráfico de la transpuesta de . Sea la medida numérica de definida como el valor absoluto máximo de cualquier entrada de . Sea el número de variables del programa entero. Luego se demostró en 2018 [25] que la programación entera se puede resolver en un tiempo manejable de parámetros fijos y fuertemente polinomial parametrizado por y . Es decir, para alguna función computable y alguna constante , la programación entera se puede resolver en el tiempo . En particular, el tiempo es independiente del lado derecho y de la función objetivo . Además, a diferencia del resultado clásico de Lenstra, donde el número de variables es un parámetro, aquí el número de variables es una parte variable de la entrada.