Nadesłany przez Tomasz Lubiński, 27 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
siec neuronowa/siec_neuronowa.pas:
//www.algorytm.org //siec neuronowa (c)2002 by Tomasz Lubiński unit siec_neuronowa; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; type TForm1 = class(TForm) Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; Edit14: TEdit; Edit15: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; Label25: TLabel; Label26: TLabel; Label27: TLabel; Label28: TLabel; Label29: TLabel; Label30: TLabel; Label31: TLabel; Label32: TLabel; GroupBox1: TGroupBox; GroupBox2: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; RadioButton5: TRadioButton; Button1: TButton; procedure FormPaint(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; z : Array [1..2] of Real; x,y : Array [1..3] of Real; w1 : Array [1..3] of Array [1..2] of Real; w2 : Array [1..2] of Array [1..3] of Real; implementation {$R *.DFM} procedure TForm1.FormPaint(Sender: TObject); begin sleep(100); Canvas.MoveTo(110,50); Canvas.LineTo(285,100); Canvas.MoveTo(110,60); Canvas.LineTo(285,248); Canvas.MoveTo(110,170); Canvas.LineTo(285,110); Canvas.MoveTo(110,180); Canvas.LineTo(285,258); Canvas.MoveTo(110,300); Canvas.LineTo(285,120); Canvas.MoveTo(110,310); Canvas.LineTo(285,268); Canvas.MoveTo(300,100); Canvas.LineTo(500,50); Canvas.MoveTo(310,120); Canvas.LineTo(500,178); Canvas.MoveTo(300,120); Canvas.LineTo(500,306); Canvas.MoveTo(300,244); Canvas.LineTo(500,60); Canvas.MoveTo(310,244); Canvas.LineTo(500,188); Canvas.MoveTo(300,264); Canvas.LineTo(500,316); end; procedure TForm1.Button1Click(Sender: TObject); var i:Integer; tmp: Array [1..3] of Real; begin x[1]:=StrToFloat(Edit1.Text); x[2]:=StrToFloat(Edit2.Text); x[3]:=StrToFloat(Edit3.Text); w1[1,1]:=StrToFloat(Edit4.Text); w1[1,2]:=StrToFloat(Edit5.Text); w1[2,1]:=StrToFloat(Edit6.Text); w1[2,2]:=StrToFloat(Edit7.Text); w1[3,1]:=StrToFloat(Edit8.Text); w1[3,2]:=StrToFloat(Edit9.Text); tmp[1]:=0; for i:=1 to 3 do tmp[1]:=tmp[1]+x[i]*w1[i,1]; tmp[2]:=0; for i:=1 to 3 do tmp[2]:=tmp[2]+x[i]*w1[i,2]; if RadioButton1.checked then begin z[1]:=0.8*tmp[1]+1; z[2]:=0.8*tmp[2]+1; end; if RadioButton2.checked then begin if tmp[1]>0 then z[1]:=1 else if tmp[1]<0 then z[1]:=-1 else z[1]:=0; if tmp[2]>0 then z[2]:=1 else if tmp[2]<0 then z[2]:=-1 else z[2]:=0; end; if RadioButton3.checked then begin z[1]:=1/(1+exp(-tmp[1])); z[2]:=1/(1+exp(-tmp[2])); end; if RadioButton4.checked then begin z[1]:=Tanh(tmp[1]); z[2]:=Tanh(tmp[2]); end; if RadioButton5.checked then begin z[1]:=exp(-tmp[1]*tmp[1]); z[2]:=exp(-tmp[2]*tmp[2]); end; Label1.Caption:='z1 = ' + FloatToStr(z[1]); Label2.Caption:='z2 = ' + FloatToStr(z[2]); w2[1,1]:=StrToFloat(Edit15.Text); w2[2,1]:=StrToFloat(Edit14.Text); w2[1,2]:=StrToFloat(Edit13.Text); w2[2,2]:=StrToFloat(Edit12.Text); w2[1,3]:=StrToFloat(Edit11.Text); w2[2,3]:=StrToFloat(Edit10.Text); tmp[1]:=0; for i:=1 to 2 do tmp[1]:=tmp[1]+z[i]*w2[i,1]; tmp[2]:=0; for i:=1 to 2 do tmp[2]:=tmp[2]+z[i]*w2[i,2]; tmp[3]:=0; for i:=1 to 2 do tmp[3]:=tmp[3]+z[i]*w2[i,3]; if RadioButton1.checked then begin y[1]:=0.8*tmp[1]+1; y[2]:=0.8*tmp[2]+1; y[3]:=0.8*tmp[3]+1; end; if RadioButton2.checked then begin if tmp[1]>0 then y[1]:=1 else if tmp[1]<0 then y[1]:=-1 else y[1]:=0; if tmp[2]>0 then y[2]:=1 else if tmp[2]<0 then y[2]:=-1 else y[2]:=0; if tmp[3]>0 then y[3]:=1 else if tmp[3]<0 then y[3]:=-1 else y[3]:=0; end; if RadioButton3.checked then begin y[1]:=1/(1+exp(-tmp[1])); y[2]:=1/(1+exp(-tmp[2])); y[3]:=1/(1+exp(-tmp[3])); end; if RadioButton4.checked then begin y[1]:=Tanh(tmp[1]); y[2]:=Tanh(tmp[2]); y[3]:=Tanh(tmp[3]); end; if RadioButton5.checked then begin y[1]:=exp(-tmp[1]*tmp[1]); y[2]:=exp(-tmp[2]*tmp[2]); y[3]:=exp(-tmp[3]*tmp[3]); end; Label3.Caption:='y1 = ' + FloatToStr(y[1]); Label4.Caption:='y2 = ' + FloatToStr(y[2]); Label5.Caption:='y3 = ' + FloatToStr(y[3]); end; end.