La generación de columnas o la generación de columnas retardada es un algoritmo eficiente para resolver grandes programas lineales . [ 1 ]
La idea principal es que muchos programas lineales son demasiado extensos para considerar explícitamente todas las variables. Por lo tanto, se propone comenzar resolviendo el programa considerando solo un subconjunto de sus variables. Luego, de forma iterativa, se añaden al programa variables que tienen el potencial de mejorar la función objetivo . Una vez que se demuestra que añadir nuevas variables ya no mejora el valor de la función objetivo, el procedimiento se detiene. Al aplicar un algoritmo de generación de columnas, se espera que solo se genere una fracción muy pequeña de las variables. Esta expectativa se ve respaldada por el hecho de que, en la solución óptima , la mayoría de las variables no serán básicas y tomarán un valor de cero, por lo que la solución óptima puede encontrarse sin ellas.
En muchos casos, este método permite resolver grandes programas lineales que de otro modo serían intratables. El ejemplo clásico de un problema donde se utiliza con éxito es el problema de corte de material . Una técnica particular en programación lineal que utiliza este tipo de enfoque es el algoritmo de descomposición de Dantzig-Wolfe . Además, la generación de columnas se ha aplicado a muchos problemas, como la programación de cuadrillas , el enrutamiento de vehículos y el problema de la p-mediana con capacidad limitada .
Algoritmo
El algoritmo considera dos problemas: el problema principal y el subproblema. El problema principal es el problema original con solo un subconjunto de variables. El subproblema es un nuevo problema creado para identificar una variable que mejore la función objetivo del problema principal.
El algoritmo procede entonces de la siguiente manera:
- Inicializar el problema maestro y el subproblema.
- Resuelve el problema maestro
- Búsqueda de una variable que mejore el subproblema.
- Si se encuentra una variable que mejora: agréguela al problema principal y luego vaya al paso 2.
- De lo contrario: La solución del problema principal es óptima. Detenerse.
Encontrar una variable de mejora
La parte más difícil de este procedimiento es encontrar una variable que mejore la función objetivo del problema principal. Esto se puede lograr identificando la variable con el costo reducido más negativo (suponiendo, sin pérdida de generalidad , que el problema es de minimización). Si ninguna variable tiene un costo reducido negativo, entonces la solución actual del problema principal es óptima.
Cuando el número de variables es muy grande, no es posible encontrar una variable que mejore el rendimiento calculando todos los costos reducidos y eligiendo una variable con un costo reducido negativo. Por lo tanto, la idea es calcular solo la variable con el costo reducido mínimo. Esto se puede hacer utilizando un problema de optimización llamado subproblema de precios, que depende en gran medida de la estructura del problema original. La función objetivo del subproblema es el costo reducido de la variable buscada con respecto a las variables duales actuales, y las restricciones requieren que la variable cumpla con las restricciones que surgen naturalmente. El método de generación de columnas es particularmente eficiente cuando esta estructura permite resolver el subproblema con un algoritmo eficiente, típicamente un algoritmo combinatorio específico .
A continuación, detallamos cómo y por qué calcular el costo reducido de las variables. Consideremos el siguiente programa lineal en forma estándar:
que denominaremos problema primal, así como su programa lineal dual :
Además, dejemosysean soluciones óptimas para estos dos problemas que pueden ser proporcionadas por cualquier solucionador lineal. Estas soluciones verifican las restricciones de su programa lineal y, por dualidad , tienen el mismo valor de función objetivo () que llamaremosEste valor óptimo es función de los diferentes coeficientes del problema primal:Nótese que existe una variable dual.para cada restricción del modelo lineal primal. Es posible demostrar que una variable dual óptimapuede interpretarse como la derivada parcial del valor óptimode la función objetivo con respecto al coeficientedel lado derecho de las restricciones:o de otro modoDicho de forma más sencilla,indica en cuánto aumenta localmente el valor óptimo de la función objetivo cuando el coeficienteaumenta en una unidad.
Consideremos ahora que una variableNo se había considerado hasta entonces en el problema primal. Nótese que esto es equivalente a decir que la variableestaba presente en el modelo pero tomó un valor cero. Ahora observaremos el impacto en el problema primal de cambiar el valor dedea. Siyson respectivamente los coeficientes asociados con la variableEn la función objetivo y en las restricciones, el programa lineal se modifica de la siguiente manera:
Para saber si es interesante añadir la variableal problema ( es decir , dejar que tome un valor distinto de cero), queremos saber si el valorde la función objetivo de este nuevo problema disminuye a medida que el valorde la variableaumenta. En otras palabras, queremos saberPara ello, tenga en cuenta quepuede expresarse según el valor de la función objetivo del problema primal inicial:. Entonces podemos calcular la derivada que nos interesa:
En otras palabras, el impacto de cambiar el valorsobre el valorEsto se traduce en dos términos. Primero, este cambio impacta directamente la función objetivo y, segundo, se modifica el lado derecho de las restricciones, lo que tiene un impacto en las variables óptimas.cuya magnitud se mide utilizando las variables duales. El derivadoGeneralmente se denomina costo reducido de la variabley se denotará poren lo siguiente.
Referencias
- Algoritmos y métodos de optimización
- Fragmentos de matemáticas aplicadas