Методы синтеза и оптимизации
МИHИСТЕРСТВО ОБРАЗОВАHИЯ И НАУКИ УКРАИHЫ ДОHБАССКАЯ ГОСУДАРСТВЕHHАЯ МАШИHОСТРОИТЕЛЬHАЯ АКАДЕМИЯ Кафедра компьютерных информационных технологий Контрольная работа №1, 2 по дисциплине «Методы синтеза и оптимизации» Выполнила студентка группы ИТ 99-1з Александрова А.Н Проверила Веремей О.В. Краматорск 2002 Задание 1ПРОГРАММИРОВАНИЕ ЧИСЛЕННЫХ МЕТОДОВ ОДНОМЕРНОЙ ОПТИМИЗАЦИИ Цель задания: закрепить теоретические сведения и приобрести практические навыки разработки алгоритмов и программ для нахождения экстремальных значений функции одной переменной методом перебора с применением ЭВМ. Найти максимум и минимум функции при изменении аргумента от -4 до 3 с точностью 0,0001. Функция достигает максимума при меньших значениях аргумента. Постройте график функции. Исходные данные приведены в таблице 1. Таблица 1 |
Номер варианта | A | B | С | D | | 6 | 1,5 | 0,4 | -5,6 | -10,8 | | |
Рисунок 1 - блок-схема метода Решение задачи на ЭВМ с графиком исследуемой функцииНа рисунке 2 изображено решение задачи на ЭВМ с графиком функции. Рисунок 2- результаты работы программы, график функции Краткие выводы по работеЗадача решена методом последовательного равномерного перебора с уточнением, т.е. вначале проводится поиск с большим шагом, а при нахождении экстремума поиск повторяется в зоне экстремума с уменьшенным шагом. Программа реализующая алгоритм: procedure TForm1.SpeedButton1Click(Sender: TObject); var a,b,c,d,e,y,Ymax,Xmax, x0,X,Xk,Xmin,Ymin,h,k :real; i,n,count :integer; status :integer; // 0-убывание, 1-возрастание label l1; Function MOO(x:real):real; begin result:=a*x*x*x + b*x*x + c*x + d; end; begin Form1.Series1.Clear; try // ввод начальных условий with form1 do begin LabelXmin.Caption:='Xmin = 0'; LabelYmin.Caption:='Ymin = 0'; LabelXmax.Caption:='Xmax = 0'; LabelYmax.Caption:='Ymax = 0'; end; a:=strtofloat(form1.Edit1.Text); b:=strtofloat(form1.Edit2.Text); c:=strtofloat(form1.Edit3.Text); d:=strtofloat(form1.Edit4.Text); e:=strtofloat(form1.Edit5.Text); h:=strtofloat(form1.Edit6.Text); x0:=strtofloat(form1.Edit7.Text); xk:=strtofloat(form1.Edit8.Text); k:=10; Ymin:=1000000000; Ymax:=-10000000000; status:=1; count:=1; except showMessage('Неправильно введены начальные условия'); end; l1: n:=trunc((xk-x0)/h)+1; x:=x0; for i:=1 to n do begin y:=MOO(x); case status of 0: if y<Ymin then begin Ymin:=y; Xmin:=x; X:=x+h; end; 1: if Y>Ymax then begin Ymax:=y; Xmax:=x; X:=x+h; end; end; end; if count <= 2 then if h <= e then begin with form1 do // вывод результата begin LabelXmin.Caption:='Xmin = '+floatTostr(Xmin); LabelYmin.Caption:='Ymin = '+floatTostr(Ymin); LabelXmax.Caption:='Xmax = '+floatTostr(Xmax); LabelYmax.Caption:='Ymax = '+floatTostr(Ymax); end; status :=(status+1) mod 2; //Следующий экстремум count:=count+1; x0:=Xmin; xk:= strtofloat(form1.Edit8.Text); h:=strtofloat(form1.Edit6.Text); goto l1; end else begin x0:=Xmin-h; xk:=Xmin+h; h:=h/k; goto l1; end; x:=strtofloat(form1.Edit7.Text); while x < strtofloat(form1.Edit8.Text) do begin y:=MOO(x); form1.Series1.AddXY(x,y); x:=x+0.1; end; end;Задание 2РЕШЕНИЕ ОДНОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ МЕТОДАМИ ПОСЛЕДОВАТЕЛЬНОГО ПОИСКА Цель задания: приобрести практические навыки разработки алгоритмов и программ для решения одномерных задач оптимизации методами последовательного поиска: дихотомии и золотого сечения. Индивидуальное заданиеНайти минимум функции f(x) на промежутке [a,b] с точностью . Исходные данные и номера вариантов приведены в таблице 2. Построить график минимизируемой функции. Найдите минимум функции на промежутке [a,b] c точностью е = 10-4 , методом «золотого сечения»постройте график минимизируемой функции. Блок-схема метода «Золотого сечения» представлена на рисунке3. Рисунок 3 - Блок-схема метода «Золотого сечения» На рисунке 4 изображено решение задачи на ЭВМ и график минимизируемой функции. Вывод: Методы последовательного поиска строятся в предположении унимодальности функции на заданном интервале. Исходя из свойств, унимодальности строится такая стратегия последовательного поиска экстремальной точки Х*, при которой любая пара вычислений f(x) позволяет сузить область поиска (интервал неопределённости).Процедура минимизации функции: procedure TForm1.SpeedButton2Click(Sender: TObject); label l2; Var a,b,e,x,x1,x2,y,y1,y2,Xmin,Ymin :real ; n :integer; t:string; Function f(x:real):real; begin f:=tan(x)+exp(-x)+x; { f:=x*x+sin(x);} end; begin Form1.Series1.Clear; try // ввод начальных условий a:=strtofloat(form1.Edit9.Text); b:=strtofloat(form1.Edit10.Text); e:=strtofloat(form1.Edit11.Text); except showMessage('Неправильно введены начальные условия'); end; x1:=a+0.382*(b-a); x2:=b-0.382*(b-a); y1:=f(x1); y2:=f(x2); n:=1; l2: n:=n+1; if y1<= y2 then begin b:=x2; if (b-a) >= e then begin x2:=x1; x1:=a+0.382*(b-a); y2:=y1; y1:=f(x1); goto l2; end; end else begin a:=x1; if (b-a)>=e then begin x1:=x2; x2:=b-0.382*(b-a); y1:=y2; Y2:=f(x2); goto l2; end; end; Xmin:=(a+b)/2; Ymin:=f(Xmin); str(Xmin:10:4,t); form1.Label20.Caption:='Xmin = '+t; str(Ymin:10:4,t); form1.Label21.Caption:='Ymin = '+t; form1.Label22.Caption:='n = '+Inttostr(n); x:=strtofloat(form1.Edit9.Text); while x < strtofloat(form1.Edit10.Text) do begin y:=f(x); form1.Series1.AddXY(x,y); x:=x+0.1; end; end; Задание 3 ГРАДИЕНТНЫЕ МЕТОДЫ РЕШЕНИЯ МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ Цель задания: закрепить теоретические сведения и приобрести практические навыки поиска безусловного экстремума функции многих переменных градиентным методом. Индивидуальное заданиеНайдите минимум функции методом наискорейшего спуска, выбрав начальную точку .Дать геометрическую иллюстрацию решения задачи. Решение1) В точке f(X0) = = -14,5 Вычислим координаты градиента функции в точке Х0 : . Поскольку , то Х0 не является точкой экстремума 2) Переместимся изХ0 вдоль градиента - в новую точкуХ1 по формуле: т.е. . Для определения координат точки Х1 нужно выбрать значение шага . Получим : Из соотношения (,)=0 имеем: (-3-3)(-3)+(1+)=10+10=0 откуда = Задание 4 ПРИМЕНЕНИЕ ГРАДИЕНТНЫХ МЕТОДОВ ДЛЯ ОПТИМИЗАЦИИ НА ЭВМ МАТЕМАТИЧЕСКИХ МОДЕЛЕЙ ОБЪЕКТОВ Цель задания: приобрести практические навыки разработки алгоритмов и программ оптимизации математических моделей градиентным методом. Индивидуальное заданиеНайдите минимум функции f(x1,х2) методом наискорейшего спуска, выбрав в качестве начальной точки сначала Хо, а затем точку из противоположного квадраниа. Сравните число итераций. Для определения оптимального шага путём одномерной минимизации вдоль антиградиентного направления примите метод дихотомии в программе, предусмотрите отрисовку траектории наискорейшего спуска. , при Хо(2,4). Блок-схема алгоритма решения изображена на рисунке 5 Рисунок 5- блок-схема алгоритма решения методом наискорейшего спуска Результаты работы программы.
Рисунок 6- Решение задачи на ЭВМ и траектория поиска оптимальных значений (при Хо(2,4)) Рисунок 7 Решение задачи на ЭВМ и траектория поиска оптимальных значений (при Хо(-2,-4)) Вывод: Особенностью метода наискорейшего спуска является то, что поиск решения выполняется с оптимальным шагом, который рассчитывается с помощью одномерной минимизации функции. Градиенты в двух соседних точках ортогональны и поэтому траектория к оптимальному решению в виде зигзага с поворотом под прямым углом. При Хо(2,4) количество итераций - 5, а при Хо(-2,-4) количество итераций уменьшилось до 4,а значение целевой функции осталось прежним - F(x)=0,61370564.Листинг подпрограммы метода.unit Opt1_4; interface uses Messages, SysUtils, Graphics, Forms, Dialogs; const n=2; type Artype =array[1..n] of real; Funop=function(xi:Artype):real; ProcMin=Procedure(a,b,e:real; var xm,ym:real); type TForm2 = class(TForm) private public procedure Optimiz(k: integer); end; var Form2: TForm2; Nmax,prn,NN:integer; e,Fopt:real; X0,G:artype; f1:funop; Pmin:ProcMin; kAntGrad:real; function model1(x: Artype): real; implementation uses Main,UnitGraph; // Подпрограмма вычисления заданной функции function model(x:Artype):real; begin model:= exp(x[1])+sqr(x[2])-2*x[1]; end;
Страницы: 1, 2
|