Алгоритм
Пусть требуется найти безусловный минимум функции n переменных . Предполагается, что серьёзных ограничений на область определения функции нет, то есть функция определена во всех встречающихся точках.
Параметрами метода являются:
-
коэффициент отражения α > 0, обычно выбирается равным 1.
-
коэффициент сжатия β > 0, обычно выбирается равным 0,5.
-
коэффициент растяжения γ > 0, обычно выбирается равным 2.
Подготовка. Вначале выбирается n + 1 точка , образующие симплекс n-мерного пространства. В этих точках вычисляются значения функции: .
Дальнейший план действий:
1. Сортировка. Из вершин симплекса выбираем три точки: xh с наибольшим (из выбранных) значением функции fh, xg со следующим по величине значением fg и xl с наименьшим значением функции fl. Целью дальнейших манипуляций будет уменьшение по крайней мере fh.
2. Найдём центр тяжести всех точек, за исключением xh: . Вычислять fc = f(xc) не обязательно.
3. Отражение. Отразим точку xh относительно xc с коэффициентом α (при α = 1 это будет центральная симметрия, в общем случае — гомотетия), получим точку xr и вычислим в ней функцию: fr = f(xr). Координаты новой точки вычисляются по формуле:
xr = (1 + α)xc − αxh
4. Далее смотрим, насколько нам удалось уменьшить функцию, ищем место fr в ряду fh,fg,fl:
4а Если fr < fl, то направление выбрано удачное и можно попробовать увеличить шаг — производим растяжение. Новая точка xe = (1 − γ)xc + γxr и значение функции fe = f(xe).
-
Если fe < fl, то можно расширить симплекс до этой точки: заменяем точку xl на xe и заканчиваем итерацию (на шаг 8).
Если fe > fl, то переместились слишком далеко: в набор берём xr (опять вместо xl) и заканчиваем итерацию (на шаг 8).
4b Если fl < fr < fg, то выбор точки уже неплохой (новая лучше двух прежних). Заменяем точку xh на xr и переходим на шаг 8.
4с Если fh > fr > fg, то меняем обозначения xr,xh (и соответствующие значения функции) местами и идём на шаг 5.
4d Если fr > fh, то просто идём на следующий шаг 5.
В результате (возможно, после переобозначения) fr > fh > fg > fl.
5. Сжатие. Строим точку xs = βxh + (1 − β)xc и вычисляем в ней значение fs.
6 Если fs < fh, то заменяем точку xh на xs и идём на шаг 8.
7 Если fs > fh, то первоначальные точки оказались самыми маленькими. Делаем глобальное сжатие симплекса — гомотетию к точке с наименьшим значением xl:
для всех требуемых точек xi.
8 Последний шаг — проверка сходимости. Может выполняться по-разному, например, оценкой дисперсии набора точек. Суть проверки заключается в том, чтобы проверить взаимную близость полученных вершин симплекса, что предполагает и близость их к искомому минимуму. Если требуемая точность ещё не достигнута, можно продолжить итерации с шага 1.
Пример задачки на симплекс-метод
Рассмотрим простой пример решения задачки с помощью симплекс-метода для запоминания последовательности действий.
Некая компания производит большие и маленькие садовые скамейки. Каждая скамейка должна быть построена и отполирована. На постройку маленькой скамейки уходит 2 часа, на полировку 3 часа. На постройку большой уходит 4 часа, на полировку 3 часа. Строительный цех работает 100 часов в неделю, а полировочный 90. Прибыль, получаемая с маленькой скамейки составляет 5$, а с большой 7$. Сколько скамеек каждого вида должна производить компания для максимизации прибыли?
Пусть фирма производит X маленьких и Y больших скамеек. Тогда для решения задачи необходимо найти такие X и Y, что:
5X + 7Y - > max 2X + 4Y < = 100 3X + 3Y < = 90, X , Y > = 0
Введем переменные S1, S2 >= 0, тогда задача примет стандартный (канонический) вид: 5X + 7Y +0S1 + 0S2 - > max 2X + 4Y +1S1 + 0S2 = 100 3X + 3Y +0S1 + 1S2 = 90, X , Y, S1, S2 > = 0
Рассмотрим решение этой задачи, используя симплекс таблицу. Данное решение подходит для всех случаев, когда правая часть уравнений ограничений неотрицательна (90 и 100 в нашем примере). Если правая честь уравнений ограничений, после приведения задачи к каноническому виду, содержит отрицательные числа, то используйте вариант решения, разобранный во втором примере.
Составим симплекс-таблицу:
1 шаг: В строке Cj выписываем коэффициенты целевой функции при переменных X, Y, S1, S2. В строках 1,2 - коэффициенты при соответсвующих переменных из уравнений ограничений. RHS (столбец right hand side :-) ) , в строках 1, 2 пишем числа 100 и 90 из правой части неравенств ограничений. Переменные, образующие единичную матрицу будем называть базисными, в данном случае S1 и S2.
2 шаг: Заполняем столбец CB строки 1, 2 коэффициентами целевой функции при базисных переменных, то есть 0 при S1 в строке 1 (пересечение строки 1 и столбца S1) и 0 при S2 в строке 2.
3 шаг: заполняем строку 3 (Zj) путем перемножения каждого элемента столбца CB на соответствующие элементы строк 1, 2 и сложением. То есть первый элемент строки Zj получается как: 0*2 + 0*3 = 0. В данном случае все элементы строки получаются равными 0. Аналогично получается 0 в столбце RHS.
4 шаг: строка 4 (Cj - Zj) получается почленным вычитанием элементов строки 3 (Zj) из элементов строки Cj (всегда из верхней строки на всех шагах).
5 шаг: Ищем в строке 4 (Cj - Zj) МАКСИМАЛЬНЫЙ СТРОГОПОЛОЖИТЕЛЬНЫЙ элемент. Ему соответствует ведущий стролбец. В данном случае, в строке 4 выбираем элемент 7, следовательно ведущим будет столбец Y (строки 1,2).
6 шаг: Ищем в ведущем столбце МИНИМАЛЬНО ПОЛОЖИТЕЛЬНОЕ число из формулы (RHS/ведущий столбец). То есть, в данном случае, выбираем между 100/4=25 и 90/3=30. Найдя такое число, определяем ведущую строку, у нас строка 1. Пересечение ведущих столбца и строки дает нам ведущий элемент, в нашем случае 4.
7 шаг: Формируем строки 5, 6 путем деления ведущей строки на ведущий элемент и формирования единичного столбца на месте ведущего). Не забываем RHS. Далее следуем на шаг 2.
Итерации продолжаются до тех пор, пока в строке (Cj - Zj) не останется положительных элементов (в случае, что оптимальное решение задачи существует).
Тогда в строке Zj (у нас строка 11) в RHS - столбце получим значение целевой функции в оптимальной точке (X, Y) = (10, 20). Значения 10 и 20 получаем из RHS в строках 9, 10.