home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 25 / nopv25.iso / 037A / NNCOMP.ZIP / TEST.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-03-20  |  3.2 KB  |  145 lines

  1. //
  2. //  Backpropagation Neural Learning Algorithm Demo
  3. //
  4. //  Cygron Ltd. 1997
  5. //
  6.  
  7. unit test;
  8.  
  9. interface
  10.  
  11. uses
  12.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  13.   Dialogs, StdCtrls, ExtCtrls, nncomp;
  14.  
  15. type
  16.   TForm1 = class(TForm)
  17.     ButtonReset: TButton;
  18.     ButtonLearn: TButton;
  19.     Panel1: TPanel;
  20.     PaintBoxGraph: TPaintBox;
  21.     LabelIter: TLabel;
  22.     LabelError: TLabel;
  23.     ButtonSave: TButton;
  24.     ButtonLoad: TButton;
  25.     N: TNeuralNetwork;
  26.     procedure ButtonResetClick(Sender: TObject);
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure PaintBoxGraphPaint(Sender: TObject);
  29.     procedure ButtonLearnClick(Sender: TObject);
  30.     procedure ButtonSaveClick(Sender: TObject);
  31.     procedure ButtonLoadClick(Sender: TObject);
  32.   private
  33.     { Private declarations }
  34.     lasterror: Double;
  35.     procedure ShowStat;
  36.   public
  37.     { Public declarations }
  38.   end;
  39.  
  40. var
  41.   Form1: TForm1;
  42.  
  43. implementation
  44.  
  45. {$R *.DFM}
  46.  
  47. procedure TForm1.FormCreate(Sender: TObject);
  48. begin
  49.   ButtonResetClick(nil);
  50. end;
  51.  
  52. procedure TForm1.ShowStat;
  53. begin
  54.   LabelError.Caption := Format('Error: %.2f%%',[(lasterror*100)]);
  55.   LabelIter.Caption := Format('Iteration: %d',[N.StepsNum]);
  56. end;
  57.  
  58. procedure TForm1.ButtonResetClick(Sender: TObject);
  59. begin
  60.   Randomize;
  61.   lasterror := 0.5;
  62.   N.Structure.Clear;
  63.   N.Structure.Add('2');
  64.   N.Structure.Add('2');
  65.   N.Structure.Add('1');
  66.   N.Initialize;
  67.   N.SetInputMin(1,0);
  68.   N.SetInputMax(1,1);
  69.   N.SetInputMin(2,0);
  70.   N.SetInputMax(2,1);
  71.   N.SetOutputMin(1,0);
  72.   N.SetOutputMax(1,1);
  73.   ShowStat;
  74.   PaintBoxGraph.Invalidate;
  75. end;
  76.  
  77. procedure TForm1.ButtonLearnClick(Sender: TObject);
  78. var
  79.    i: Integer;
  80.    x,y: Byte;
  81. begin
  82.    Randomize;
  83.    Screen.cursor := crHourglass;
  84.    for i := 1 to 1000 do begin
  85.       x := Random(2);
  86.       y := Random(2);
  87.       N.SetInput(1,x);
  88.       N.SetInput(2,y);
  89.       N.SetExpOutput(1,x xor y);
  90.       lasterror := N.Learn( 0.3, 0.8 );
  91.    end;
  92.    ShowStat;
  93.    Screen.cursor := crDefault;
  94.    PaintBoxGraph.Invalidate;
  95. end;
  96.  
  97. procedure TForm1.PaintBoxGraphPaint(Sender: TObject);
  98. var
  99.    i,j: Word;
  100.    r: TRect;
  101. begin
  102.    for i := 0 to 20 do begin
  103.       for j := 0 to 20 do begin
  104.          try
  105.             N.SetInput(1,i/20);
  106.             N.SetInput(2,j/20);
  107.             N.Calc;
  108.             r.left := i * 10;
  109.             r.right := (i+1) * 10;
  110.             r.top := j * 10;
  111.             r.bottom := (j+1) * 10;
  112.             PaintBoxGraph.Canvas.Brush.Color := RGB(Round(N.GetOutput(1)*205 + 25),0,0);
  113.             PaintBoxGraph.Canvas.FillRect(r);
  114.          except
  115.             on Exception do;
  116.          end;
  117.       end;
  118.    end;
  119. end;
  120.  
  121. procedure TForm1.ButtonSaveClick(Sender: TObject);
  122. begin
  123.    try
  124.      N.Save;
  125.    except
  126.      on Exception do Application.MessageBox('Cannot save network!','Backprop demo',MB_ICONEXCLAMATION);
  127.    end;
  128. end;
  129.  
  130. procedure TForm1.ButtonLoadClick(Sender: TObject);
  131. begin
  132.    try
  133.       N.Load;
  134.    except
  135.       on Exception do begin
  136.          Application.MessageBox('Cannot load network','Backprop demo',MB_ICONEXCLAMATION);
  137.          ButtonResetClick(self);
  138.        end;
  139.     end;
  140.     ShowStat;
  141.     PaintBoxGraph.Invalidate;
  142. end;
  143.  
  144. end.
  145.