Симплекс метод (24-е апреля 2019)
- Кошерный Гаусс
- Уравнения добавляются по одному, мы поддерживаем весь класс решений
- Особенности реализации: не переставляем столбцы, столбец b - часть матрицы A
- Пишем код Гаусс, код восстановления решения по значениям свободным переменных [code]
- Упр: время работы Гаусса? Ответ O(nmk), где k - число линейно независимых строк, k ≤ min(n,m)
- Задача линейного программирования: Ax ≤ b, x ≥ 0, cx → max
- Вид Ax ≤ B ↔ Ax ≤ B
- Условия x ≥ 0 ↔ отсутствие условия
- (cx → max) ↔ (cx → min)
- (cx → max) → поиск произвольного решения (бинпоиск по ответу)
- Кошерный вид задачи линейного программирования и Симплекс-метод
- i < m ⇒ xi = bi ≥ 0, i ≥ m ⇒ xi = 0, i < m ⇒ ci = 0, A = EA' (EA')(x) = (b)
- Переход: выбрать min j, cj > 0, пытаемся увеличивать, ограничения: xi = bi - aijxj ≥ 0, выбираем i: aij > 0, bi / aij → min
- Пересчитываем матрицу A: поменяли местами два столбца, rowi /= aii, rowj -= aji rowi
- Пересчёт вектора "c", как дополнительной строки матрицы A
- Приведение систем к кошерному виду
- Вид Ax ≤ b, x ≥ 0.
- Вид Ax = b, x ≥ 0.
- Поиск начального решения (ввести фиктивную переменную, пустить симплекс, убрать фиктивную переменную)
- Примеры
- x1 + 2x2 + x3 ≤ 3, 2x1 + x2 + x3 ≤ 3, x1 + x2 - x3 → max (x1, x2, x3 ≥ 0)
- x1 - x2 ≤ -1, x1 + x2 ≤ 9, 2x1 + x2 → max (x1, x2 ≥ 0)
- Наличие решения, корректность, время работы
- Решений нет ⇔ поиск начального не смог сделать t = 0, максимум не ограничен ⇔ в одном из переходов не было ограничивающего условия
- В симплексе все ci ≤ 0 ⇒ решение оптимально, можно остановиться
- Симплекс работает конечное время т.к. набор выбранных столбцов однозначно задаёт решение, а множества столбцов не циклятся
- Почему не циклятся? Если xj строго увеличилось, то ок. Если xj осталось 0, то важно правило Бленда: min j сj > 0, для такого min i, на котором достигается ограничение на xj
- Другие решения задачи Линейного программирования
- Перебор базисных планов + Гаусс
- Метод эллипсоидов (Хачиян'1972)
- Метод внутренней точки (Interior Point)