Оптимизационные методы минимизации и максимизации

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?гут сильно повлиять на ход процесса.

Поэтому на практике часто сравнение алгоритмов проводят с помощью вычислительных экспериментов при решении так называемых специальных тестовых задач. Эти задачи могут быть как с малым, так и с большим числом переменных, иметь различный вид нелинейности. Они могут быть составлены специально и возникать из практических приложений, например задача минимизации суммы квадратов, решение систем нелинейных уравнений и т.п.

Библиографический список

 

1.Микрокова В.И. Методы оптимизации. - Киров, 2004.

2.Пантелеев А.В. Методы оптимизации в примерах и задачах.- Высшая школа ,2002.

.Интернет.

 

Приложение

 

Листинг программы

Для программной реализации был предложен метод Коши. Алгоритм метода описан в пояснительной записке.

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;N=1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{ lin_ur=new TStringList;}

//---------------------------------------------------------------------------__fastcall TForm1::saveris()

{ if(Form1->SaveDialog1->Execute())

{Form1->Chart1->SaveToBitmapFile(Form1->SaveDialog1->FileName);}}

//---------------------------------------------------------__fastcall TForm1::saverez()

{int k=0;str1="";="Метод Коши Уравнение имеет вид: f(X1,X2)=(X1-"+FloatToStrF(a,ffGeneral,6,0)+")^2+(X2-"+FloatToStrF(b,ffGeneral,6,0)+")^2+X1*X2; Точка поиска:["+FloatToStrF(x110,ffGeneral,6,0)+";"+FloatToStrF(x210,ffGeneral,6,0)+"]\n";(int j=0;j<N;j++)

{ for(int i=0;i<5;i++)

{k=StrLen(Form1->StringGrid1->Cells[i][j].c_str());+=(" "+Form1->StringGrid1->Cells[i][j]+" ");(int p=0;25-k>p;p++)+=(" ");+=("|");}+=\n;}(Form1->SaveDialog2->Execute())

{String save=Form1->SaveDialog2->FileName;*fp;=fopen(save.c_str(),"w");(str1.c_str(),fp);(fp);}

}

//-----------------------------------------------------------__fastcall TForm1::zadanie()

{ Button2->Enabled=true;->Enabled=false;->Enabled=false;->Enabled=true;->Clear();->Clear();=StrToInt(Edit1->Text.c_str());=StrToInt(Edit2->Text.c_str());=atof(Edit3->Text.c_str());=atof(Edit4->Text.c_str());=x11;=x21;_pred=funk(x11,x21);=(-8*b+4*a)/3.0+2*b;=(4*b-2*a)/3.0;->Caption="["+FloatToStrF(q1,ffGeneral,6,0)+";"+FloatToStrF(q2,ffGeneral,6,0)+"]";

Label11->Caption="Данная точка является минимумом функции";

fq=funk(q1,q2);->Caption=FloatToStrF(fq,ffGeneral,6,0);

//Label5->Caption="f(X1,X2) = (X1-"+FloatToStrF(a,ffGeneral,6,0)+")^2+(X2-"+FloatToStrF(b,ffGeneral,6,0)+")^2+X1*X2";

//Form1->StatusBar1->Panels->Items[3]->Text="*******Введите точность метода и нажмите \"ВЫЧИСЛИТЬ\"*******"; }

//----------------------------------------__fastcall TForm1::vi4()

{Button1->Enabled=true;->Enabled=false;->Enabled=false;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;->Enabled=true;_lin_ur();_ur=new TStringList;();();

// Form1->StatusBar1->Panels->Items[3]->Text="*******Введите новые исходные данные и нажмите \"ВВОД ДАННЫХ\"*******";}

//---------------------------------------------------------------------------__fastcall TForm1::poisk()

{float XX1,XX2,YY1,YY2;>Clear();>AddXY(q1,q2,"",clBlue);->StringGrid1->Cells[0][0]="N";->StringGrid1->Cells[1][0]="Производная";->StringGrid1->Cells[2][0]="Коэфициент альфа";->StringGrid1->Cells[3][0]="Текущая точка";->StringGrid1->Cells[4][0]="Значение функции";->Clear();->Clear();i=0;=StrToFloat(Edit5->Text);_pred=9999;->AddXY(x11,x21,"",clBlue);->AddXY(x11,x21,"",clBlue);=1000;(fabs(tmp1)>eps)

{ N=i+2;->Cells[0][i+1]=i;=df_x1(x11, x21);=df_x2(x11, x21);((tmp1!=0)&(tmp2!=0))->Cells[1][i+1]="["+FloatToStrF(tmp1,ffGeneral,4,4)+";"+FloatToStrF(tmp2,ffGeneral,4,4)+"]";_v= 2*tmp1*(x11-a)+2*tmp2*(x21-b)+x11*tmp2+x21*tmp1;_z= 2*(tmp1*tmp1+tmp2*tmp2+tmp1*tmp2);(alpha_z!=0)

{alpha=alpha_v/alpha_z;->Cells[2][i+1]=FloatToStrF(alpha,ffGeneral,6,0); }break;_pred=temp_tek;=x11-tmp1*alpha;=x21-tmp2*alpha;->AddXY(x11,x21,"",clBlue);->AddXY(x11,x21,"",clBlue);->Cells[3][i+1]="["+FloatToStrF(x11,ffGeneral,6,0)+";"+FloatToStrF(x21,ffGeneral,6,0)+"]";_tek=funk(x11,x21);->Cells[4][i+1]=FloatToStrF(temp_tek,ffGeneral,6,0);++;}}

//---------------------------------------------------------------------------__fastcall TForm1::funk(float x11, float x21)

{return (pow(x11-a,2)+pow(x21-b,2)+x11*x21);}

//------------------------------------------------------__fastcall TForm1::df_x1(float x11,float x21)

{return (2*x11-2*a+x21);}

//--------------------------------------------------------__fastcall TForm1::df_x2(float x11,float x21)

{return (2*x21-2*b+x11);}__fastcall TForm1::line()

{ double DD=0 ; // дискриминант 1D=0; // дискриминант 2x_n; // начало сканированияx_k; // конец сканированияh=0.01; // шаг построенияxx21,xx22,xx11,fx; // переменные и функция

Chart1->UndoZoom(); // отмена Zooma->Clear();11=x11; // точка оптимума

xx21=x21;

Series4->AddXY(xx11,xx21,"",clBlue);

fx=temp_tek; // значение функции в точке опт.(int i=0;i<8;i++)

{fx+=10; // шаг построения линий уровня

TLineSeries *Series2=new TLineSeries(Form1);->ParentChart=Chart1;_ur->AddObject("",Series2);*Series3=new TLineSeries(Form1);->ParentChart=Chart1;_ur->AddObject("",Series3);->Clear();->Clear();=pow((8*a-4*b),2)-16*(fx-a*a)*(1-4);_n=(4*b-8*a+sqrt(DD))/(2*(1-4));_k=(4*b-8*a-sqrt(DD))/(2*(1-4));=x_n;(xx11<x_k)

{D=(1-4)*xx11*xx11+(8*a-4*b)*xx11+4*(fx-a*a);(DAddXY(xx11,xx22,"",clGreen);} }

//--------------------------------------------------------------------__fastcall TForm1::del_lin_ur()

{for (int i=lin_ur->Count-1;i>=0;i--)lin_ur->Objects[i];lin_ur;}__fastcall TForm1::N7Click(TObject *Sender)

{Close();}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{ zadanie();}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{ vi4();}

//---------------------------------------------------------------------------__fastcall TForm1::N2Click(TObject *Sender)

{ zadanie();}

//---------------------------------------------------------------------------__fastcall TForm1::N3Click(TObject *Sender)

{vi4();}

//---------------------------------------------------------------------------__fastcall TForm1::Button4Click(TObject *Sender)

{ saveris();}

//---------------------------------------------------------------------------__fastcall TForm1::Button3Click(TObject *Sender)

{saverez();}

//---------------------------------------------------------------------------__fastcall TForm1::N4Click(TObject *Sender)

{saverez(); }

//---------------------------------------------------------------------------__fastcall TForm1::N5Click(TObject *Sender)

{saveris();}

//---------------------------------------------------------------------------__fastcall TForm1::PageControl1Change(TObject *Sender)

RichEdit1->Lines->LoadFromFile("metod.rtf");}">{//Form1->RichEdit1->Lines->LoadFromFile(&q