Штрафные функции
![]()
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра КСУ отчет по лабораторной работе №6 по дисциплине «Теория оптимального управления» Тема: Штрафные функции Вариант 2
Санкт-Петербург 2021 Цель работы: применение метода штрафных функции для минимизации функции двух переменных в заданной области. Вводные: неунимодальная функция – Химмельблау: f(x,y)=(x2+y-11)2+(x+y2-7)2 Ограничения по сетке X0Y: [-20:0.5:20] Задача: Построить график функции и её линии уровня Предложить штрафную функцию и ограничения для штрафа основной функции Исказить функцию при помощи штрафов Найти минимум при помощи стандартной функции fminsearch Построить график новой функции и её линии уровня Отобразить начальную - красным и конечную – синим цветами точки Прослеживать изменения минимума, изменяя коэффициент штрафа, сделать выводы о приемлемом коэффициенте. Ход работы: 1) Построить график функции и линии уровня Код программы: m=0.5; L=-20; R=20; %шаг, границы - левая и правая [X,Y]=meshgrid(L:m:R); F =(X.^2+Y-11).^2+(X+Y.^2-7).^2; % исследуемая ф-ия Химмельблау(тоже менять в fun6) figure(1) % mesh(X,Y,F); % её 3д график figure (2) % c ![]() ![]() Рис. 1. График поверхности функции Химмельблау и её линии уровня 2) Предложить штрафную функцию Код программы отдельным скриптом: function f=fun6(arg) X=arg(1); Y=arg(2); F =(X.^2+Y-11).^2+(X+Y.^2-7).^2; alphax = 1; %штрафной коэ-нт % ш ax = -1; % т bx = 2; % а PhiX =(zeros(size(X))); % ф i1 = find(X>bx); % н PhiX(i1) = (alphax*(X(i1)-bx).^2); % а i2 = find(X PhiX(i2) = (alphax*(X(i2)-ax).^2); % f=(F+PhiX); % функция end 3)Найти минимум Код программы: a=L:m:R; % ограничения new=fun6(a); % штрафная функция для оптимизации x0=[0,0]; % нач-ая точка [xe,extr]=fminsearch(@fun6, x0) % координаты и сам минимум Результат: xe = 2.9684 2.0183 extr = 0.9686 alphax = 1 4)Построить графики вместе с точками Код программы: alphax = 1 %штрафной коэ-нт % ш ax = -1; %также менять его % т bx = 2; %в fun6 % р PhiX =(zeros(size(X))); % а i1 = find(X>bx); % ф PhiX(i1) = (alphax*(X(i1)-bx).^2); % н i2 = find(X PhiX(i2) = (alphax*(X(i2)-ax).^2); % я f=(F+PhiX); % функция для [A,B]=meshgrid(L:m:R); % построения графиков figure(3) % mesh(A,B,f); % график новой ф-ия hold on; plot(x0(1),x0(2),'*','color','red','MarkerSize', 10); plot(xe(1),xe(2),'*','color','blue','MarkerSize', 10); figure (4) % contour(A,B,f, 30,'Showtext','on') % её линии уровней hold on; plot(x0(1),x0(2),'*','color','red','MarkerSize', 10); plot(xe(1),xe(2),'*','color','blue','MarkerSize', 10); ![]() ![]() Рис. 2. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 1 5) Изменяем коэффициент штрафа
![]() ![]() Рис. 3. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 10 ![]() ![]() Рис. 4. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 25 ![]() ![]() Рис. 5. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 50 ![]() ![]() Рис. 6. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 100 ![]() ![]() Рис. 7. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 500 ![]() ![]() Рис. 8. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 1000
![]() ![]() Рис. 9. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = 0 ![]() ![]() Рис. 10. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -1 ![]() ![]() Рис. 11. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -10 ![]() ![]() Рис. 12. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -25 ![]() ![]() Рис. 13. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -50 ![]() ![]() Рис. 13. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -100 ![]() ![]() Рис. 14. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -500 ![]() ![]() Рис. 15. График искажённой поверхности функции и её линии уровня, вместе с начальной точкой – красная и минимумом – синяя при коэффициенте штрафа alphax = -1000 Выводы: Метод штрафных функций основан на искажении основной функции путём суммирования со штрафной функцией, при нарушении основной заданных ограничений. Величину штрафа определяет штрафной коэффициент. Чем больше он по модулю, тем более заметными проявляются искажения поверхности функции. При увеличении коэффициента (alphax > 0) поверхность из эллиптического параболоида искривляется в сторону параболического цилиндра. Значение минимума возрастает, минимум сдвигается влево-вверх. При уменьшении (alphax < 0) поверхность трансформируется в гиперболический параболоид. Значение минимума заметно уменьшается, сам он сдвигается вправо-вниз и, при значении чуть меньшем alphax = -1000 выходит за пределы сетки X0Y. |