Нахождение точных угловых решений линейного программирования с использованием методов внутренних точек

11

Симплексный алгоритм жадно идет по углам многогранника, чтобы найти оптимальное решение задачи линейного программирования. В результате, ответ всегда угол многогранника. Методы внутренней точки проходят внутри многогранника. В результате, когда целая плоскость многогранника является оптимальной (если целевая функция точно параллельна плоскости), мы можем получить решение в середине этой плоскости.

Предположим, что мы хотим, чтобы найти угол многогранника вместо. Например, если мы хотим сделать максимально соответствия путем уменьшения его линейное программирование, мы не хотим, чтобы получить ответ, состоящий из «согласующие содержит 0,34% от края XY и 0,89% от края AB и ...». Мы хотим получить ответ с 0 и 1 (какой симплекс даст нам, поскольку все углы состоят из 0 и 1). Есть ли способ сделать это с помощью метода внутренней точки, который гарантирует нахождение точных угловых решений за полиномиальное время? (например, возможно, мы можем изменить целевую функцию в пользу углов)

Жюль
источник
1
@JD: Почему бы вам не сделать это ответ?
Рафаэль

Ответы:

6

Вы можете прочитать статью:

Санджай Мехротра, О поиске вершинного решения с использованием методов внутренних точек, Линейная алгебра и ее приложения, том 152, 1 июля 1991 года, страницы 233-253, ISSN 0024-3795, 10.1016 / 0024-3795 (91) 90277-4. прямая ссылка на статью

user20
источник
4

Хотя вопрос в целом имеет смысл, странно, что вы выбираете максимальное соответствие в качестве примера, потому что есть много алгоритмов (максимальные потоки для максимального двустороннего сопоставления, алгоритм Эдмондса для двудольного сопоставления и венгерский алгоритм для двустороннего сопоставления максимального веса) все это даст целочисленные вершинные решения задачи.

Суреш
источник
Это был скорее теоретический интерес, нежели практический. Тем не менее, методы внутренней точки во много раз быстрее, чем симплекс, поэтому могут возникнуть проблемы, когда это практический вопрос;)
Жюль
3

Из-за отсутствия деталей это просто более длинный комментарий:

Алгоритм полиномиального времени Кармаркара движется только вблизи края. В конце концов, он находит подходящее базовое решение (например, угол), которое оптимально при использовании схемы очистки ¹. Вы можете использовать эту или аналогичную технику для перемещения в угол от плоскости.


¹ Я не могу разобрать это в оригинальной газете Кармаркара . Моя ссылка - «Lineare Optimierung und Netzwerkoptimierung» (английский: линейная и сетевая оптимизация) от Hamacher и Klamroth, в которой текст на немецком и английском языках расположен рядом.

Рафаэль
источник
1

Да, есть простой метод, и я реализовал его в C ++, чтобы объединить скорость методов внутренних точек с точностью симплексных методов (используя итеративное уточнение обратной матрицы базиса, я могу добиться точности 1 части в 10 ^ 15 и лучше на плотных матрицах ограничений с более чем 1000 переменных и ограничений).

Ключ в симплекс метод, который вы используете. Предположим, что симплекс-метод имеет механизм для рефакторинга базы (например, после того, как кумулятивные ошибки округления делают это необходимым), и что этот метод рефакторизации просто воссоздает обратную матрицу базиса для базы, которая содержит весь требуемый список базовых переменных. Кроме того, предположим, что даже если требуемый базис не может быть воссоздан полностью, что симплексный алгоритм может продолжать работу с базисного значения, содержащего 95% целевого базиса, тогда ответ очень прост.

Все, что вам нужно сделать, это взять решение из метода внутренней точки, исключить переменную, значения первичного решения которой равны нулю из-за дополнительной слабости, и дать базовый размер в симплексной задаче b, взять переменные b во внутренней части укажите точечное решение с наибольшими значениями (или столько, сколько существует ненулевых значений, если оно меньше, чем b), и проведите рефакторинг симплексного базиса, чтобы содержать эти b-переменные. Затем продолжайте симплекс-метод, пока он не решит. Поскольку вы начинаете симплексную задачу ближе к финишу, обычно это происходит очень быстро.

user9526
источник