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)
Respuestas:
Es posible que desee leer el periódico:
fuente
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.
fuente
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.
fuente
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.
fuente