home *** CD-ROM | disk | FTP | other *** search
/ Mega CD-ROM 1 / megacd_rom_1.zip / megacd_rom_1 / NEURAL_N / NNETDRAW.ZIP / NNETDRAW.PRO < prev    next >
Text File  |  1991-03-13  |  7KB  |  253 lines

  1. /* Copyright 1991 by 
  2.    by Bruce Colletti
  3.    (Richmond VA)
  4.    GEnie      b.colletti
  5.    CompuServe 71121,1452
  6.  
  7.    This code presents a one-page course on Neural Networks by drawing a
  8.    neural net and then commenting on aspects of it.  The code was written
  9.    in PDCPROLOG 3.21, a product of:
  10.    
  11.         The PROLOG Development Center
  12.         568 14th Street NW
  13.         Atlanta GA  30318
  14.         
  15.         404-873-1366
  16.         BBS 404-872-5358 2400N81
  17.         
  18.    This code is entirely the work of its author.  The executable and source
  19.    codes may be freely distributed PROVIDED THAT no charge is made except
  20.    to cover costs such as distribution, envelopes, etc.
  21.    
  22.    Executable/source codes and README file must be distributed together.
  23. */
  24.  
  25. bgidriver "_EGAVGA_driver_far"
  26. bgidriver "_HERC_driver_far"
  27. bgifont "_triplex_font_far"
  28.  
  29. constants
  30.   bgipath = "c:\\pdcprolo\\bgi"
  31.   ylayer1 = 180
  32.   ylayer2 = 125
  33.   ylayer3 = 70
  34.   font1   = default_FONT
  35.       
  36. include "c:\\pdcprolog\\include\\bgi.pre"
  37.  
  38. domains
  39.   x,y,layer,node,color,textsize,font = integer
  40.   length = integer
  41.   stringlist = string*
  42.     
  43. database
  44.   a(x,y)
  45.   neuron(layer,node,x,y)
  46.  
  47. predicates
  48.   do(node)                    % set color to draw synapses in
  49.   ok(integer,integer,integer) % determine if graphics mode is acceptable
  50.   harrow(x,y,length,color)    % draw horizontal arrow
  51.   draw_synapse(layer,layer)   % draw a synapse
  52.   uparrow(x,y,length,color)   % draw vertical arrow
  53.   xwrite(x,y,color,textsize,font,stringlist) % output text
  54.   xwrite(stringlist)          % output several lines of text
  55.     
  56. clauses % locate network neurons
  57.   
  58.   neuron(1,1,170,ylayer1).
  59.   neuron(1,2,330,ylayer1).
  60.   neuron(1,3,490,ylayer1).
  61.  
  62.   neuron(2,1,116,ylayer2).   
  63.   neuron(2,2,222,ylayer2).
  64.   neuron(2,3,328,ylayer2).
  65.   neuron(2,4,434,ylayer2).
  66.   neuron(2,5,540,ylayer2).
  67.   
  68.   neuron(3,1,275,ylayer3).
  69.   neuron(3,2,381,ylayer3).
  70.     
  71. clauses
  72.   do(Node) if
  73.     0 = Node mod 2,!,
  74.     setcolor(yellow);
  75.     
  76.     setcolor(lightgray).
  77.     
  78.   ok(ega,egahi,egahi)                if !.
  79.   ok(ega64,ega64hi,ega64hi)          if !.
  80.   ok(egamono,egamonohi,egamonohi)    if !.
  81.   ok(hercmono,hercmonohi,hercmonohi) if !.
  82.   ok(vga,Mode,vgamed)                if Mode > 0,!.
  83.   ok(_,_,_) if
  84.     write("\nSorry, but the supported modes are:"),
  85.     write("\n\n   - hercules monochrome"),
  86.     write("\n   - EGA/VGA modes of 640x350+ dimensions."),
  87.     exit.
  88.     
  89.   harrow(X,Y,Length,Color) if
  90.     setcolor(Color),
  91.     setfillstyle(solid_fill,Color),
  92.     X1 = X + Length,
  93.     line(X,Y,X1,Y),
  94.     Y1 = Y-3,
  95.     Y2 = Y+3,
  96.     X2 = X1+3,
  97.     fillpoly([X1,Y1,X2,Y,X1,Y2]).
  98.  
  99.   uparrow(X,Y,Length,Color) if
  100.     setcolor(Color),
  101.     setfillstyle(solid_fill,Color),
  102.     Y1 = Y - Length,
  103.     line(X,Y,X,Y1),
  104.     X1 = X-3,
  105.     X2 = X+3,
  106.     Y2 = Y1 - 3,
  107.     fillpoly([X1,Y1,X,Y2,X2,Y1]).
  108.     
  109.   draw_synapse(TLayer,BLayer) if
  110.     neuron(TLayer,TNode,XT,YT),
  111.     do(TNode),
  112.     neuron(BLayer,BNode,XB,YB),
  113.     line(XB,YB,XT,YT),
  114.     fail;
  115.     
  116.     1=1.
  117.  
  118.   xwrite(X,Y,Color,TextSize,Font,List) if
  119.     assert(a(X,Y)),
  120.     setcolor(Color),
  121.     settextstyle(Font,horiz_DIR,TextSize),
  122.     xwrite(List).
  123.  
  124.   xwrite([]) if retractall(a(_,_)),!.
  125.   
  126.   xwrite([H|T]) if
  127.     retract(a(X,Y)),
  128.     Y1 = Y + 10,
  129.     asserta(a(X,Y1)),!,
  130.     outtextxy(X,Y,H),
  131.     xwrite(T).
  132.         
  133. % This is where the program begins.  The clauses above can be viewed as the
  134. % subroutines.  If this were a C program, the goal section would be MAIN().
  135.  
  136. goal
  137.   detectgraph(Driver,Mode),
  138.   ok(Driver,Mode,Mode1),
  139.   initgraph(Driver,Mode1,_,_,bgipath),
  140.   fail;
  141.   
  142.   settextjustify(left_TEXT,center_TEXT),
  143.   rectangle(165,3,467,35),
  144.   xwrite(175,15,white,4,triplex_FONT,["A Neural Network"]),
  145.   xwrite(1,ylayer1,white,1,font1,["Input Layer"]),
  146.   xwrite(1,ylayer2,white,1,font1,["Hidden Layer"]),
  147.   xwrite(1,ylayer3,white,1,font1,["Output Layer"]),
  148.   fail;
  149.  
  150. % draw connections
  151.   setcolor(yellow),
  152.   draw_synapse(2,1),
  153.   draw_synapse(3,2),
  154.   fail;
  155.  
  156. % draw neurons  
  157.   neuron(_,_,X,Y),
  158.   fillellipse(X,Y,10,8),
  159.   fail;
  160.   
  161. % write comments
  162.   harrow(400,ylayer3,10,white),
  163.   xwrite(420,ylayer3,white,1,font1,["a neuron"]),
  164.  
  165.   Y1 = (ylayer2+ylayer3) / 2.3,
  166.   harrow(440,Y1,10,yellow),
  167.   xwrite(465,Y1,yellow,1,font1,["a synaptic connection"]),
  168.       
  169.   fail;
  170.  
  171. % data flow is "bottom up" arrow
  172.  
  173.   setfillstyle(solid_fill,lightblue),
  174.   Y1 = ylayer2-10,
  175.   setcolor(lightblue),
  176.   fillpoly([580,ylayer1,580,ylayer2,560,ylayer2,590,Y1,620,ylayer2,
  177.             600,ylayer2,600,ylayer1]),
  178.   Y2 = ylayer1 + 10,
  179.   xwrite(540,Y2,white,1,font1,["Data flow is","  bottom up"]),
  180.   fail;
  181.   
  182. % training set
  183.   
  184.   setcolor(lightblue),
  185.   Y = ylayer1 + 27,
  186.   uparrow(170,Y,10,lightblue),
  187.   uparrow(330,Y,10,lightblue),
  188.   uparrow(490,Y,10,lightblue),
  189.  
  190.   Y1 = ylayer1 + 35,
  191.   xwrite(135,Y1,lightblue,1,font1,["Training Set enters here one observation at a time"]),  
  192.   fail;
  193.   
  194. % output layer
  195.  
  196.   Y = ylayer3-15,
  197.   uparrow(275,Y,5,lightblue),
  198.   uparrow(381,Y,5,lightblue),
  199.   xwrite(392,Y,lightblue,1,font1,["computed vs. correct outputs"]),
  200.   fail;
  201.  
  202. % author ID
  203.  
  204.   xwrite(440,290,lightcyan,1,font1,
  205.                  ["Copyright 1991 (v1.1)","by Bruce Colletti",
  206.                   "(Richmond VA)",
  207.                   "GEnie      b.colletti",
  208.                   "CompuServe 71121,1452",
  209.                   "Free Distribution"]),
  210.   fail;
  211.   
  212. % a neuron "up close"
  213.  
  214.   xwrite(50,240,white,2,triplex_font,
  215.        ["A hidden layer neuron up-close"]),
  216.  
  217.   setcolor(lightgray),
  218.   rectangle(1,225,428,347),
  219.   uparrow(55,275,15,lightblue),
  220.   xwrite(60,260,lightblue,1,font1,[" output goes to each Output Layer neuron"]),
  221.   H = 50,
  222.   Dx = H*sin(45.0*pi/180),
  223.   X1 = 55-Dx,
  224.   X2 = 55+Dx,
  225.   Y = 295 + H*cos(45.0*pi/180),
  226.   setcolor(yellow),
  227.   line(55,295,X1,Y),
  228.   line(55,295,X2,Y),
  229.   line(55,295,55,Y),
  230.   xwrite(5,340,lightcyan,1,font1,["Inputs from bottom layer neurons"]),
  231.   fail;
  232.   
  233.   setfillstyle(solid_fill,white),
  234.   fillellipse(55,295,17,14),  
  235.   xwrite(50,297,black,2,font1,["F"]),
  236.   fail;
  237.   
  238.   xwrite(80,280,white,1,font1,["- multiply each input by connection weight"]),
  239.   xwrite(80,290,white,1,font1,["- add all these products"]),
  240.   xwrite(80,300,white,1,font1,["- pass sum to function F (the \"sigmoid\")"]),
  241.   xwrite(80,310,lightblue,1,font1,["- send output of F to each neuron in",
  242.                                    "  the top layer"]),
  243.   fail;
  244.   
  245.   xwrite(440,230,white,1,font1,
  246.          ["Each connection has a",
  247.           "a numeric \"weight\"."," ",
  248.           "Weights constantly change",
  249.           "during training."]),
  250.   readchar(_),
  251.   closegraph().
  252.   
  253.