Одно- и многомерная оптимизация - файл n1.doc
приобрестиОдно- и многомерная оптимизацияскачать (50.3 kb.)
Доступные файлы (1):
n1.doc
Цель работы: изучить методы одно- и многомерной оптимизации технологических объектов управления.
Одномерная оптимизация.
Зададимся критерием оптимальности в виде унимодальной функции одного переменного:

.
Листинг М-файла для реализации метода простого перебора.
tek=input('Введите значение tek=');//
текущему значению ф-ции присваиваем значение 0.
pos=input('Введите значение pos=');//
последующему значению ф-ции присваиваем значение 0.
step=input('Введите значение step=');//
задаем шаг перебора. Xmin=input('Введите значение Xmin='); //
задаем минимальное значение входной переменной; Xmax=input('Введите значение Xmax='); //
задаем максимальное значение входной переменной; for x=Xmin:step:Xmax//
начинаем цикл (перебираем значения х от 0 до 15 с шагом 0,01). pred=tek;//
предыдущему значению ф-ции присваиваем значение текущего. tek=pos;//
текущему значению ф-ции присваиваем значение последующего. pos=(10/exp(x))+0.5*x;//
считаем последующее значение функции. if (pred>tek)&(tek
проверяем является ли текущее значение ф-ции минимумом.
Y= tek;//ордината минимума.
X=x- step;//абсцисса минимума.
end
end
[X Y]//выводим координаты точки минимума функции([3;1,9979]).
Используем функцию из метода простого перебора в качестве критерия оптимальности.
Листинг М-файла для реализации метода шагового поиска.
E=input('Введите значение E=');//задаем точность поиска.
n=0;//обнуляем счетчик шагов.
g=input('Введите значение g=');//задаем величину пробного шага.
a=input('Введите значение a=');//задаем величину рабочего шага.
tek=input('Введите значение tek=');//текущему значению ф-ции присваиваем значение (произвольный выбор).
dF=1;//задаем значение разности (произвольный выбор).
while abs(dF)>=E//запускаем цикл с предусловием.
dF=((10/exp(tek+g))+0.5*(tek+g))-((10/exp(tek-g))+0.5*(tek-g));//ищем разность.
pred=tek;
tek=pred-a*sign(dF);
n=n+1;//наращиваем счетчик на единицу.
end
X=tek;
Y=((10/exp(X))+0.5*X);//считаем ординату минимума.
[X Y]//выводим результат([3;1,9979]).
Метод поиска по производной.
Используем функцию из метода простого перебора в качестве критерия оптимальности.
Листинг М-файла для реализации метода поиска по производной.
clc;//отчищаем рабочее окно.
n=0;//обнуляем счетчик шагов.
E=input('Введите значение E=');//задаем точность.
g=input('Введите значение g=');//задаем значение пробного шага.
c=input('Введите значение c=');
tek=input('Введите значение tek=');
dF=1;
while abs(dF)>=E
dF=((10/exp(tek+g))+0.5*(tek+g))-((10/exp(tek-g))+0.5*(tek-g));//находим разность.
a=dF/(2*g);//находим одну из составляющих рабочего шага.
pred=tek;
tek=pred-c*a;
n=n+1;//наращиваем счетчик на единицу.
end
X=tek;
Y=((10/exp(X))+0.5*X);
[X Y]//выводим результат([2,9884;1,9979]).
Экстраполяционный метод поиска.
Используем функцию из метода простого перебора в качестве критерия оптимальности.
Выберем квадратичную параболу, которой можно заменить исходную ф-цию в районе точки экстремума:
.

Листинг М-файла для реализации экстраполяционного метода поиска.
clc;//отчищаем рабочее окно.
n=0;//обнуляем счетчик шагов.
E=input('Введите значение E=');//задаем точность.
g=input('Введите значение g=');//задаем значение пробного шага.
b=0.4;
tek=1;
dF=1;
while abs(dF)>=E
dF=((10/exp(tek+g))+0.5*(tek+g))-((10/exp(tek-g))+0.5*(tek-g));
a=dF/(2*g);
pred=tek;
tek=pred-(1/(2*b))*a;
n=n+1;
end
X=tek;
Y=((10/exp(X))+0.5*X);
[X Y n]
Многомерная оптимизация.
Зададимся критерием оптимальности в виде унимодальной функции двух переменных:
,
.

Листинг М-файла для реализации метода простого перебора.
clc;//очищаем рабочую область;
Xmin=input('Введите значение Xmin=');//задаем минимальное значение переменной Х;
Xmax=input('Введите значение Xmax='); //задаем максимальное значение переменной Х;
Ymin=input('Введите значение Ymin='); //задаем минимальное значение переменной У;
Ymax=input('Введите значение Ymax='); //задаем максимальное значение переменной У;
stepX=input('Введите значение stepX='); //задаем шаг по переменной Х;
stepY=input('Введите значение stepY='); //задаем шаг по переменной У;
k=((Ymax-Ymin)/stepY)+1;//определяем число узлов по У;
m=((Xmax-Xmin)/stepX)+1;// определяем число узлов по Х;
mas=zeros(k,m);
i=1;
j=1;
for y=Ymin:stepY:Ymax
i=1;
for x=Xmin:stepX:Xmax
pos=((x-5).^2+(y-3).^2)/50;
mas(j,i)=pos;//значение ф-ции помещаем в массив;
i=i+1;
end
j=j+1;
end
x=Xmin:stepX:Xmax;
y=Ymin:stepY:Ymax;
C=min(mas);//находим вектор минимальных значений по столбцам;
Cmin=min(C);//находим минимальное значение ф-ции;
for i=1:k
for j=1:m
if mas(i,j)==Cmin
X=x(j);//определяем абсциссу точки минимума;
Y=y(i);//определяем ординату точки минимума;
end
end
end
[X Y Cmin]//выводим координаты точки минимума;
Метод покоординатного поиска.
Используем функцию из метода простого перебора в качестве критерия оптимальности.
Листинг М-файла для реализации метода простого перебора.
clc;
Xmin=input('Введите значение Xmin=');
Xmax=input('Введите значение Xmax=');
Ymin=input('Введите значение Ymin=');
Ymax=input('Введите значение Ymax=');
a=input('Введите значение рабочего шага a=');
g=input('Введите значение пробного шага g=');
E=input('Введите значение точности E=');
dF=1;
Xpred=0;
Xtek=0.00000001;//задаем предварительные значения переменных Х и У для входа в цикл.
Xpos=0.000000011;
Ypred=0;
Ytek=0.00000001;
Ypos=0.000000011;
while abs(dF)>=E
while ((XpredXtek)&(Xtek>Xpos))
dFx=((((Xtek+g-5).^2+(Ytek-3).^2)/50)-(((Xtek-g-5).^2+(Ytek-3).^2)/50));
Xpred=Xtek;
Xtek=Xpos;
Xpos=Xtek-a*sign(dFx);//определяем направление движения по Х
end
while ((YpredYtek)&(Ytek>Ypos))
dFy=((((Xtek-5).^2+(Ytek+g-3).^2)/50)-(((Xtek-5).^2+(Ytek-g-3).^2)/50));
Ypred=Ytek;
Ytek=Ypos;
Ypos=Ytek-a*sign(dFy);//определяем направление движения по У
end
dF=((((Xpos+g-5).^2+(Ypos+g-3).^2)/50)-(((Xpos-g-5).^2+(Ypos-g-3).^2)/50));
end
X=Xpos;
Y=Ypos;
Z=(((Xpos-5).^2+(Ypos-3).^2)/50);
[X Y Z]
Метод градиентного поиска.
Используем функцию из метода простого перебора в качестве критерия оптимальности.
Листинг М-файла для реализации метода простого перебора.
clc;
aX=input('Введите значение параметра настройки аX=');
aY=input('Введите значение параметра настройки аY=');
gX=input('Введите значение шага gX=');
gY=input('Введите значение шага gY=');
E=input('Введите значение точности E=');
dFx=1;
dFy=1;
Xtek=0;
Ytek=0;
Xpred=0;
Ypred=0;
gradFx=0;
gradFy=0;
while (abs(dFx)>=E)&(abs(dFy)>=E)
dFx=((((Xtek+gX-5).^2+(Ytek-3).^2)/50)-(((Xtek-gX-5).^2+(Ytek-3).^2)/50));
gradFx=dFx/(2*gX);//считаем градиент по Х.
dFy=((((Xtek-5).^2+(Ytek+gY-3).^2)/50)-(((Xtek-5).^2+(Ytek-gY-3).^2)/50));
gradFy=dFy/(2*gY);//считаем градиент по У.
Xpred=Xtek;
Ypred=Ytek;
Xtek=Xpred-aX*gradFx;//определяем следующее значение Х.
Ytek=Ypred-aY*gradFy;//определяем следующее значение У.
end
X=Xtek;
Y=Ytek;
Z=((Xtek-5).^2+(Ytek-3).^2)/50;
[X Y Z]
Вывод: в ходе лабораторной работы были исследованы алгоритмы реализующие методы одно- и многомерной оптимизации технологических объектов управления. С помощью всех рассмотренных алгоритмом был получен оптимальный критерий (минимум целевой ф-ции), соответствующий действительному.
Цель работы