MaxEdu.ru
» » » Оптимизация прямого поиска для определения минимума функции n переменных методом Нелдера-Мида
Вернуться назад

Оптимизация прямого поиска для определения минимума функции n переменных методом Нелдера-Мида

В пояснительной записке изложены основы прямого поиска для определения минимума функции n переменных. Выбран метод оптимизации поиска Нелдера-Мида. В расчетной части метод Нелдера-Мида реализован программно, в среде TurboPascal, представлены блок схема алгоритма оптимизации, листинг программы.
СОДЕРЖАНИЕ
Введение……………………………………………………...
1 Метод Нелдера-Мида…………………………………...
2 Блок –схема алгоритма…………………………………..
3 Листинг программы……………………………………...
4 Список используемой литературы………………………
4
5
9
10
16

ВВЕДЕНИЕ
На разработку методов прямого поиска для определения минимума функции n переменных было затрачено много усилий. Методы прямого поиска являются методами, в которых используются только значения функции. Один из наиболее надежных метод Нелдера-Мида, являющийся одним из самых эффективных, если
Рассмотрим функцию двух переменных. Ее линии постоянного уровня представлены на рис. 1. Линией постоянного уровня называется кривая в двухмерном сечении пространственных параметров ( в данном случае – в плоскости ), значение функции на которой константа. Минимум функции лежит в точке , где -где ряд значений от 0,1 до 1 с шагом 0,1.

1 МЕТОД НЕЛДЕРА-МИДА
Метод Нелдера-Мида является развитием симплексного метода Спендли, Хекста и Химсворта. Множество значений й равноудаленной точки в n - мерном пространстве называется регулярным симплексом. Эта конфигурация рассматривается в методе Спендли, Хекста и Химсворта. Следовательно, в двумерном пространстве симплексом является равносторонний треугольник, а в трехмерном пространстве – правильный тетраэдр.
Идея метода состоит в сравнении значений функции в вершинах симплекса и перемещении симплекса в направлении оптимальной точки с помощью итерационной процедуры. В симплексном методе, предложенным первоначально, регулярный симплекс использовался на каждом этапе. Нелдер и Мид предложили несколько модификаций этого метода, допускающих, чтобы симплексы были неправильными. В результате получился очень надежный метод прямого поиска, являющийся одним из самый эффективных, если
В данном методе симплекс перемещается с помощью трех основных операций: отражение, растяжение и сжатия. Рассмотрим основные шаги процедуры:
А. Найдем значения функции
в вершинах симплекса.
Б. Найдем наибольшее значение функции , следующее за набольшим значением функции , наименьшее значение функции и соответствующие им точки .
В. Найдем центр тяжести всех точек, за исключением точки . Пусть центром тяжести будет
И вычислим .
Г. Удобнее всего начать перемещение от точки . Отразим точку относительно точки , получим точку и найдем .
Операция отражения иллюстрируется рис. 1. Если коэффициент отражения, то положение точки определяется следующим образом:
Д. Сравним значения функции и .
1. Если , но то является лучшей точкой по с сравнению с другими двумя точками симплекса и мы заменяем точку на точку и, если сходимость не достигнута, возвращаемся на шаг Б.
3. Если > и >, то перейдите на шаг Е.
Е. Сравним значения функции и .
1. Если >, то переходим непосредственно к шагу Е, 2.
Если из шага Д,2. приведенного выше. Затем переходим на шаг Е, 2.
2. В этом случае >, поэтому ясно, что мы переместились далеко от точки к точке . Попытаемся исправить это, найдя точку с помощью шага сжатия, показанного на рисунке 3.
Если >, то сразу переходим к шагу сжатия и находим точку из соотношения:
Если fh then
begin
fh:=f[i];
h:=i;
end;
if f[i]fg then
begin
fg:=f[i];
g:=i;
end;
for j:=1 to n do
begin
xo[j]:=0;
for i:=1 to n+1 do
if i<>h then xo[j]:=xo[j]+s[i,j];
xo[j]:=xo[j]/n;
xh[j]:=s[h,j];
xg[j]:=s[g,j];
xl[j]:=s[l,j];
end;
for j:=1 to n do x[j]:=xo[j];
fo:=z(x[1],x[2],x[3],x[4]);
writeln('Vichisliaem centr tiagest 1120');
for j:=1 to n do
begin
xr[j]:=xo[j]+al*(xo[j]-xh[j]);
x[j]:=xr[j];
end;
fr:=z(x[1],x[2],x[3],x[4]);
writeln('Vipolniaetsia otragenie 1220', z(x[1],x[2],x[3],x[4]):3:5);
if frfg then goto 1600;
goto 1520;
1300:
for j:=1 to n do
begin
xe[j]:=ga*xr[j]+(1-ga)*xo[j];
x[j]:=xe[j];
end;
fe:=z(x[1],x[2],x[3],x[4]);
if fefh then goto 1700;
for j:=1 to n do xh[j]:=xr[j];
f[h]:=fr;
1700:
for j:=1 to n do
begin
xc[j]:=be*xh[j]+(1-be)*xo[j];
x[j]:=xc[j];
end;
fc:=z(x[1], x[2],x[3],x[4]);
if fc>fh then goto 1920;
for j:=1 to n do s[h,j]:=xc[j];
f[h]:=fc;
writeln('Vipolnenie sjatia 1880', fc:3:5);
goto 2060;
1920:
for i:=1 to n+1 do
begin
for j:=1 to n do
begin
s[i,j]:=(s[i,j]+xl[j])/2;
x[j]:=s[i,j];
end;
f[i]:=z(x[1], x[2],x[3],x[4]);
end;
Writeln('Vipolnenie redikcii 2040');
2060:
s1:=0;
s2:=0;
for i:=1 to n+1 do
begin
s1:=s1+f[i];
s2:=s2+f[i]*f[i];
end;
sig:=s2-s1*s1/(n+1);
sig:=sig/(n+1);
if sig<0.000000001 then goto 2220;
2200:
goto 620;
2220:
Writeln('Minimum naiden v tochke f=', z(x[1],x[2],x[3],x[4]):3:5);
for j:=1 to n do Writeln('x',j,' =',xl[j]:3:5);
Writeln('Kolichestvo vichisleniy ravno ', shag);
readln;
end.

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать полную версию
Рефераты по информатике В пояснительной записке изложены основы прямого поиска для определения минимума функции n переменных. Выбран метод оптимизации поиска Нелдера-Мида. В
Оценок: 613 (Средняя 5 из 5)

Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.

Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.

© 2014 - 2022 MaxEdu.ru