Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
22.02.2014
Размер:
325.63 Кб
Скачать

Алгоритм

Пусть требуется найти безусловный минимум функции 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.

Соседние файлы в папке симплекс метод