Найти минимум функции n переменных методом Гольдфарба
Задача оптимизации с точки зрения математики как задача нахождения экстремума вещественной функции в некоторой области. Классификация и типы методов оптимизации, условия их практического использования. Создание программы, ее листинг, описание алгоритмов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.06.2012 |
Размер файла | 181,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
на тему
«Найти минимум функции n переменных методом Гольдфарба»
Введение
С точки зрения математики задачей оптимизации называется задача нахождения экстремума вещественной функции в некоторой области. Чем больше информации мы знаем, тем более эффективно и быстро можно достичь минимума, если правильно воспользоваться информацией. Методы оптимизации классифицируют в соответствии с задачами оптимизации:
1) Методы оптимизации классифицируют в соответствии с задачами оптимизации:
Локальные методы: сходятся к какому-нибудь локальному экстремуму целевой функции. В случае унимодальной целевой функции, этот экстремум единственен, и будет глобальным максимумом / минимумом.
2) Глобальные методы: имеют дело с многоэкстремальными целевыми функциями. При глобальном поиске основной задачей является выявление тенденций глобального поведения целевой функции.
По критерию размерности допустимого множества, методы оптимизации делят на методы одномерной и многомерной оптимизации.
3) Задачи оптимизации, в которых целевая функция F() и ограничение , i = 1, …, m является линейными функциями, разрешаются так называемыми методами линейного программирования.
Метод Гольдфарба был разработан в 1970 году, но до сих пор является весьма эффективным и оригинальным. Поиск состоит из последовательности шагов исследующего поиска вокруг базисной точки, за которой в случае успеха следует поиск по образцу. Он применяется для решения задачи минимизирования функции без учёта ограничений.
Описание алгоритмов решения поставленной задачи
В рассмотренном ниже классе методов с переменной метрикой реализована идея адаптивного управления.
Информация о предыдущих итерациях накапливается в специальной матрице Н, которая по мере накопления информации постепенно превращается в обратную матрицу Гессе
При этом матрица вторых производных на каждом шаге не пересчитывается.
Метод Гольдфарба
Он более устойчив к ошибкам вычислений, чем ДФП
Описание тестовой задачи и результатов работы программы
Рассмотрим решение задачи при помощи данной программы.
Чтобы выполнить нашу программу мы должны поступить следующим образом:
1. Мы должны ввести значения функции, например (x[0]+2x[1])2в Unit1. Это будет выглядеть так, как представлено на рисунке 1.
Рис. 1.
2. И для того чтобы получить ответ, мы должны нажать на кнопку «Ввести». В результате появится график, это и будет наш ответ (Рис. 2.)
Рис. 2.
Ответ: Минимум x=(0,0057 -0,0029)
f(x)=0,0000
Градиент (0,0000 0,0000)
Заключение
Ш Среди методов нулевого порядка наибольшей эффективностью обладают метод Розенброка и метод НелдераМида
Ш Если же функция гладкая, т.е. имеет непрерывные производные, то наиболее эффективным себя зарекомендовали метод Гольдфарба и метод ДФП (они в 2-6 раз эффективнее по быстродействию чем метод Розенброка).
Ш На самом деле многое зависит от вида конкретной оптимизируемой функции. Особенно если количество оптимизируемых переменных больше 4-5 нужно иметь в запасе несколько разнообразных методов, а процесс оптимизации строить на основе интерактивных программ.
Литература
1. Колосов С.В. Программирование в средеDelphi: Учеб.пособие. - Мн.: БГУИР
2. Калиткин Н.Н. Численные Методы. - М.:Наука, 1978. 512 с.
3. Фленов М.Е. Библия Delphi. - 2-eизд., перераб. и доп. - СПб.:БХВ-Петербург, 2008.-800 с.
4. Мощные приборы СВЧ с дискретным взаимодействием (теория и оптимизация)
Текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, ArrowCha, Math,
ComCtrls, Unit2, Grids;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Chart1: TChart;
Series1: TLineSeries;
procedure Button1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1:TForm;
leftmin, leftmax, bottommin, bottommax:integer;
funcno:integer;
implementation
{$R *.dfm}
functionfunc (x:TMas1):real;
begin
func:=sqr (x[0]+2*x[1]);
end;
procedure TForm1. Button1Click (Sender: TObject);
vari, j:integer;
x, g:TMas1;
myHmat:TMas2;
eps:single;
ss:TUnit2;
begin
memo1. Lines. Clear;
with Chart1 do begin
LeftAxis. Automatic:=false;
LeftAxis. Minimum:=-5;
LeftAxis. Maximum:=5;
BottomAxis. Automatic:=false;
BottomAxis. Minimum:=-5;
BottomAxis. Maximum:=5;
AnimatedZoom:=True;
SeriesList[0].Clear;
end;
eps:=0.00001;
SetLength (x, 2);
SetLength (g, 2);
SetLength (myHmat, 2,2);
// НАЧАЛЬНЫЕ ПЕРЕМЕННЫЕ
x[0]:=3;
x[1]:=6;
ss:=TUnit2. Create (x, 2, eps, func, Chart1); // (массив с перменными, количество переменных, точность, функция, TChart график)
ss.minimizationGoldfarb; // минимизация
x:=ss.x1;
g:=ss.g1;
myHmat:=ss. Hmat;
memo1. Lines. Add ('минимумпри x=('+floattostrf (x[0], fffixed, 4,4)+' '+floattostrf (x[1], fffixed, 4,4)+')');
memo1. Lines. Add ('f(x)='+floattostrf (func(x), fffixed, 4,4));
memo1. Lines. Add ('градиент ('+floattostrf (g[0], fffixed, 4,4)+' '+floattostrf (g[1], fffixed, 4,4)+')');
end;
end.
unit Unit2;
interface
usesDialogs, Chart;
type
TMas2 = array of array of real;
TMas1 = array of real;
fun=function (x:TMas1):real;
TUnit2 = class(TObject)
dk, v, u, g1, g0, Hu, x0, x1: TMas1;
n, num, i:integer;
Amat, Hmat, vuTH, HuvT, vvT:TMas2;
zm, eps, uTHu, uTv, uuT, h:real;
func:fun;
chart:TChart;
constructor Create (x:TMas1; enum:integer; meps:single; mfunc:fun; mchart:TChart);
function F1 (x:real):real;
function Grad (x:TMas1):TMas1;
functionMakeOneMatrix (hm: TMas2): TMas2;
functionNullMatrix (hm:TMas2):TMas2;
function mp2 (x0: real; h, e: real): real;
procedureminimizationGoldfarb;
end;
implementation
function TUnit2.F1 (x:real):real;
var
tmp:TMas1;
i:integer;
begin
SetLength (tmp, num);
for i:=0 to num-1 do
tmp[i]:=x0 [i]+x*dk[i];
F1:=func(tmp);
end;
function TUnit2. MakeOneMatrix (hm: TMas2): TMas2;
var
i, j:integer;
begin
for i:=0 to num-1 do
for j:=0 to num-1 do
if i=j then
hm[i] [j]:=1
else
hm[i] [j]:=0;
result:=hm;
end;
function TUnit2. Grad (x:TMas1):TMas1;
var i:integer;
tmp, grad:TMas1;
begin
SetLength (tmp, num);
SetLength (grad, num);
for i:=0 to num-1 do
tmp[i]:=x[i];
for i:=0 to num-1 do begin
tmp[i]:=tmp[i]+h;
grad[i]:=func(tmp);
tmp[i]:=tmp[i] - 2*h;
grad[i]:=(grad[i] - func(tmp))/(2*h);
end;
result:=grad;
end;
function TUnit2.mp2 (x0: real; h, e: real): real;
var
comput: boolean;
x1, x2, x3, y1, y2, y3, z1, z2, p, q, zm: real;
begin
x1:=x0-h;
x2:=x0;
x3:=x0+h;
y1:=F1 (x1);
y2:=F1 (x2);
y3:=F1 (x3);
comput:=False;
if (y1 - (2*y2)+y3)>0 then
begin
whilecomput=False do begin
z1:=x1-x3;
z2:=x2-x3;
p:=((((y1-y3)*z2) - ((y2-y3)*z1)))/((z1*z2*(z1-z2)));
q:=(((y1-y3)*sqr(z2)) - ((y2-y3)*sqr(z1)))/(z1*z2*(z2-z1));
zm:=-q/(2*p);
x1:=x2;
x2:=x3;
y1:=y2;
y2:=y3;
x3:=x3+zm;
y3:=F1 (x3);
if abs(zm)<e then
begin
result:=x3+zm;
comput:=True;
end;
end;
end;
end;
constructor TUnit2. Create;
var i:integer;
begin
eps:=meps;
func:=mfunc;
num:=enum;
chart:=mchart;
SetLength (g1, num);
SetLength (g0, num);
SetLength (dk, num);
SetLength (v, num);
SetLength (u, num);
SetLength (x1, num);
SetLength (x0, num);
SetLength (Hu, num);
SetLength (Amat, num, num);
SetLength (Hmat, num, num);
SetLength (vuTH, num, num);
SetLength (HuvT, num, num);
SetLength (vvT, num, num);
h:=0.0000000000001;
for i:=0 to num-1 do
x0 [i]:=x[i];
end;
procedure TUnit2.minimizationGoldfarb;
vari, j:integer;
cond1, cond2:real;
begin
g0:=Grad(x0);
for i:=0 to num-1 do
dk[i]:=-g0 [i];
Hmat:=MakeOneMatrix(Hmat);
Amat:=NullMatrix(Amat);
chart. SeriesList[0].AddXY (x0 [0], x0 [1]);
zm:=0;
n:=0;
repeat
inc(n);
zm:=mp2 (1,0. 5,0.0000001);
for i:=0 to num-1 do
x1 [i]:=x0 [i]+zm*dk[i];
chart. SeriesList[0].AddXY (x1 [0], x1 [1]);
for i:=0 to num-1 do
v[i]:=zm*dk[i];
for i:=0 to num-1 do
x0 [i]:=x1 [i];
g1:=Grad(x1);
for i:=0 to num-1 do
u[i]:=g1 [i] - g0 [i];
for i:=0 to num-1 do
g0 [i]:=g1 [i];
//uTv=vTu
uTv:=0;
for i:=0 to num-1 do
uTv:=uTv+v[i]*u[i];
vuTH[0] [0]:=v[0]*u[0]*Hmat[0] [0]+v[0]*u[1]*Hmat[1] [0];
vuTH[0] [1]:=v[0]*u[0]*Hmat[0] [1]+v[0]*u[1]*Hmat[1] [1];
vuTH[1] [0]:=v[1]*u[0]*Hmat[0] [0]+v[1]*u[1]*Hmat[1] [0];
vuTH[1] [1]:=v[1]*u[0]*Hmat[0] [1]+v[1]*u[1]*Hmat[1] [1];
for i:=0 to num-1 do
for j:=0 to num-1 do
Amat[i] [j]:=0;
for i:=0 to num-1 do
for j:=0 to num-1 do
vuTH[i] [j]:=-vuTH[i] [j];
// vvT
for i:=0 to num-1 do
for j:=0 to num-1 do
vvT[i] [j]:=v[i]*v[j];
for i:=0 to num-1 do
for j:=0 to num-1 do
Hu[i]:=Hu[i]+Hmat[i] [j]*u[j];
//HuvT
for i:=0 to num-1 do
for j:=0 to num-1 do
HuvT[i] [j]:=Hu[i]*v[j]; uTHu:=(Hmat[0] [0]*u[0]+Hmat[0] [1]*u[1])*u[0]+(Hmat[1] [0]*u[0]+Hmat[1] [1]*u[1])*u[1];
uTHu:=1+uTHu/uTv;
for i:=0 to num-1 do
for j:=0 to num-1 do
vvT[i] [j]:=vvT[i] [j]*uTHu;
for i:=0 to num-1 do
for j:=0 to num-1 do
Amat[i] [j]:=vuTH[i] [j]+HuvT[i] [j]+vvT[i] [j];
for i:=0 to num-1 do
for j:=0 to num-1 do
Amat[i] [j]:=Amat[i] [j]/uTv;
for i:=0 to num-1 do
for j:=0 to num-1 do
Hmat[i] [j]:=Hmat[i] [j]+Amat[i] [j];
for i:=0 to num-1 do
dk[i]:=0;
for i:=0 to num-1 do
for j:=0 to num-1 do
dk[i]:=dk[i]+Hmat[i] [j]*g1 [j];
for i:=0 to num-1 do
dk[i]:=-dk[i];
cond1:=0;
cond2:=0;
for i:=0 to num-1 do
cond1:=cond1+sqr (v[i]);
for i:=0 to num-1 do
cond2:=cond2+sqr (g1 [i]);
cond1:=abs (sqrt(cond1));
cond2:=abs (sqrt(cond2));
until (cond1+cond2)<eps;
end;
function TUnit2. NullMatrix (hm: TMas2): TMas2;
vari, j:integer;
begin
for i:=0 to num-1 do
for j:=0 to num-1 do
hm[i] [j]:=0;
result:=hm;
end;
end.
Блок-схема алгоритма
оптимизация экстремум программа алгоритм
ДА ЦИКЛ
i=0 to num-1
НЕТ
Возврат цикла
Нет перехода
Размещено на Allbest.ru
Подобные документы
Задачи оптимизации в математике и информатике. Классификация методов оптимизации. Методы с переменной метрикой. Значение функции на заданном интервале. Локальный минимум функции. Методы минимизации функции. Классификация методов многомерной оптимизации.
курсовая работа [1,5 M], добавлен 19.06.2012Описание и функциональное назначение программы по оптимизации функции, ее логическая структура и используемые технические средства. Практическое применение программы, вызов и загрузка, входные и выходные данные, выполнение контрольного примера и листинг.
курсовая работа [337,4 K], добавлен 26.02.2012Выбор наиболее эффективного метода поиска экстремума для функции. Оценка погрешности определения точки минимума. Проверка унимодальности уравнения аналитическим методом и по графику. Сравнение алгоритмов по количеству обращений к функции и по точности.
контрольная работа [909,0 K], добавлен 14.08.2019Необходимые условия экстремума. Разработка машинного алгоритма и программы многомерной оптимизации для градиентного метода с использованием метода равномерного поиска. Проверка необходимых и достаточных условий экстремума для найденной точки минимума.
курсовая работа [249,8 K], добавлен 25.09.2013Разработка программы "Задача о строевой записке" для автоматизации процесса решения задач оптимизации. Основные задачи и функции подлежащие автоматизации. Требования к параметрам технических средств. Описание процесса отладки и испытания программы.
курсовая работа [23,1 K], добавлен 28.04.2009Возможные тематики задач ЛП: рациональное использование сырья и материалов, задачи оптимизации раскроя. Преобразование неограниченных по знаку переменных. Алгоритм симплекс-метода. Максимизация основной функции и использования искусственных переменных.
презентация [588,2 K], добавлен 28.05.2014Задача о ранце как задача комбинаторной оптимизации. Задача о загрузке, рюкзаке, ранце. Постановка и NP-полнота задачи. Классификация методов решения задачи о рюкзаке. Динамическое программирование. Метод ветвей и границ. Сравнительный анализ методов.
курсовая работа [1,7 M], добавлен 18.01.2011Сравнение методов многомерной оптимизации Хука-Дживса и Розенброка по числу вычислений и по числу вызова оптимизируемой функции в процессе оптимизации. Особенности применения алгоритмов ускоряющего шага, в которых используется поиск по направлению.
лабораторная работа [2,8 M], добавлен 14.07.2012Условия математической транспортной задачи для ее решения методом потенциалов. Опорный план и проверка целевой функции. Окончательный вариант плана поставок товара предоставленный программой "АОС транспортная задача". Стоимость доставки единицы груза.
лабораторная работа [1,4 M], добавлен 15.10.2015Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.
лабораторная работа [17,4 K], добавлен 25.03.2011