¿Cómo iniciar el método Simplex desde un punto interno factible?

8

Tengo un algoritmo que genera una solución factible a un problema de programación lineal. Sin embargo, es muy probable que este no sea un punto de esquina. Esto hace que no sea adecuado para uso directo como una solución inicial factible para un solucionador Simplex acotado. ¿Cómo puedo encontrar eficientemente un punto de esquina de esta solución que pueda usar?

En resumen, ¿cómo puedo iniciar el método Simplex desde un punto interno factible?

Dylan
fuente
Existen algoritmos para pasar de un punto interno óptimo a una solución básica óptima (se usa para obtener una solución básica óptima después de que un algoritmo de punto interior converge en una solución no básica óptima). Tal vez podría usar algo como esto, pero ¿por qué desea proporcionar una solución inicial factible para un LP? ¿Tiene un LP donde la factibilidad es un cuello de botella?
user327301
El algoritmo que menciono que genera la solución factible de hecho solo lo genera como un subproducto. Su resultado principal es el conjunto de restricciones para el LP. Solo deseo aprovechar al máximo esta solución factible, en lugar de ignorarla y usar la Fase 1.
Dylan
¿Estás seguro de que te ayudará? ¿Ha mirado los registros de su solucionador y ha visto qué porcentaje del tiempo se dedica a encontrar una solución factible frente a encontrar una solución óptima? Soy escéptico de que esto ayude, a menos que esté proporcionando soluciones iniciales muy buenas para un programa lineal muy grande o muy denso (es decir, difícil).
user327301
Independientemente de si ayudará, tengo curiosidad por saber si es posible. Existe una buena posibilidad de que la solución factible inicial sea casi óptima. El LP es muy denso: los ceros son poco probables en cualquier parte del cuadro.
Dylan
1
Cuando CPLEX utiliza algoritmos de punto interior, realiza lo que la documentación llama cruce para pasar a una solución básica. No sé nada sobre el crossover, pero ese puede ser un punto de partida para que encuentres algo. (¡Ahora me estás haciendo querer afinar mi conocimiento de LP!)
user327301

Respuestas:

6

Cada libro sobre optimización lineal explica el método simplex como un algoritmo de dos etapas: el primero para encontrar una esquina factible como punto de partida, y el segundo para encontrar el óptimo. El primero usa un doble problema. Eche un vistazo a D. Bertsimas y JN Tsitsiklis: "Introducción a la optimización lineal" , por ejemplo.

La razón por la que se necesita el enfoque de dos fases es que generalmente es difícil encontrar un punto factible: en espacios de altas dimensiones, el conjunto factible es muy pequeño en comparación con, por ejemplo, la caja de la unidad. A partir de su pregunta, parece que tiene una forma diferente de encontrar al menos un punto factible, y en ese caso puede ser posible generar un vértice del poliedro factible desde este punto. Una idea sería utilizar el siguiente enfoque: cada restricción de desigualdad representa un medio espacio separado por un hiperplano. Dado un punto factible , encuentre los n + 1 hiperplanos que están más cerca de x xn+1xy tomar su intersección. Intuitivamente, este vértice debería ser factible, aunque admito que habría que pensar un poco más sobre esto.

Wolfgang Bangerth
fuente
1
Desafortunadamente, todos los algoritmos de dos etapas para el método simple que he encontrado describen la "Fase 1", donde se utilizan variables artificiales para encontrar una solución factible básica a partir de una solución no factible básica. Sin embargo, lo que quiero es encontrar una solución factible básica a partir de una solución factible no básica. ¿Me estoy perdiendo algo sobre la "Fase 1" que se puede aplicar a soluciones no básicas?
Dylan
No entiendo por qué necesitas eso. Todo lo que necesita para la fase 2 es cualquier vértice (una solución factible básica). ¿Por qué te importaría dónde comienza la fase 1 siempre que sepas dónde termina?
Wolfgang Bangerth
Pero la Fase 1 requiere una solución básica (no factible). Si de alguna manera puedo comenzar la Fase 2 con una solución factible no básica, debería resolverse mucho más rápido que comenzar la Fase 1 desde el origen.
Dylan
Pero la fase 2, el método simplex real, camina de vértice a vértice del poliedro que es el conjunto factible. Necesita comenzar con un vértice, es decir, un punto factible básico. No hay manera de evitarlo. La fase 1 está destinada a proporcionarle exactamente ese punto de partida. Me imagino que podría acelerar el algoritmo si tuviera una forma de generar un vértice del conjunto factible desde cualquier otro punto factible, e imagino que eso ni siquiera sería muy difícil (solo proyecte en las restricciones más cercanas ) El problema en general es encontrar cualquier punto factible. n+1
Wolfgang Bangerth
Si no es muy difícil, ¿podría detallarlo? Por lo que puedo ver, a medida que proyectas cada restricción por turno, es posible que no estés satisfecho con las restricciones anteriores. Entonces, ¿cómo se proyecta en todas las restricciones a la vez? Este es el problema que estoy pidiendo resolver. No es el caso general de encontrar un punto factible.
Dylan
4

Lamentablemente, la solución de Wolfgang Bangerth no garantiza que funcione:

ingrese la descripción de la imagen aquí

ii(ni)n


fuente
3

En realidad, hay muchos enfoques diferentes para la fase I en el método simplex. En particular, hay algoritmos de fase I que usan iteraciones simples simples simples y otros algoritmos de fase I que usan iteraciones simples simples. Aquí hay un enfoque muy general que podría adaptarse fácilmente para hacer uso de una solución factible conocida. Esta versión usa el método dual simplex en la fase I y el método simplex simple en la fase II, pero hay una variante que usa iteraciones simplex primarias en la fase I e iteraciones simplex dual en la fase II que mencionaré al final. El enfoque que voy a describir aquí se discute en muchos libros de texto sobre programación lineal. Por ejemplo, vea el texto de Robert Vanderbei .

Supongamos que estamos resolviendo

maxcx

sujeto a

Ax=b

lxu

donde de tamaño por . Para simplificar, suponga que las filas de son linealmente independientes (esto se puede lograr mediante una factorización que revela el rango).m n AAmnA

  1. Elige una base inicial. Esta es una colección de variables para que las columnas correspondientes de formen una matriz no singular . Las variables no básicas restantes se pueden establecer en sus límites superior o inferior (o cero si una variable no tiene límites). A BmAB

Una manera fácil de hacer esto desde su solución inicial es seleccionar como variables básicas aquellas variables que están más lejos de sus límites en la solución factible conocida y luego verificar que no sea singular. Puede que tenga que modificar la base para que no sea singular. El punto aquí es que hay muchas bases posibles, pero esta tiene como variables básicas las variables que parecen ser correctas de su solución factible. BBB

Resuelve las ecuaciones para obtener los valores de las variables básicas. Ax=b

  1. Es probable que la solución básica que obtenga sea primariamente inviable en el sentido de que algunas de las variables primarias están fuera de sus límites. También es probable que sea doblemente inviable en el sentido de que algunos de los costos reducidos de las variables no básicas tienen signos incorrectos (por ejemplo, variables no básicas en los límites inferiores con costos reducidos positivos o variables no básicas en los límites superiores con costos reducidos negativos).

Superaremos este problema cambiando la función objetivo a una que sea doblemente factible. Para cada variable no básica en su límite inferior, reste una gran cantidad positiva del coeficiente de la función objetivo. Para cada variable no básica en su límite superior, agregue una gran cantidad positiva al coeficiente. Esto asegura que el diccionario sea doblemente factible. MMM

El objetivo de esta modificación de la función objetivo es tratar de trabajar hacia la viabilidad primaria, pero también avanzar hacia la optimización con respecto a la función objetivo original. Desea que sea ​​lo suficientemente grande como para tener doble factibilidad, pero desea mantener tanta influencia como sea posible de la función objetivo original. M

  1. Realice métodos de doble símplex para obtener una solución básica que sea factible primordialmente (todas las variables básicas dentro de boudns) y doble factible (todos los costos reducidos tienen el signo deseado). Esta solución es óptima para el problema de la fase I.

  2. Reemplace la función objetivo de la fase I modificada con la función objetivo original. Ahora tendrá una solución básica que es primordialmente factible (cambiar la función objetivo no afecta a esto) pero doblemente inviable. Realice las iteraciones primarias simples para volver a la optimización.

Una alternativa obvia a este enfoque sería modificar el lado derecho b al comienzo de la fase I, usar iteraciones primarias simples en la fase I para llegar a la óptima, luego volver a colocar el lado derecho original para la fase II y usar iteraciones dobles simples. en la fase II.

Brian Borchers
fuente
-3

Estaba buscando la solución para una pregunta similar: para un programa lineal disperso muy grande, solo el método simplex probó el trabajo, pero solo cuando la solución predeterminada 0 es factible. Parece que el algoritmo de la fase uno (como en linprog de Matlab) es malo. Y el código fuente de la fase uno es tan complejo para sustituirlo por otro algoritmo como el algoritmo genético, por lo que un método alternativo es hacer una transformación lineal del problema original, de modo que en las nuevas variables la solución factible inicial proporcionada sea 0, y esto 0 será utilizado por la fase uno sin usar su propio método para encontrar un punto de partida diferente.

Al probar este método, paso a paso a través de linprog.m, simplex.m, simplexpresolve.m y simplexphaseone.m, en los casos en que solo se usan restricciones de desigualdad, se confirma que el 0 predeterminado se usará para las variables originales, donde Las variables de holgura tomarán las diferencias. Por lo tanto, la transformación lineal puede colarse x0 en simplex, lo que intencionalmente evita x0 proporcionado por el usuario. A continuación, puede ver el mensaje de "El punto de inicio predeterminado es factible, omitiendo la Fase 1".Por otro lado, generalmente GA puede encontrar una solución cercana al programa lineal al 0.01 por ciento mediante el uso de tiempos dobles o triples, por lo que puede no merecer los esfuerzos de la transformación lineal de esas restricciones, objetivos y límites, especialmente cuando las restricciones se crean artificialmente .

Franco
fuente
Hola Frank y bienvenido a Scicomp! La pregunta que plantea es perfectamente válida, pero dado que realmente no aborda la pregunta del OP original, realmente no pertenece como una 'respuesta'. Realmente deberías eliminarlo y volver a publicarlo con más detalle como una pregunta separada.
Paul
No importa: este método equivale a hacer que simplex use un x0 inicial suministrado después de traducir el x0 a 0, el método simplex originalmente ignora cualquier x0 proporcionado.
Frank