Encontrar soluciones de esquina exactas para la programación lineal utilizando métodos de punto interior

11

El algoritmo simplex camina con avidez por las esquinas de un politopo para encontrar la solución óptima al problema de programación lineal. Como resultado, la respuesta es siempre una esquina del politopo. Los métodos de punto interior recorren el interior del politopo. Como resultado, cuando un plano completo del politopo es óptimo (si la función objetivo es exactamente paralela al plano), podemos obtener una solución en el medio de este plano.

Supongamos que queremos encontrar una esquina del politopo en su lugar. Por ejemplo, si queremos hacer una coincidencia máxima reduciéndola a programación lineal, no queremos obtener una respuesta que consista en "la coincidencia contiene 0,34% del borde XY y 0,89% del borde AB y ...". Queremos obtener una respuesta con 0 y 1 (que simplex nos daría ya que todas las esquinas consisten en 0 y 1). ¿Hay alguna manera de hacer esto con un método de punto interior que garantice encontrar soluciones de esquinas exactas en tiempo polinómico? (por ejemplo, tal vez podamos modificar la función objetivo para favorecer las esquinas)

Jules
fuente
1
@JD: ¿Por qué no haces de esto una respuesta?
Raphael

Respuestas:

6

Es posible que desee leer el periódico:

Sanjay Mehrotra, Al encontrar una solución de vértice utilizando métodos de punto interior, Álgebra lineal y sus aplicaciones, Volumen 152, 1 de julio de 1991, páginas 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. enlace al artículo de sciencedirect

usuario20
fuente
4

Si bien la pregunta en general tiene sentido, es extraño que elija la coincidencia máxima como ejemplo, porque hay muchos algoritmos (flujos máximos para la coincidencia bipartita de cardinalidad máxima, el algoritmo de Edmonds para la coincidencia no bipartita y el algoritmo húngaro para la coincidencia bipartita de peso máximo) eso dará soluciones de vértices enteros al problema.

Suresh
fuente
Era más un interés teórico que práctico. Aún así, muchas veces los métodos de puntos interiores son más rápidos que el simplex, por lo que podría haber problemas cuando este es un problema práctico;)
Jules
3

Por falta de detalles, este es simplemente un comentario más extenso:

El algoritmo de tiempo polinómico de Karmarkar solo se mueve cerca del borde. Al final, encuentra una solución básica adecuada (por ejemplo, esquina) que es óptima utilizando un esquema de purificación ¹. Puede usar esta o una técnica similar para moverse a una esquina desde un avión.


¹ No puedo verlo en el artículo original de Karmarkar . Mi referencia es "Lineare Optimierung und Netzwerkoptimierung" (inglés: optimización lineal y de red) de Hamacher y Klamroth, que tiene textos en alemán e inglés uno al lado del otro.

Rafael
fuente
1

Sí, hay un método simple y lo he implementado en C ++ para combinar la velocidad de los métodos de punto interior con la precisión de los métodos simplex (usando el refinamiento iterativo de la inversa de la matriz base, puedo lograr precisiones de 1 parte en 10 ^ 15 y mejor en matrices de restricciones densas con más de 1000 variables y restricciones).

La clave está en el método simplex que usa. Suponga que el método simplex tiene un mecanismo para refactorizar una base (por ejemplo, después de que los errores de redondeo acumulativo lo hacen necesario), y que este método de refactorización simplemente recrea una matriz inversa de base para una base que contiene toda la lista deseada de variables básicas. Además, suponga que incluso si la base deseada no se puede recrear por completo, que el algoritmo simplex puede continuar desde una base que contiene el 95% de la base objetivo, entonces la respuesta es muy simple.

Todo lo que tiene que hacer es tomar la solución de su método de punto interior, eliminar la variable cuyos valores de solución primarios están implícitos en cero por holgura complementaria, y dado un tamaño base en el problema simplex de b, tomar las variables b en el interior señale la solución con los valores más grandes (o tantos como haya valores distintos de cero si es menor que b), y refactorice la base simplex para contener esas variables b. Luego continúe con el método simplex hasta que se resuelva. Como está comenzando el problema simplex cerca del final, esto suele ser muy rápido.

usuario9526
fuente