Usuario:Heinrich Puschmann/Algoritmo Símplex (Borrador)

De Wikipedia, la enciclopedia libre

Este artículo se refiere a los algoritmos Símplex de la optimización lineal. Para el algoritmo de Nelder-Mead, véase en ese lugar.
Artículo publicado (desplazar hacia "Algoritmo Símplex")


Un sistema de desigualdades lineales define una región factible de forma poliedrica. El algoritmo Símplex comienza en un vértice del poliedro y se mueve a lo largo de las aristas hasta alcanzar un vértice de la solución óptima.
Ejemplo gráfico de la solución óptima

En optimización matemática, el término algoritmo Símplex habitualmente se refiere a un conjunto de métodos muy usados para resolver problemas de programación lineal, en los cuales se busca el máximo de una función lineal sobre un conjunto de variables que satisfaga un conjunto de inecuaciones lineales. Un algoritmo Símplex es un caso particular de algoritmo de pivote.

El primero de estos algoritmos fue desarrollado por el matemático norteamericano George Dantzig en 1947, y procede examinando vértices adyacentes del poliedro de soluciones. En la revista SIAM News (Volumen 33, número 4), el método Símplex fue elegido como uno de los 10 algoritmos más importantes del siglo veinte.

Un método llamado de manera similar, pero no relacionado al anterior, es el método Nelder-Mead (1965) o método de descenso (o ascenso) símplex; un método numérico que busca un mínimo (o máximo) local de una función cualquiera examinando en cada paso los vértices de un simplex.


Preparación del problema[editar]

Aislamiento de inecuaciones[editar]

En su esencia, un algoritmo Símplex busca soluciones a un sistema de inecuaciones y ecuaciones lineales, o sea, un sistema que consiste en desigualdades e igualdades entre expresiones lineal afines de variables, por ejemplo:

Tal sistema se debe llevar a una forma adecuada para la aplicación del algoritmo. Agrupando los términos de igual variable, estas restricciones pueden ordenarse para dejarlas en la forma

Procedemos ahora a separar las restricciones en igualdades, cuyo manejo es bien conocido, y en inecuaciones en su forma más simple posible, que son condiciones de nonegatividad de variables:

Para problemas no demasiado grandes, ésta es una forma adecuada para implementar el algoritmo Símplex en el computador. Sin embargo, para fines teóricos y para ilustrar mejor los pasos del algoritmo, el problema se puede llevar también a una forma más simétrica, donde todas las variables deben cumplir las mismas condiciones de nonegatividad, .

Forma estándar diccionario[editar]

En un sentido minimalista, las especificaciones "y ecuaciones", "e igualdades" podrían omitirse, ya que toda igualdad entre dos expresiones puede sustiuirse de manera trivial por dos desigualdades, obteniendose un sistema de inecuaciones solamente. Para permitir que variables básicas nulas como tomen valores nonegativos, se duplican las ecuaciones correspondientes en el sistema:

.

Para restringir las variables independientes libres como a valores nonegativos, se sustituyen estas por diferencias de dos variables auxiliares:

   y
.

Aplicando todas estas transformaciones al ejemplo anterior se obteniene el sistema

Con el sistema de ecuaciones e inecuaciones en esta última forma, llamada forma diccionario[1]​, se procede a aplicar el algoritmo en su llamada "Fase 1" para encontrar una solución que satisfaga las restricciones. Como tal solución (si es que existe) habitualmente no es única, a menudo se trata de "mejorarla", continuando con una "Fase 2" del algoritmo. En ella se define una función lineal especial de las variables, llamada función objetivo, y se busca de entre todas las soluciones que cumplan con las restricciones alguna que maximice el valor de tal función objetivo.

Procedimiento general[editar]

Un algoritmo Símplex Primal en su forma más simple parte de un sistema especialmente arreglado de ecuaciones lineales, cuyas variables todas, excepto tal vez una, deben tomar valores no negativos. Para aplicar el algoritmo, el sistema de ecuaciones debe tener una forma especial, la más simple de ellas siendo la siguiente forma diccionario:[2][1]

donde los son números reales (en la práctica casi siempre números racionales). Este formato especifica que se busca valores para las incógnitas , que satisfagan las ecuaciones e inecuaciones del sistema anterior de modo tal que la variable objetivo tome el mayor valor posible.

Todo sistema de inecuaciones o ecuaciones lineales, con variables nonegativas o irrestrictas, puede siempre convertirse a la forma diccionario. Al convertir un problema a esa forma no disminuye el número de desigualdades; estas permanecen en su totalidad y sólo se convierten en condiciones de no-negatividad de algunas variables.


Definiendo los conjuntos de índices

se escribirá esto en lo que sigue de la forma más compacta


En adición a la forma diccionario, el algoritmo Símplex requiere que se cumpla .   Es fácil llevar un problema de optimización lineal a la forma diccionario general, donde los tienen signos arbitrarios; la dificultad reside en lograr las condiciones de factibilidad,   .

En cada iteración de un algoritmo de pivote se destaca un conjunto de variables independientes, mientras que las restantes son variables dependientes y se expresan como funciones lineales de las primeras. Al pasar de una iteración a la siguiente se intercambia una variable independiente por una dependiente; tales pares de variables se denominan pivotes.

Condiciones de optimalidad[editar]

En caso de que se cumpla la siguiente condición de optimalidad,

  •   para todo  ,

podemos obtener una solución óptima al problema anterior, asignando a las variables independientes del sistema los valores . Ello es así porque las variables independientes de toda solución alternativa al problema deben tomar valores nonegativos, con lo cual esa solución alternativa satisface la relación .

( Por ejemplo, en el siguiente sistema,

las condiciones de optimalidad son violadas en ambas variables independientes, ya que    y  .  Por tanto, no podemos descartar la posibilidad de aumentar el valor que adopta la variable objetivo    eligiendo conjuntos de variables independientes como .)

Transformación de las ecuaciones[editar]

En el caso habitual de que las condiciones de optimalidad no se cumplan, puede reformularse el sistema de ecuaciones, eligiendo adecuadamente un nuevo subconjunto de entre las incógnitas, y expresando las incógnitas elegidas en función de las incógnitas restantes.  Sea un reordenamiento de las variables. A partir de los conjuntos de índices

que dividen las variables del sistema en variables independientes con y las llamadas variables básicas con , se construye entonces el sistema:

Nótese que coeficientes como existen sólo para pares de subíndices con y con . En cada iteración, los coeficientes del sistema así modificado vuelven a examinarse para ver si satisfacen las condiciones de optimalidad

  •   para todo  ,

y de este modo generan una posible solución al problema. Un resultado estándar de la Programación Lineal establece que todo problema que tiene soluciones óptimas también posee un conjunto de variables básicas que genera a una de ellas.[2][1]​ Si los coeficientes del sistema satisfacen las condiciones de optimalidad, se dice que las variables básicas forman una base optimal del problema.

Elección de los pivotes[editar]

Un coeficiente no nulo del sistema de ecuaciones se llama elemento pivote, porque permite despejar la variable independiente en lugar de la variable básica para así seguir buscando una solución al problema. Sin embargo, un algoritmo Símplex primal de no eligen un elemento pivote cualquiera, sino solamente aquellos que garanticen los siguiente dos objetivos:

  • La solución básica generada por el nuevo sistema debe tener un valor objetivo no inferior al del sistema anterior. Para que ello se cumpla se elige algún con . Si no existe tal coeficiente, el sistema obtenido es optimal y genera uns solución básica óptima.
  • El nuevo sistema es factible, es decir, también satisface . Para que ello se cumpla se elige algún con . Si no existe ningún el problema tiene valores objetivos arbitrariamente grandes por lo que no hay solución óptima.

( En el ejemplo anterior,

podemos elegir la variable independiente para ser despejada, por cumplirse , ó también la variable independiente por cumplirse . En caso de elegir , esa variable debe obligadamente sustituír a la variable básica , ya que .)

Las reglas según las cuales el pivote es elegido dependen del algoritmo Símplex particular. La elección descrita impide que en dos iteraciones sucesivas se elija el mismo pivote. No obstante, es posible la existencia de ciclos más largos, y debe imponerse que el algoritmo termine en un número finito de pasos, lo que no sucede con una elección de pivotes inadecuada.

Como se puede observar de las definiciones anteriores, una base optimal no tiene pivotes admisibles, por lo que el algoritmo no puede ser continuado a partir de una base optimal. Por otro lado, es fácil demostrar con argumentos similares a los expuestos que una base no optimal sin pivotes admisibles siempre pertenece a un problema sin solución; sea esto, porque el sistema de ecuaciones e inecuaciones no tiene solución alguna (problema infactible), o porque existen soluciones con un valor objetivo arbitrariamente grande (problema no acotado).

Cuadros Símplex[editar]

Considerar un problema de programación lineal,

maximizar
sujeto a

El algoritmo Símplex requiere que la matriz del problema esté en su forma aumentada. El problema puede ser descrito como sigue:

Maximizar en:

donde x son las variables desde la forma estándar, xs son las variables de holgura introducidas en el proceso de aumentación, c contiene los coeficientes de optimización, describe el sistema de ecuaciones contraídas, y Z es la variable a ser maximizada.

El sistema de pivotes está típicamente no determinado, ya que el número de variables excede el número de ecuaciones. La diferencia entre el número de variables y el número de ecuaciones nos da los grados de libertad asociados al problema. Cualquier solución, óptima o no, incluirá un número de variables de valor arbitrario. El algoritmo Símplex usa cero como valor arbitrario, y el número de variables con valor cero es igual a los grados de libertad.

Las variables con valores diferentes de cero serán llamadas "variables básicas", las demás "variables no básicas".

Esta forma simplifica el encontrar la solución factible básica inicial, dado que todas las variables de la forma estándar pueden ser elegidas para ser no básicas (cero), mientras que todas las nuevas variables introducidas en la forma aumentada, serán básicas (diferentes de cero), dado que su valor puede ser calculado trivialmente ( para ellas, dado que la matriz problema aumentada en diagonal es su lado derecho)

En cada una de las desigualdades que se plantean en el modelo matemático de programación lineal, se plantean desigualdades de <, >, ≤, ≥ o =; estas desigualdades se convierten en igualdades completando con variables de holgura si se trata de menor o igual que, o menor que; en el caso de que sea mayor o igual que o mayor que, se completa con variables de excedente, estas con signo negativo ya que como su nombre lo indica, es una cantidad que esta de excedente y hay que quitar para convertirla en igualdad; en caso se maneje el =, se manejan las variables artificiales.

Ejemplo de algoritmo Símplex[editar]

En el siguiente ejemplo buscamos valores no negativos para las variables que satisfagan el sistema de ecuaciones

de modo que la variable adicional , llamada variable objetivo, alcance el máximo valor posible. El sistema presentado aquí ya tiene la forma de diccionario y es factible, es decir satisface , por lo que podemos obviar la búsqueda de un sistema inicial adecuado, y proceder directamente a aplicar un algoritmo Símplex Primal propiamente tal. Usaremos para ello las reglas de Bland[3]​ para elegir el pivote en cada uno de los pasos:

  1. Elija el menor que satisfaga .   (Otros algoritmos Símplex eligen siempre algún que satisfaga esa propiedad)
  2. Elija el menor que satisfaga .   (Otros algoritmos Símplex eligen siempre algún que satisfaga esa propiedad)

Para no incurrir en errores de redondeo, trabajaremos en lo que sigue con números enteros, y evitaremos dividir por el coeficiente de las variables despejadas en los sistemas de ecuaciones. Habrá casos en que alguna de las ecuaciones se pueda simplificar dividiéndola por un factor común, pero no es aconsejable hacer esto, sino llevar un mismo denominador común para todos los coeficientes del sistema. De este modo, las divisiones que figuran en las transformaciones sucesivas darán siempre resultados enteros.[4][5]

El siguiente esquema muestra cómo cambian los coeficientes de un sistema de ecuaciones al pasar de una iteración a la siguiente:

   

En este esquema, el símbolo es el único y común denominador del sistema de ecuaciones, el símbolo es el numerador del elemento pivote, el símbolo representa cualquier otro coeficiente correspondiente a la ecuación de la variable básica del pivote, el representa cualquier otro coeficiente que multiplica la variable independiente que corresponde al pivote, y representa cualquiera de los coeficientes restantes. Los coeficientes de la función a maximizarse () y de los términos constantes del sistema () se modifican de la misma manera.


El sistema de ecuaciones inicial del ejemplo es

Para el sistema de ecuaciones inicial, un algoritmo Símplex Primal admite dos pivotes posibles: despejar la variable independiente en lugar de la variable básica , o bien despejar la variable en lugar de la variable . Sin embargo, la regla de Bland prescribe que elijamos la primera de estas alternativas, por contener esta la variable independiente con subíndice menor que la segunda. De ese modo se obtiene un nuevo sistema

En este sistema el único pivote posible para un algoritmo Símplex Primal consiste en despejar la variable independiente en lugar de la variable básica . El nuevo sistema obtenido es

Aquí el sistema de ecuaciones nuevamente presenta un único pivote posible, que consiste en cambiar la variable independiente por la variable básica . Ahora obtenemos el sistema

Este sistema de ecuaciones es optimal, y los valores de las variables en la solución óptima correspondiente son

          


Búsqueda de un sistema factible[editar]

Formas alternativas de presentación[editar]

Forma estándar

Es la igualación de las restricciones del modelo planteado, así como el aumento de variables de holgura, o bien la resta de variables de exceso.

Forma canónica

En el método Símplex es de bastante utilidad la forma canónica, especialmente para explorar la relación de dualidad.
Un problema de Programación Lineal se encuentra en la forma canónica si se cumplen las siguientes condiciones:
Para el caso de la forma canónica de maximización:
- La función objetivo debe ser de maximización.
- Las restricciones son del tipo ≤.
- Las variables de decisión son mayores o iguales a cero.
Para el caso de la forma canónica de la dieta:
- La función objetivo es minimizada.
- Las restricciones son de tipo ≥.
- Las variables de decisión son mayores o iguales a cero.

Modelo Ampliado

Cuando se introduce en cada restricción una variable artificial que no contenga una variable de holgura.

[Introducir un ejemplo con ecuaciones en este lugar]

Conceptos varios[editar]

Tabla Símplex: Es una de varias estructuras de datos posibles que contiene los coeficientes de un sistema de pivoteo.

Variable de entrada: Es la variable independiente que se despeja en cada iteración y con ello se convierte en variable básica. En la primera iteración del ejemplo anterior, la variale de entrada es .

Variable de salida: Es la variable básica que se sustituye por una variable independiente en cada iteración y se convierte en independiente ella misma. En la primera iteración del ejemplo anterior, la variale de entrada es .

Base: Es el conjunto de las variables básicas. En la primera iteración del ejemplo anterior, la base está formada por las variables en .

Solución básica: Es la solución que se obtiene a partir de un sistema de pivoteo cuando las variables independientes adopten el valor cero. Corresponde a un vértice del conjunto de soluciones que satisfacen las restricciones del problema.

Solución básica degenerada: Es una solución básica con una variable básica igual a cero. Corresponde a un vértice sobredefinido del conjunto de soluciones del problema, en el sentido de que por él pasan más planos delimitadores que los estrictamente necesarios.

Variable libre o no restringida: Es una variable en la formulación original del problema que puede tomar cualquier valor real, y no está restringida a valores nonegativos. A excepción de la variable objetivo, variables libres no pueden aparecer en la forma diccionario de un problema, ni en otras formas estándar. Una manera de eliminarlas es sustituyéndo un libre por .

Variable artificial : Es una variable que no figura en la formulación original del problema, y que se introduce para dar al problema una forma canónica, como por ejemplo la forma diccionario. Estas variables se usan a menudo en una fase 1 del algoritmo, para obtener una sistema factible inicial.

Función objetivo: Es la función lineal afín que define la variable objetivo, es decir una variable que se maximiza (o minimiza). A menudo representa el beneficio (o el costo) de algún proyecto.

Solución óptima: Satisface todas las restricciones si se evalúa en ellas, y (en el caso de maximización) hace que el valor de la variable objetivo sea el máximo posible de entre todas las soluciones factibles.

Solución óptima múltiple: Existen problemas lineales que no tienen una solución óptima única, sino que al contrario, tienen un número infinito de soluciones. Para detectar una solución múltiple en un sistema de pivoteo optimal este debe tener alguna variable independiente con coeficiente nulo en la función objetivo; sin embargo, tal requisito es sólo necesaria y no suficiente.

Véase también[editar]

Enlaces externos[editar]

Referencias[editar]

  1. a b c Robert Vanderbei (1996/2007): Linear Programming; Foundations and Extensions, 3.ed. Springer, ISBN 978-0-387-74385-5, archivo pdf, (edición alternativa: Linear Programming; Foundations and Extensions, Kluwer, 1996, ISBN 0-7923-9804-1)
  2. a b Vašek Chvátal (1983): Linear Programming., Freeman and Company, ISBN 0-716-71587-2
  3. Robert G. Bland (1977): New finite pivoting rules for the simplex method, Mathematics of Operations Research, vol.2, 103-107, pdf-Datei
  4. Erwin Bareiss (1968): Sylvester's Identity and Multistep Integer-Preserving Gaussian Elimination, Mathematics of Computation, vol.22 (102), 565-578, pdf-Datei
  5. Thom Mulders (2001): A Generalized Sylvester Identity and Fraction-free Random Gaussian Elimination, Journal of Symbolic Computation, vol.31(4), 447-460, pdf-Datei