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

Основы оптимизации в радиотехнических системах. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
1
k
1
1
k
1
gx
:
x f∆⋅+=
+
2
k
2
1k
2
g
x:x f∆
⋅
+=
+
i
k
i
1k
i
gx:x f∆⋅+=
+
N
k
N
1k
N
g
x:x f∆
⋅
+=
+
)x,...,x,...,x,x(x
k
N
k
i
k
2
k
1
k
=
α
h)(vh)(vh)f(vh)f(v −−+⋅≤−−+ L
Θ
f(v)
f(v+h)
f(v–h)
f(x), a(x), j(x)
Точка, для которой оценивается скорость изменения функции
v–h
v
v+h
x
0
Θ
a(x)
j(x) f(x)
При использовании оценки градиента изменение координат точек
производится по следующему правилу:
,
, … ,
, … ,
.
Таким образом, вектор текущих значений координат на k-й итерации
может быть обозначен
. На рис. 2.5 представлен
пример спуска по поверхности y = f(x1, x2) в ходе выполнения итераций.
В зависимости от способа выбора значения постоянной шага могут быть выделены различные разновидности градиентного метода. В частно­сти, длина шага может быть постоянной или зависеть от длины вектора градиента [17]. В настоящее время выделяются методы наискорейшего спуска [18], метод Ньютона, методы покоординатного спуска с использо­ванием градиента и другие [18]. Наиболее простым является использова­ние постоянного значения шага g.
Одним из ключевых условий, определяющих сходимость градиент­ных методов, является условие Липшица [18]. Рассмотрим функцию од­ной переменной y = f(x), график которой представлен на рис. 2.6.
Рис. 2.6
Для точки x = v выполняется условие
, (2.1)
31
h2h)f(v
h)f(v ⋅⋅≤−−+ L
srf(s)f(r) −⋅≤
− L
⋅
sr −
sr(s)f(r)f −⋅≤
′
−
′
L
где L – константа Липшица. В общем случае 0 ≤ α ≤ 1, при α = 1 неравен- ство (2.1) называется условием Липшица [2 ]:
. (2.2)
Таким образом, скорость изменения функции на рассмотренном ин­тервале ограничена значением константы Липшица, т. е. скорость измене­ния функции является конечной.
В соответствии с рис. 2.6 функция y = f(x) возрастает не быстрее чем прямая a(x) с угловым коэффициентом, равным L (L > 0). Аналогично функция y = f(x) убывает не быстрее чем прямая j(x) с угловым коэффи­циентом, равным L (L < 0). Угловой коэффициент прямой численно равен тангенсу угла между положительным направлением оси абсцисс и данной прямой линией [2]. Прямой a(x) на рис. 2.4 соответствуют значения L > 0, 0 ≤ Θ < π/2, прямой j(x) – значения L < 0, π/2 < Θ < π. Таким образом, ус­ловие Липшица будет выполняться для любой точки кривой y = f(x) на рис. 2.6.
Выполнение условия Липшица также говорит об ограниченности по модулю угловых коэффициентов всех хорд графика функции на некото­ром участке [2].
Для функции N переменных y = f(x1, x2, …, xi, …, xN) = f(x) условие Липшица (2.2) может быть записано в виде [19]
,
где
стве. В данном случае
– евклидова норма; r и s – некоторые точки в N-мерном простран-
– евклидово расстояние между точками r и s.
Для градиентных методов могут быть определены условия сходимо­сти, т. е. условия, при которых с каждой последующей итерацией будет производиться приближение к минимуму [19]. Пусть функция y = f(x) яв­ляется дифференцируемой, ограниченной снизу, т. е. f(x) ≥ f(x*) > –∞, и для ее градиента выполняется условие Липшица
.
32
0
)x
(
f
k
→
′
∞
→k
)xf()xf(
k1k≤+
1
k1k
εxx <−
+
( ) ( )
2
k1k
εxfxf <−
+
( )
3
k
εx'f <
Длина шага постоянна и удовлетворяет условию 0 < g < 2/L. Тогда
метод будет сходиться при любом выборе начальной точки [19], т. е.
при
и
.
При использовании градиентных методов наиболее часто применяют
следующие критерии окончания вычислений [18]:
, (2.3)
, (2.4)
, (2.5)
где ε1, ε2, ε
– заданные положительные числа. При выполнении условий
3
критерия окончания вычислений итерационный процесс метода прекра­щается, и в качестве приближенного решения x* принимается текущее значение вектора x. Во многих случаях используются сочетания критери­ев (2.3), (2.4) или даже задается требование выполнения всех трех условий (2.3)–(2.5). Для формирования условий окончания вычислений могут быть использованы другие критерии [2, стр. 270], однако на сегодняшний день нет четко определенных критериев, позволяющих достигать требуемой погрешности решения задачи оптимизации функции. Эффективность применяемого критерия в значительной мере зависит от класса решаемой задачи.
Градиентные методы оптимизации широко применяются в техниче­ских системах обучения и принятия решения [20]. В частности, градиент­ные методы используются для обучения нейронных сетей, систем с нечет­кой (fuzzy) логикой и других адаптивных систем. Для выполнения процес­са обучения важную роль играет качество обучающей выборки, т. е. каче­ство примеров, на которых обучается данная система [20, 21, 22]. Во мно­гих случаях системы машинного обучения производят предварительную обработку обучающей выборки с целью оценки максимальной скорости изменения данных. Обучающая выборка анализируется и по результатам
33
НЕТ
Начало
ДА
Конец
k:=1
Ввод предельного количества
1
k
1
1k
1
x
y
gx:x
∂
∂
⋅+=
+
2
k
2
1k
2
x
y
gx:x
∂
∂
⋅+=
+
1
k1k
εxx <−
+
k:=k+1
Ввод значений
1
2
анализа производится оценивание константы Липшица [23, 24]. Далее по­лученная оценка может быть использована для повышения качества обу­чения технической системы, в частности, для выбора требуемого значения постоянной шага g градиентных методов.
В ходе поиска экстремума функции градиентными методами значение модуля антиградиента может существенно изменяться. В большинстве случаев на начальном этапе вычислений модуль антиградиента принимает большие значения, а по мере приближения к точке минимума его значения уменьшаются. В результате в окрестности точки минимума градиентный метод становится чувствительным к погрешности выполняемых вычисле­ний. Таким образом, вблизи точки минимума эффективность градиентно­го метода резко снижается.
Схема алгоритма оптимизации функции y = f(x1, x2) градиентным ме­тодом с постоянным шагом представлена на рис. 2.7.
1
x
, x
1
, g, ε
итераций kmax
,
Рис. 2.7
34
Ход работы
1. Запустить программную среду Matlab, установить текущую папку «X:\…\Komplex_MO\Lab2», где X – условное обозначение литеры диска. Поле для установки текущей папки показано на рис. 2.8;
Рис. 2.8
2. В текстовом редакторе среды Matlab создать новый файл и сохра­нить его под именем f21.m на жестком диске ПК в папке X:\…\Komplex_MO\ Lab2;
3. В файле f21.m поместить заголовок файла-функции:
function y = f21(x1, x2)
4. В файле f21.m после имеющегося кода поместить запись выраже- ния анализируемой функции (согласно варианту заданий, указанному преподавателем):
y = (-10)*x1.^2 + (-12)*x2.^2 + x1.*x2;
5. Cохранить изменения файла f21.m;
6. В текстовом редакторе среды Matlab создать новый файл и сохра-
нить его под именем p_deriv_x1_21.m на жестком диске ПК в папке
X:\…\Komplex_MO\ Lab2;
7. В файле p_deriv_x1_21.m поместить заголовок файла-функции:
function gr1 = p_deriv_x1_21(x1, x2)
35
8. В файле p_deriv_x1_21.m после имеющегося кода поместить запись
выражения анализируемой функции (согласно варианту заданий, указан­ному преподавателем):
gr1 = x2 - 20*x1;
9. Cохранить изменения файла p_deriv_x1_21.m;
10. В текстовом редакторе среды Matlab создать новый файл и сохра-
нить его под именем p_deriv_x2_21.m на жестком диске ПК в папке
X:\…\Komplex_MO\ Lab2;
11. В файле p_deriv_x2_21.m поместить заголовок файла-функции:
function gr2 = p_deriv_x2_21(x1, x2)
12. В файле p_deriv_x2_21.m после имеющегося кода поместить за­пись выражения анализируемой функции (согласно варианту заданий, указанному преподавателем):
gr2 = x1 - 24*x2;
13. Cохранить изменения файла p_deriv_x2_21.m;
14. В текстовом редакторе среды Matlab создать новый файл и сохра-
нить его под именем grad_minimum.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab2;
15. В файле grad_minimum.m поместить заголовок файла-функции:
function grad_minimum(x1_0, x2_0, eps)
%-------------------------------------------­% grad_minimum(x1_0, x2_0, eps) - функция для
% нахождения минимума функции f21(x1, x2). %%% % Функция принимает координаты начальной % точки поиска x1_0, x2_0, а также значение % погрешности eps. Для поиска % используется градиентный метод % с постоянным шагом. В вычислениях % также используются выражения для частных % производных. % p_deriv_x1(x1, x2) - частная производная
36
% функции f21(x1, x2) по переменной x1, % p_deriv_x2(x1, x2) - частная производная
% функции f21(x1, x2) по переменной x2. % Функции f21(x1, x2), p_deriv_x1(x1, x2), % p_deriv_x2(x1, x2) задаются в виде M-файлов, % которые должны находиться в текущей папке.
%--------------------------------------------
% Построение графика производится в % следующей области: % x1: от -20 до 20; % x2: от -20 до 20;
16. В файле grad_minimum.m поместить следующий программный код
(после имеющегося кода):
%--------------------------------------------
% Инициализация g = 0.02; % постоянная шага %%% k = 1; % Количество итераций kmax = 100; % Предельное число шагов, % задается для предотвращения зацикливания. % Массивы для хранения промежуточных координат x1trace = [x1_0]; x2trace = [x2_0];
17. В файле grad_minimum.m поместить следующий программный код
(после имеющегося кода):
%-------------------------------------------­% Выполнение итераций i = 2; while k < kmax % Спуск по обеим координатам сразу gr1 = p_deriv_x1_21(x1_0, x2_0); gr2 = p_deriv_x2_21(x1_0, x2_0); x1_0 = x1_0 + g*gr1; x2_0 = x2_0 + g*gr2; % Сохранение координат x1trace(i) = x1_0; x2trace(i) = x2_0; i = i + 1;
37
% Проверка условия останова if sqrt(gr1^2 + gr2^2) <= eps; break; % Выход из цикла в случае выполнения условия end k = k + 1; end %--------------------------------------------
% Построение графика
% Поверхность
figure(1); xx1 = -20:1:20; xx2 = -20:1:20; [xx1_s, xx2_s] = meshgrid(xx1, xx2); yy__s = f21(xx1_s, xx2_s); surf(xx1_s, xx2_s, yy__s); xlabel('x1'); ylabel('x2'); zlabel('f21(x1, x2)');
% Линии уровня figure(2); xx1 = -20:0.1:20; xx2 = -20:0.1:20; [xx1_c, xx2_c] = meshgrid(xx1, xx2); yy__c = f21(xx1_c, xx2_c); [C, h] = contour(xx1_c, xx2_c, yy__c); xlabel('x1'); ylabel('x2');
% Отображение меток на линиях уровня clabel(C, h);
hold on; plot(x1trace, x2trace, '-+');
% Вывод начальной точки на график text(x1trace(1) + 0.2, x2trace(1) + 0.5, 'M0'); % Вывод решения на график
text(x1_0 + 2, x2_0, ...
strvcat(['x1* = ' num2str(x1_0)], ... ['x2* = ' num2str(x2_0)], ... ['k = ' num2str(k)]));
hold off;
38
18. В файле grad_minimum.m поместить следующий программный код
(после имеющегося кода):
%-------------------------------------------­% Вывод результатов disp( sprintf('%s %.5g', 'x1*=', x1_0) ); disp( sprintf('%s %.5g', 'x2*=', x2_0) ); disp( sprintf('%s %d', 'k=', k) );
19. Cохранить изменения файла grad_minimum.m;
20. Выполнить поиск минимума функции y = f(x1, x2) градиентным
методом. Значения координат начальных точек необходимо выбрать из диапазона [–20, 20]. Например, для запуска процесса поиска из начальной точки с координатами [10, –15] в главном окне среды Matlab следует вы­полнить следующую команду:
>> grad_minimum(10, -15, 0.01)
Поиск минимума повторить для трех различных начальных точек из
указанного диапазона.
21. В текстовом редакторе среды Matlab создать новый файл и сохра-
нить его под именем grad_maximum.m на жестком диске ПК в папке
X:\…\Komplex_MO\Lab2;
22. В файле grad_maximum.m поместить код файла-функции, выпол-
няющего поиск максимума методом (на основе алгоритма) золотого сече­ния;
23. Cохранить изменения файла grad_maximum.m;
24. Выполнить поиск максимума функции y = f(x1, x2) градиентным
методом. Значения координат начальных точек необходимо выбрать из диапазона [–20, 20]. Например, для запуска процесса поиска из начальной точки с координатами [10, –15] в главном окне среды Matlab следует вы­полнить следующую команду:
>> grad_maximum(10, -15, 0.01)
39
№
Аналитические выражения
1
y = –10∙(x1)2 –12∙ (x2)2 + x1∙ x
∂y/∂x1 = x2 – 20∙x1;
0,01
2
y = –(2∙(x1)2 + 1,05∙(x1)4 +
∂y/∂x1 = –(x1)5 – 4,2∙(x1)3 –
0,01
3
y = –2∙(x1)2 –(x2)2 +
∂y/∂x1 = 2∙x2 – 8∙x1 + 80;
0,01
4
y = (x1)2 –(x2)
2
∂y/∂x1 = 2∙x1;
0,01
Поиск максимума повторить для трех различных начальных точек из
указанного диапазона.
Варианты заданий приведены в таблице.
Варианты заданий
Таблица
вари-
анта
Аналитическое выражение
функции
+ (x1)6 /6 + x1∙ x2 + (x2)2);
+2∙x1∙ x2 – 2∙(x1 – 20)2 –
– 20)2;
– (x
2
частных производных
функции
2
∂y/∂x2 = x1 – 24∙x2
– 4∙x1 – x2; ∂y/∂x
∂y/∂x2 = –4∙x2 + 2∙x1 + 40;
∂y/∂x2 = –2∙x2
= –2∙x2 – x1
2
Погреш-
ность
Контрольные вопросы
1. Приведите последовательность команд на языке Matlab, необхо­димую для реализации градиентного метода с постоянным шагом. Пояс­ните назначение каждой приведенной команды.
2. В чем заключается сущность градиентных методов оптимизации? Что означает термин «антиградиент»?
3. Какие преимущества имеют градиентные методы оптимизации по сравнению с методами прямого поиска?
4. Что такое условная оптимизация функции?
5. В чем заключается сущность метода Гаусса–Зейделя? Перечислите основные достоинства и недостатки метода Гаусса–Зейделя.
6. Приведите пример оценки значения градиента функции несколь-
ких переменных.
7. В чем заключается сущность условия Липшица?
8. Как устанавливается значение постоянной шага градиентного ме-
тода? Какие правила выбора значения постоянной шага вам известны?
9. Что означает понятие сходимости градиентных методов?
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]