МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ТК
Отчет по лабораторной работе №2
по предмету «Методы оптимизации»
на тему: Безусловная многомерная оптимизация
Выполнил:
Проверил: Хасанов А.Ю.
Цель работы: знакомство с методами многомерной безусловной оптимизации первого и нулевого порядка и их освоение, сравнение эффективности применения этих методов конкретных целевых функций.
Найти минимум функции f(x1, x2) = 11·x1 - 0.4·x2 + exp(x12 + 0,21·x22).
Начальное приближение (-1,0); точность решения 0,0001.
Для решения задачи использовать методы:
а) градиентный метод с дроблением шага
б) метод Гаусса-Зейделя (в качестве алгоритма одномерного поиска
использован алгоритм золотого сечения)
в) метод симплекса
г) метод поиска по образцу
Блок-схема поиска по образцу
y[0]=fx(x[1][0],x[2][0]),
N=1; k=0
да
нет
да
нет
да
нет
да
нет
k=0;
l=1
i=1
l=i
нет
i++
i=4
нет да
да
h=h/2;
x[1][l-2]=x[1][0]; x[2][l-2]=x[2][0]; y[l-2]=y[0];
k=l-2; x[1][l+2]=x[1][0]; x[2][l+2]=x[2][0]; y[l+2]=y[0];
k=l+2;
нет
да
minx1=x[1][0];
minx2=x[2][0]; minf=y[0];
x[1][0]=x[1][l]; x[2][0]=x[2][l]; y[0]=y[l];
Блок-схема симплекс метода
x[1][1]=x[1][0]+r;
x[2][1]=x[2][0]; x[1][2]=x[1][0]; x[2][2]=x[2][0]+r;
y[0]=fx(x[1][0],x[2][0]); y[1]=fx(x[1][1],x[2][1]); y[2]=fx(x[1][2],x[2][2]);
N=3;
l1=0,l2=0;
i=0
да
нет
l2=i i++
i=2
i=0
да
нет
i=2
да
нет
c1=0,c2=0
minx1=x[1][l1];
minx2=x[2][l1]; minf=y[l1];
i=0
c1+=x[1][i];
c2+=x[2][i];
да
нет
i++
i=2
c1/=2;
c2/=2; u1=2*c1-x[1][l2];
u2=2*c2-x[2][l2]; y[3]=fx(u1,u2); N++;
да нет
i=0
x[1][l2]=u1; x[2][l2]=u2; y[l2]=y[3];
x[1][i]=(x[1][i]+x[1][l1])/2;
x[2][i]=(x[2][i]+x[2][l1])/2; y[i]=fx(x[1][i],x[2][i]); N++
нет
i++
i=2
r=r/2;
N=N+2
Блок-схема градиентного метода с дроблением шага
gradf1=11+2*x1*exp(x1*x1+0.21*x2*x2); gradf2=-0.4+0.42*x2*exp(x1*x1+0.21*x2*x2);
k=0;
N=0; t=0
grad[1]=gradf1(x1[k],x2[k],1); grad[2]=gradf2(x1[k],x2[k],2);
t=t+2; D=pow(grad[1],2)+pow(grad[2],2)
y=fx(x1[k],x2[k])
z1=fx(x1[k]-alfa*grad[1],x2[k]-alfa*grad[2])
z1-y>-alfa*delta*D
нет
да
x1[k+1]=x1[k]-alfa*grad[1]; x2[k+1]=x2[k]-alfa*grad[2]; grad[1]=gradfx(x1[k+1],x2[k+1],1); grad[1]=gradfx(x1[k+1],x2[k+1],2); D=pow(grad[1],2)+pow(grad[2],2) k++;
t=t+2 alfa=alfa/2
minx1=x1[k]; minx2=x2[k]; minf=fx(minx1,minx2);
нет да