Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мироненко Т.Є. мгІТ-14_нормоконтроль.docx
Скачиваний:
24
Добавлен:
04.02.2016
Размер:
808.95 Кб
Скачать

Додаток Основні процедури та функції пз

function f(x1,x2,x3,x4:real):real;\\ обчислює значення функції

begin

f:=k_1*x1+k_2*x2+k_3*x3+k_4*x4+k_12*x1*x2+k_13*x1*x3+k_14*x1*x4+k_23*x2*x3+

k_24*x2*x4+k_34*x3*x4+k_123*x1*x2*x3+k_124*x1*x2*x4+k_134*x1*x3*x4+

k_234*x2*x3*x4+r*(1/(x1-o11)+1/(o12-x1)+1/(x2-o21)+1/(o22-x2)+1/(x3-o31)+

1/(o32-x3)+1/(x4-o41)+1/(o42-x4)+(1-x1-x2-x3-x4)*(1-x1-x2-x3-x4));

end;

function df_dx1(x1,x2,x3,x4:real):real; \\обчислює значення частинної похідної по х1

begin

df_dx1:=k_1+k_12*x2+k_13*x3+k_14*x4+k_123*x2*x3+k_124*x2*x4+k_134*x3*x4+

r*(-1/((x1-o11)*(x1-o11))+1/((o12-x1)*(o12-x1)))+r*(-2)*(1-x1-x2-x3-x4);

end;

function df_dx2(x1,x2,x3,x4:real):real;\\ обчислює значення частинної похідної по х2

begin

df_dx2:=k_2+k_12*x1+k_23*x3+k_24*x4+k_123*x1*x3+k_124*x1*x4+k_234*x3*x4+

r*(-1/((x2-o21)*(x2-o21))+1/((o22-x2)*(o22-x2)))+

r*(-2)*(1-x1-x2-x3-x4);

end;

function df_dx3(x1,x2,x3,x4:real):real;\\ обчислює значення частинної похідної по х3

begin

df_dx3:=k_3+k_13*x1+k_23*x2+k_34*x4+k_123*x1*x2+k_134*x1*x4+k_234*x2*x4+

r*(-1/((x3-o31)*(x3-o31))+1/((o32-x3)*(o32-x3)))+

r*(-2)*(1-x1-x2-x3-x4);

end;

function df_dx4(x1,x2,x3,x4:real):real;\\ обчислює значення частинної похідної по х4

begin

df_dx4:=k_4+k_14*x1+k_24*x2+k_34*x3+k_124*x1*x2+k_134*x1*x3+k_234*x2*x3+

r*(-1/((x4-o41)*(x4-o41))+1/((o42-x4)*(o42-x4)))+

r*(-2)*(1-x1-x2-x3-x4);

end;

procedure zvedennia_zadachi; \\ зводить задачу багатокритеріальної оптимізації до однокритеріальної за допомогою методу лінійної згортки

var y:TextFile;

begin

AssignFile(y,'y.txt');

Reset(y);

readln(y,k1_1,k1_2,k1_3,k1_4,k1_12,k1_13,k1_14,k1_23,k1_24,k1_34,k1_123,k1_124,k1_134,k1_234);

readln(y,k2_1,k2_2,k2_3,k2_4,k2_12,k2_13,k2_14,k2_23,k2_24,k2_34,k2_123,k2_124,k2_134,k2_234); readln(y,k3_1,k3_2,k3_3,k3_4,k3_12,k3_13,k3_14,k3_23,k3_24,k3_34,k3_123,k3_124,k3_134,k3_234);

CloseFile(y);

k_1:=vk1*k1_1-vk2*k2_1-vk3*k3_1;

k_2:=vk1*k1_2-vk2*k2_2-vk3*k3_2;

k_3:=vk1*k1_3-vk2*k2_3-vk3*k3_3;

k_4:=vk1*k1_4-vk2*k2_4-vk3*k3_4;

k_12:=vk1*k1_12-vk2*k2_12-vk3*k3_12;

k_13:=vk1*k1_13-vk2*k2_13-vk3*k3_13;

k_14:=vk1*k1_14-vk2*k2_14-vk3*k3_14;

k_23:=vk1*k1_23-vk2*k2_23-vk3*k3_23;

k_24:=vk1*k1_24-vk2*k2_24-vk3*k3_24;

k_34:=vk1*k1_34-vk2*k2_34-vk3*k3_34;

k_123:=vk1*k1_123-vk2*k2_123-vk3*k3_123;

k_124:=vk1*k1_124-vk2*k2_124-vk3*k3_124;

k_134:=vk1*k1_134-vk2*k2_134-vk3*k3_134;

k_234:=vk1*k1_234-vk2*k2_234-vk3*k3_234;

end;

procedure TForm1.Button1Click(Sender: TObject); \\ процедура знаходить оптимальні значення змінних задачі градієнтним методом із дробленням кроку

var x1n1,x2n1,x3n1,x4n1,fn,fn1,df,eps,S2,df1,df2,df3,df4,h:real; x:TextFile;

begin

AssignFile(x,'x.txt');

Reset(x);

readln(x,o11,o12);

readln(x,o21,o22);

readln(x,o31,o32);

readln(x,o41,o42);

CloseFile(x);

r:=1.2;

vk1:=StrToFloat(Form4.edt1.text);

vk2:=StrToFloat(Form4.edt2.text);

vk3:=StrToFloat(Form4.edt3.text);

k_1:=StrToFloat(Form4.lbl7.Caption);

k_2:=StrToFloat(Form4.lbl8.Caption);

k_3:=StrToFloat(Form4.lbl9.Caption);

k_4:=StrToFloat(Form4.lbl10.Caption);

k_12:=StrToFloat(Form4.lbl11.Caption);

k_13:=StrToFloat(Form4.lbl12.Caption);

k_14:=StrToFloat(Form4.lbl13.Caption);

k_23:=StrToFloat(Form4.lbl14.Caption);

k_24:=StrToFloat(Form4.lbl15.Caption);

k_34:=StrToFloat(Form4.lbl16.Caption);

k_123:=StrToFloat(Form4.lbl17.Caption);

k_124:=StrToFloat(Form4.lbl18.Caption);

k_134:=StrToFloat(Form4.lbl19.Caption);

k_234:=StrToFloat(Form4.lbl20.Caption);

x1n:=StrToFloat(edt1.text);

x2n:=StrToFloat(edt2.text);

x3n:=StrToFloat(edt3.text);

x4n:=StrToFloat(edt4.text);

fn:=f(x1n,x2n,x3n,x4n);

eps:=0.01;

h:=StrToFloat(edt5.text);

df1:=df_dx1(x1n,x2n,x3n,x4n);

df2:=df_dx2(x1n,x2n,x3n,x4n);

df3:=df_dx3(x1n,x2n,x3n,x4n);

df4:=df_dx4(x1n,x2n,x3n,x4n);

df:=sqrt(df1*df1+df2*df2+df3*df3+df4*df4);

while df>eps do

begin

x1n1:=x1n-h*df1;

x2n1:=x2n-h*df2;

x3n1:=x3n-h*df3;

x4n1:=x4n-h*df4;

fn1:=f(x1n1,x2n1,x3n1,x4n1);

if fn1<fn then

begin

x1n:=x1n1;

x2n:=x2n1;

x3n:=x3n1;

x4n:=x4n1;

fn:=fn1;

df1:=df_dx1(x1n,x2n,x3n,x4n);

df2:=df_dx2(x1n,x2n,x3n,x4n);

df3:=df_dx3(x1n,x2n,x3n,x4n);

df4:=df_dx4(x1n,x2n,x3n,x4n);

df:=sqrt(df1*df1+df2*df2+df3*df3+df4*df4);

end

else h:=h/2;

S2:=x1n+x2n+x3n+x4n;

end;

Edt6.text:=FloatToStr(x1n);

Edt7.text:=FloatToStr(x2n);

Edt8.text:=FloatToStr(x3n);

Edt9.text:=FloatToStr(x4n);

end;