using System; using System.Windows.Forms; namespace aiNnFingers { public class ART1 { public ART1() { } public RichTextBox richTextBox; //#include //#include //#include //typedef int BOOL; //typedef char CHAR; //typedef int INT; //typedef double REAL; //#define FALSE 0 //#define TRUE 1 //#define NOT ! //#define AND && //#define OR || //#define MIN_REAL -HUGE_VAL const double MIN_REAL = double.MinValue; //#define MAX_REAL +HUGE_VAL const double MAX_REAL = double.MaxValue; public double BINARY(bool x) { if(x == false) return 0; else return 1; } public struct LAYER { /* A LAYER OF A NET: */ public int Units; /* - number of units in this layer */ public bool[] Output; /* - output of ith unit */ public double[][] Weight; /* - connection weights to ith unit */ public bool[] Inhibited; /* - inhibition status of ith F2 unit */ } public struct NET { /* A NET: */ public LAYER F1; /* - F1 layer */ public LAYER F2; /* - F2 layer */ public int Winner; /* - last winner in F2 layer */ public double A1; /* - A parameter for F1 layer */ public double B1; /* - B parameter for F1 layer */ public double C1; /* - C parameter for F1 layer */ public double D1; /* - D parameter for F1 layer */ public double L; /* - L parameter for net */ public double Rho; /* - vigilance parameter */ } /****************************************************************************** A P P L I C A T I O N - S P E C I F I C C O D E ******************************************************************************/ //#define N 5 const int N = 5; //#define M 10 const int M = 10; //#define NO_WINNER M const int NO_WINNER = M; //#define NUM_DATA 30 const int NUM_DATA = 30; char [][] Pattern = new char[NUM_DATA][] //N { " O ".ToCharArray(), " O O".ToCharArray(), " O".ToCharArray(), " O O".ToCharArray(), " O".ToCharArray(), " O O".ToCharArray(), " O".ToCharArray(), " OO O".ToCharArray(), " OO ".ToCharArray(), " OO O".ToCharArray(), " OO ".ToCharArray(), "OOO ".ToCharArray(), "OO ".ToCharArray(), "O ".ToCharArray(), "OO ".ToCharArray(), "OOO ".ToCharArray(), "OOOO ".ToCharArray(), "OOOOO".ToCharArray(), "O ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O".ToCharArray(), " O O".ToCharArray(), " OO O".ToCharArray(), " OO ".ToCharArray(), "OOO ".ToCharArray(), "OO ".ToCharArray(), "OOOO ".ToCharArray(), "OOOOO".ToCharArray() }; bool [][] Input = new bool[NUM_DATA][]; //N bool [][] Output = new bool[NUM_DATA][]; //M //FILE* f; void InitializeApplication(ref NET Net) { int n,i,j; for (n=0; n 0); } } void GetOutput(ref NET Net, bool[] Output) { int i; for (i=0; i MaxOut) { MaxOut = Sum; Net.Winner = i; } } Net.F2.Output[i] = false; } if (Net.Winner != NO_WINNER) Net.F2.Output[Net.Winner] = true; } void PropagateToF1(ref NET Net, bool[] Input) { int i; double Sum, Activation; for (i=0; i 0); } } /****************************************************************************** A D J U S T I N G W E I G H T S ******************************************************************************/ double Magnitude(ref NET Net, bool[] Input) { int i; double Magnitude; Magnitude = 0; for (i=0; i