using System; using System.Windows.Forms; namespace aiNnFingers { public class CPN { public CPN() { } 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; //#define MIN(x,y) ((x)<(y) ? (x) : (y)) //#define MAX(x,y) ((x)>(y) ? (x) : (y)) //#define LO 0 const int LO = 0; //#define HI 1 const int HI = 1; //#define PI (2*asin(1)) //#define sqr(x) ((x)*(x)) public struct LAYER { /* A LAYER OF A NET: */ public int Units; /* - number of units in this layer */ public double[] Output; /* - output of ith unit */ public double[][] Weight; /* - connection weights to ith unit */ public bool[] Winner; /* - marker for winning instar */ } public struct NET { /* A NET: */ public LAYER InputLayer; /* - input layer */ public LAYER InstarLayer; /* - instar layer */ public LAYER OutstarLayer; /* - outstar layer */ public int Winners; /* - allowed number of winning instars */ public double Alpha; /* - hidden layer learning rate */ public double Beta; /* - output layer learning rate */ } /****************************************************************************** R A N D O M S D R A W N F R O M D I S T R I B U T I O N S ******************************************************************************/ Random r; const int RAND_MAX = Int32.MaxValue; void InitializeRandoms() { //srand(4711); r = new Random(4711); } int RandomEqualINT(int Low, int High) { //return rand() % (High-Low+1) + Low; int retVal = r.Next() % (High-Low+1) + Low; return retVal; } /****************************************************************************** A P P L I C A T I O N - S P E C I F I C C O D E ******************************************************************************/ //#define NUM_DATA 8 const int NUM_DATA = 8; //#define X 11 const int X = 11; //#define Y 11 const int Y = 11; //#define N (X * Y) const int N = X * Y; //#define C NUM_DATA const int C = NUM_DATA; //#define M 2 const int M = 2; char [][][] Pattern = new char [NUM_DATA][][] //NUM_DATA, Y, X { new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), "OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " OO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), "OOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " OOOOO".ToCharArray(), " OOOOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " OO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOO".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() } }; char [][][] Pattern_ = new char [NUM_DATA][][] { new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O O ".ToCharArray(), " O O ".ToCharArray(), " O O ".ToCharArray(), " O O ".ToCharArray(), " O O ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OO ".ToCharArray(), " OOO O".ToCharArray(), " OOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), " OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() }, new char[Y][] { " ".ToCharArray(), " ".ToCharArray(), " O ".ToCharArray(), " O ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOO ".ToCharArray(), " OOOOO ".ToCharArray(), "OOOOO ".ToCharArray(), " ".ToCharArray(), " ".ToCharArray() } }; double [][] Input = new double[NUM_DATA][]; //N double [][] Input_ = new double[NUM_DATA][]; //N double [][] Output = new double[NUM_DATA][]; //M //FILE* f; void NormalizeInput() { int n,i; double Length, Length_; for (n=0; n MaxOut) MaxOut = Net.InstarLayer.Output[Winner = i]; } Net.InstarLayer.Winner[Winner] = true; SumWinners += Net.InstarLayer.Output[Winner]; } for (i=0; i