Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ММДО 6 13

.doc
Скачиваний:
4
Добавлен:
07.06.2015
Размер:
164.86 Кб
Скачать

Лабораторная работа 6

МЕТОДЫ СЛУЧАЙНОГО ПОИСКА РЕШЕНИЯ

МНОГОМЕРНЫХ ЗАДАЧ ОПТИМИЗАЦИИ

1 Цель работы

Цель работы - приобрести практические навыки поиска на ЭВМ условного экстремума функций многих переменных методом случайного поиска с пересчетом.

2 Условие задачи

Найдите минимум функции f(x1, x2, x3) методом случайного поиска, выбрав начальную точку X0=(0;0;0), при изменении аргументов xi в пределах [ai, bi В программе предусмотрите отрисовку траектории поиска минимума в координатах x1 О x2, x1 О x3, x2 О x3 и заданных пределах изменения xi.

Проведите сравнительный анализ по числу вычислений функции, задавая параметр М равным 10, 15, 20 при шаге H=1 и задавая шаг Н равным 0,5; 1; 2 при M=15.

Номер варианта

a1

b1

a2

b2

a3

b3

13

-3

3

-6

4

-8

3

Номер

варианта

Функция f(x1,x2,x3)

X0

13

6(x1+x2)2+16(x2+3)2+25(x3-4)2+10

(1,0,-1)

3 Расчетные формулы

Итерационная процедура минимизации функции f(x) с помощью этого алгоритма задается выражением:

Элементы si вектора S (масштабные коэффициенты) определяются из соотношения:

Константу b для определения масштабных коэффициентов необходимо выбирать такой, чтобы si1, т.е. из условия:

Если в процессе поиска минимума какой-либо из компонентов xi вектора оптимизированных параметров X выходит за допустимые границы, т.е. xi> ximax либо xi<ximin, то этому компоненту присваивается граничное значение:

Если при оптимизации поисковая точка выходит за пределы допустимой области, т.е. X>Xmax либо X>Xmin, то этот шаг считается неудачным, а значения всех компонентов оптимизируемого вектора полагаются равными граничным. Если на какой-либо итерации делается подряд m неудачных попыток, то шаг поиска уменьшается в r раз (r>1):yk+1=yk/r. Процесс оптимизации прекращается, если выполняется условие yk<ymin

5 Решение задачи на ЭВМ

6 Краткие выводы по работе

Приобретены практические навыки поиска на ЭВМ условного экстремума функций многих переменных методом случайного поиска с пересчетом.

7 Программа

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls, Series, ArrowCha;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label5: TLabel;

Label6: TLabel;

Edit3: TEdit;

Label7: TLabel;

Edit4: TEdit;

Label8: TLabel;

Label9: TLabel;

Edit5: TEdit;

Label10: TLabel;

Edit6: TEdit;

Button1: TButton;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

Label14: TLabel;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Edit11: TEdit;

Edit12: TEdit;

Edit13: TEdit;

Edit14: TEdit;

Chart1: TChart;

Chart2: TChart;

Chart3: TChart;

Label19: TLabel;

Edit15: TEdit;

Series1: TArrowSeries;

Series2: TArrowSeries;

Series3: TArrowSeries;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const N=3;

type

artype=array[1..n] of real;

var

Form1: TForm1;

Xmin:artype;

Ymin:real;

Qn:artype;

implementation

{$R *.dfm}

function f(x:artype):real;

begin

result:=6*sqr(x[1]+x[2])+16*sqr(x[2]+3)+25*sqr(x[3]-4)+10;

end;

PROCEDURE SLPOISK(M,MF:INTEGER;H,HMIN:REAL;XMIN,XMAX,X0:ARTYPE;

var XO:ARTYPE; VAR YOPT:REAL);

LABEL 9,10;

VAR X,D,S : ARTYPE;

B,HR,Y0,Y,QSI : REAL; I,IM,L,K : INTEGER;

BEGIN B:=-1E20;

Xo:=x0;

FOR I:=1 TO N DO

BEGIN

D[I]:=XMAX[I]-XMIN[I]; IF D[I]>B THEN B:=D[I];

END;

FOR I:=1 TO N DO S[I]:=D[I]/B;

HR:=H; Y0:=F(XO); IM:=1;

RANDOMIZE;

9: K:=0;

10: L:=0;

FOR I:=1 TO N DO BEGIN

QSI:=2*RANDOM-1; X[I]:=XO[I]+HR*S[I]*QSI;

IF X[I]>XMAX[I] THEN

BEGIN X[I]:=XMAX[I]; L:=L+1 END

ELSE IF X[I]<XMIN[I] THEN

BEGIN X[I]:=XMIN[I]; L:=L+1 END

END;

IF L<N THEN BEGIN

Y:=F(X);

form1.Series1.AddArrow(Qn[1],Qn[2],Xo[1],Xo[2]);

form1.Series2.AddArrow(Qn[1],Qn[3],Xo[1],Xo[3]);

form1.Series3.AddArrow(Qn[2],Qn[3],Xo[2],Xo[3]);

Qn:=Xo;

IM:=IM+1; IF IM>MF THEN BEGIN

showmessage('ЧИСЛО ВЫЧИСЛЕНИЙ ФУНКЦИИ > '+floattostr(MF)+

' МИНИМУМ НЕ НАЙДЕН !!!');

YOPT:=Y0; EXIT END;

IF Y<Y0 THEN BEGIN Y0:=Y; XO:=X; GOTO 9; END

END;

K:=K+1; IF K<M THEN GOTO 10

ELSE BEGIN HR:=HR/2;

IF HR<HMIN THEN BEGIN YOPT:=Y0;

Form1.Edit15.Text:=inttostr(im);

EXIT END

ELSE GOTO 9;

END;

END;

procedure TForm1.Button1Click(Sender: TObject);

var m,mf:integer;

h,hmin:real;

x0:artype;

A:artype;

B:artype;

begin

Series1.Clear;

Series2.Clear;

Series3.Clear;

a[1]:=strtofloat(Edit1.Text);

a[2]:=strtofloat(Edit3.Text);

a[3]:=strtofloat(Edit5.Text);

b[1]:=strtofloat(Edit2.Text);

b[2]:=strtofloat(Edit4.Text);

b[3]:=strtofloat(Edit6.Text);

m:=strtoint(Edit7.Text);

mf:=strtoint(Edit8.Text);

h:=strtofloat(Edit9.Text);

hmin:=strtofloat(Edit10.Text);

x0[1]:=1;x0[2]:=0;x0[3]:=-1;

Qn:=X0;

SLPOISK(M,MF,H,HMIN,A,B,X0,Xmin,Ymin);

Edit11.Text:=floattostr(ymin);

Form1.Edit12.Text:=floattostr(Xmin[1]);

Form1.Edit13.Text:=floattostr(Xmin[2]);

Form1.Edit14.Text:=floattostr(Xmin[3]);

form1.Series1.AddArrow(Qn[1],Qn[2],Xmin[1],Xmin[2]);

form1.Series2.AddArrow(Qn[1],Qn[3],Xmin[1],Xmin[3]);

form1.Series3.AddArrow(Qn[2],Qn[3],Xmin[2],Xmin[3]);

end;

end.

Соседние файлы в предмете Исследование операций