Симплекс-метод. Простое объяснение

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Wikipedia

Причины создания этого учебника

В интернете опубликовано множество объяснений алгоритма симплекс-метода, про которые можно смело сказать «лучше ничего, чем это». Они написаны крайне заумным языком и доставляют множество страданий всем, кто пытается с их помощью изучить этот метод линейного программирования.

Целью данного учебника является создание простого и доступного описания алгоритма симплекс-метода, которое можно понять, что называется, «с ходу».

Задача линейного программирования

Задача линейного программирования в стандартной форме заключается в том, чтобы найти экстремум функции

c1x1+c2x2++cnxnmax

при заданных ограничениях:

a11x1+a12x2++a1nxnb1

a21x1+a22x2++a2nxnb2

am1x1+am2x2++amnxnbm

Симплекс-таблица

Запишем симплекс-таблицу:

x1 x2 xn
y1 a11 a12 a1n b1
y2 a21 a22 a2n b2
ym am1 am2 amn bm
c1 c2 cn 0

Алгоритм

Первый шаг алгоритма состоит в том, чтобы найти минимальный элемент в последней строке (ci). Номер этого элемента определит разрешающий столбец.

На втором шаге определяется разрешающая строка. Для этого нужно найти симплекс отношение: в каждой строке элемент последнего столбца делится на соответствующий элемент разрешающего столбца. Так получается столбец симплекс-отношений. Минимальный элемент в этом столбце и определяет разрешающую строку.

Приступаем к построению новой симплекс-таблицы. Метки y и x для разрешающей строки и столбца соответственно меняются местами: yi обозначает теперь столбец, а xj — строку. Элемент на пересечении разрешающего столбца и разрешающей строки возводим в степень 1. Все элементы разрешающей строки, кроме того, что на пересечении, делим на этот элемент на пересечении. Все элементы разрешающего столбца, кроме того, что на пересечении, делим на этот элемент на пересечении и умножаем на 1.

Остальные элементы новой симплекс таблицы высчитываются по правилу прямоугольника:

aiL ……………………………………. <пересч. элемент aij>

<элемент на пересечении asl > … asj


aij новый = aij(ail*asj)/(asl)

Вышеуказанные операции выполняются для всех элементов, включая a, b и c и повторяются до тех пор, пока в строке c будут отрицательные элементы.

Если же отрицательных элементов в строке больше нет, значит, оптимальное решение достигнуто. Оно будет находиться в последнем столбце b, его будут обозначать соответствующие метки «x» строк.

Подставив найденные x в целевую функцию, находим оптимальное решение.