Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод. указания к лаб.р-там МММ (Часть 2) 4 кур...doc
Скачиваний:
19
Добавлен:
13.11.2019
Размер:
2.89 Mб
Скачать

Лабораторная работа №14. Симплексные методы решения задач оптимизации

Цель работы:

  • составить подпрограмму для расчета целевой функции;

  • определить точки экстремума целевой функции с использованием прикладных программ, реализующих симплексный метод и метод Нелдера-Мида;

  • сопоставить эффективность используемых методов.

1. ОПИСАНИЕ МЕТОДИКИ РАСЧЕТОВ

1.1. Симплексный метод

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

Симплекс обладает следующим свойством: против любой из его вершин Sj расположена только одна грань, на которой можно построить новый симплекс, отличающийся от прежнего расположением новой вершины , тогда как остальные вершины обоих симплексов совпадают. Вершина нового симплекса , вообще говоря, может находиться и по другую сторону грани от вершины Sj. Это свойство симплекса и обусловило возможность его применения при решении задач оптимизации.

1.2. Алгоритм симплексного метода

Пусть вершинам исходного симплекса Si (i=1,2,...,n+1) отвечают координаты U(i)=(U1(i),U2(i),...,Un(i)), (i=1,2,...,n+1). Наибольшее значение целевой функции соответствует вершине Sj. Определим координаты вершины нового симплекса.

Вершина располагается симметрично вершине Sj относительно середины грани, находящейся против вершины Sj. Координаты центра этой грани U(A) определяются по формуле:

= , (14.1)

причем суммирование ведется только по тем векторам , которые отвечают вершинам Si, образующим эту грань.

Вектор , характеризующий расстояние от вершины Sj до центра противолежащей грани, будет равен:

. (14.2)

Координаты вершины определяются по формуле

. (14.3)

Подставив в выражение (14.3) для U(A) из (14.1), получим:

. (14.4)

Формула (14.4) определяет координаты вершины нового симплекса.

При необходимости уменьшить размеры симплекса (в случае зацикливания в окрестности точки оптимума) вместо формулы (14.2) можно пользоваться следующим выражением:

(14.5)

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

Симплексный метод обладает еще одним важным достоинством – при увеличении размерности задачи вычислительные затраты возрастают незначительно, т.к. на каждом шаге считается только одно значение целевой функции. Блок-схема метода приведена на рис. 14.1.

1.3. Метод Нелдера-Мида

В данном методе симплекс перемещается с помощью трех операций: отражения, растяжения и сжатия. Смысл этих операций станет понятным при рассмотрении шагов процедуры.

А. Найдем значения функции в вершинах симплекса.

f 1= f(х1); f2=f(х2);.....fn+1=f(хn+1)

Б. Найдем наибольшее значение функции fh, следующее за наибольшим значением функции fg, наименьшее значение функции fl и соответствующие им точки xh, xg, и xl.

В. Найдем центр тяжести всех точек, за исключением точки xh.

х0 =

Рис. 14.1. Блок-схема симплексного метода

Вычислим f(x0)=f0 .

Г. При поиске минимума следует начать перемещение от точки хh. Отразив точку хh относительно точки х0, получим точку хr и найдем f(хr) = fr.

Операция отражения иллюстрируется рис. 14.2. Если  > 0 – коэффициент отражения, то положение точки xr определяется следующим образом:

хr = (1 + ) х0 –   хh.

Д. Сравним значения функций fr и fl.

1. Если fr < fl, то получим наименьшее значение функции. Направление из точки х0 в точку хr наиболее удобно для перемещения. Тогда мы производим растяжение в этом направлении и находим точку хe и значение функции fe = f(xe). Рисунок 14.3 иллюстрирует операцию растяжения симплекса. Коэффициент растяжения  > 1 можно найти из следующих соотношений:

xe – x0 =  (xr – x0),

т.е. xe =  xr + (1 –  )x0.

Рис. 14.2 Рис. 14.3

где  = |xe – x0|/ |xr – x0|.

а) Если fe < fl, то заменяем точку xh на точку xе и проверяем (n+1)-ую точку симплекса на сходимость к минимуму (см. шаг 3). Если сходимость достигнута, то процесс останавливается; в противном случае возвращаемся на шаг Б.

б) Если fe > fl, то отбрасываем точку fe. Очевидно, мы переместились слишком далеко от точки x0 к точке xr. Поэтому следует заменить точку xh на точку xr, в которой было получено улучшение (шаг Д1), проверить сходимость и, если она не достигнута, вернуться на шаг В.

2. Если fr > fl, но fr < fg, то xr является лучшей точкой по сравнению с другими двумя точками симплекса и мы заменяем точку xh на точку xr и, если сходимость не достигнута, возвращаемся на шаг Б, т.е. выполняем пункт 1б, описанный выше.

3. Если fr > fl, но fr > fg, то перейдем на шаг Е.

Е. Сравним значения функций fr и fh.

1. Если fr > fh, то переходим непосредственно к шагу сжатия Е2. Если fr<fh, то заменяем точку xh на точку xr и значение функции fh на значение функции fr. Запоминаем значение fr > fg из шага Д2, приведенного выше. Затем переходим на шаг Е2.

2. В этом случае fr > fh, поэтому ясно, что мы переместились слишком далеко от точки xh к точке x0. Попытаемся исправить это, найдя точку xc (а затем fc) c помощью шага сжатия, показанного на рис. 14.4.

Если fr > fh, то сразу переходим к шагу сжатия и находим точку xc из соотношения

xc – x0 =  (xh – x0),

где  (0 <  < 1) – коэффициент сжатия. Тогда xc =  xh + (1 – ) x0.

Если fr < fh, то сначала заменим точку xh на точку xr, затем произведем сжатие. Тогда точку xc найдем из соотношения

xc – x0 =  (xr – x0), т.е.

xc =  xr + (1 – ) x0

(рис. 14.5).

Рис. 14.4 Рис. 14.5

Ж. Сравним значения функций fc и fh.

1. Если fc<fh, то заменяем точку xh на xc, и если сходимость не достигнута, то возвращаемся на шаг Б.

2. Если fc>fh, то очевидно, что все наши попытки найти значение меньшее fh закончились неудачей, поэтому мы переходим на шаг З.

З. На этом шаге мы уменьшаем размерность симплекса делением пополам расстояния от каждой точки симплекса до xl-точки определяющей наименьшее значение функции.

Таким образом, точка xi заменяется на точку xi+1/2(xi–xl), т.е. заменяем точку xi точкой 1/2 (xi + xl).

Затем вычисляем fi для i = 1,2,..., (n + 1), проверяем сходимость и, если она не достигнута, возвращаемся на шаг В.

И. Проверка сходимости основана на том, чтобы стандартное отклонение (n+1)-го значения функции было меньше некоторого заданного малого значения . В этом случае вычисляется

, где .

Если  < , то все значения функции очень близки друг к другу и поэтому они, возможно, лежат вблизи точки минимума функции xl.

Шаги этой процедуры представлены в виде блок-схемы на рис. 14.6.

2. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

Работа выполняется в такой последовательности:

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

Рис. 14.6. Блок-схема метода Нелдера-Мида

  • выполняют расчеты на ЭВМ по программе "SIMPL_M.BAS" (реализующей симплексный метод) и по программе "NED_MID.BAS" (реализующей метод Нелдера-Мида), находящихся в директории LABS, в результате которых определяют значение минимума целевой функции;

  • дается оценка сравнения эффективности методов.

2.1 Составление подпрограммы для расчета целевой функции

Расчет целевой функции выполняется процедурой-подпрограммой, которую нужно составить на языке QuickBASIC.

В качестве примера приводится текст процедуры расчета следующей целевой функции:

Z = 100  (x2 – x1 2)2 + (1 – x1)2.

Для программы "SIMPL_M.BAS":

REM Function

Fun1:

Z = 100 * (x(2) – x(1) ^ 2) ^ 2 + (1 – x(1)) ^ 2

RETURN

Для программы "NED_MID.BAS":

2340 END

5000 Z = 100 * (X(2) - X(1) ^ 2) ^ 2 + (1 - X(1)) ^ 2

5060 TEV = TEV + 1

5100 RETURN

2.2. Работа с головными программами "SIMPL_M.BAS" и "NED_MID.BAS"

Ввод исходных данных в этих программах организован в диалоговом режиме. Поэтому для запуска необходимо на диске U в директории LANG\QBX\BIN найти и запустить головной файл qbx.exe, после чего открыть файл "SIMPL_M.BAS" или "NED_MID.BAS". Находясь в режиме редактирования составить и записать подпрограмму для расчета целевой функции. Комбинацией клавиш Shift+F5 запустить измененную программу в работу.

В качестве исходных данных для программы "SIMPL_M.BAS" необходимо задать: число переменных, точность вычислений, координаты n+1 вершины симплекса. Для программы "NED_MID.BAS" задаются: начальное приближение, длина шага, вводятся значения ALFA, BETA, GAMMA (через запятую). Рекомендуется брать ALFA = 1, BETA = 0.5, GAMMA = 2.

3. ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

целевые функции и область изменения параметров приведены в табл. 13.1. Номер варианта соответствует порядковому номеру фамилии студента по журналу.

4. ОФОРМЛЕНИЕ ПРОТОКОЛА

В протоколе по лабораторной работе формулируется цель работы, описываются результаты расчетов, выполненных на ЭВМ. В протокол включаются листинг подпрограмм и результаты расчетов, блок-схема программы, реализующей симплексный метод и метод Нелдера-Мида.

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Классификация методов решения задач оптимизации.

  2. Общая идея методов нелинейного программирования.

  3. Симплексный метод, алгоритм расчета.

  4. Блок-схема симплексного метода.

  5. Метод Нелдера-Мида, алгоритм расчета.

  6. Физический смысл операции отражения, растяжения и сжатия.

  7. Сравнение метода Нелдера-Мида и симплексного метода.

  8. Признак зацикливания симплексного поиска, условие окончания поиска.