Thread: C++ to Pascal
View Single Post
  #3 (permalink)  
Old 07-22-2008, 06:57 AM
HDi HDi is offline
Newbie
 
Join Date: Jul 2008
Posts: 2
Credits: 0
Rep Power: 0
HDi is on a distinguished road
Default Re: C++ to Pascal

Code:
1.
      #include <stdlib.h>
   2.
      #include <stdio.h>
   3.
      #include <math.h>
   4.
       
   5.
      typedef int           BOOL;
   6.
      typedef int           INT;
   7.
      typedef double        REAL;
   8.
       
   9.
       
  10.
       
  11.
       
  12.
      #define LO            0.1
  13.
      #define HI            0.9
  14.
      #define BIAS          1
  15.
       
  16.
       
  17.
      typedef struct {                     /* A LAYER OF A NET:                     */
  18.
              INT           Units;         /* - number of units in this layer       */
  19.
              REAL*         Output;        /* - output of ith unit                  */
  20.
              REAL*         Error;         /* - error term of ith unit              */
  21.
              REAL**        Weight;        /* - connection weights to ith unit      */
  22.
              REAL**        WeightSave;    /* - saved weights for stopped training  */
  23.
              REAL**        dWeight;       /* - last weight deltas for momentum     */
  24.
      } LAYER;
  25.
       
  26.
      typedef struct {                     /* A NET:                                */
  27.
              LAYER**       Layer;         /* - layers of this net                  */
  28.
              LAYER*        InputLayer;    /* - input layer                         */
  29.
              LAYER*        OutputLayer;   /* - output layer                        */
  30.
              REAL          Alpha;         /* - momentum factor                     */
  31.
              REAL          Eta;           /* - learning rate                       */
  32.
              REAL          Gain;          /* - gain of sigmoid function            */
  33.
              REAL          Error;         /* - total net error                     */
  34.
      } NET;
  35.
       
  36.
       
  37.
      /******************************************************************************
  38.
                     A P P L I C A T I O N - S P E C I F I C   C O D E
  39.
      ******************************************************************************/
  40.
       
  41.
      #define NUM_LAYERS    3
  42.
      #define N             30
  43.
      #define M             1
  44.
      INT                   Units[NUM_LAYERS] = {N, 10, M};
  45.
       
  46.
      #define FIRST_YEAR    1700
  47.
      #define NUM_YEARS     280
  48.
       
  49.
      #define TRAIN_LWB     (N)
  50.
      #define TRAIN_UPB     (179)
  51.
      #define TRAIN_YEARS   (TRAIN_UPB - TRAIN_LWB + 1)
  52.
      #define TEST_LWB      (180)
  53.
      #define TEST_UPB      (259)
  54.
      #define TEST_YEARS    (TEST_UPB - TEST_LWB + 1)
  55.
      #define EVAL_LWB      (260)
  56.
      #define EVAL_UPB      (NUM_YEARS - 1)
  57.
      #define EVAL_YEARS    (EVAL_UPB - EVAL_LWB + 1)
  58.
       
  59.
      REAL                  Sunspots_[NUM_YEARS];
  60.
      REAL                  Sunspots [NUM_YEARS] = {
  61.
       
  62.
                              0.0262,  0.0575,  0.0837,  0.1203,  0.1883,  0.3033,
  63.
                              0.1517,  0.1046,  0.0523,  0.0418,  0.0157,  0.0000,
  64.
                              0.0000,  0.0105,  0.0575,  0.1412,  0.2458,  0.3295,
  65.
                              0.3138,  0.2040,  0.1464,  0.1360,  0.1151,  0.0575,
  66.
                              0.1098,  0.2092,  0.4079,  0.6381,  0.5387,  0.3818,
  67.
                              0.2458,  0.1831,  0.0575,  0.0262,  0.0837,  0.1778,
  68.
                              0.3661,  0.4236,  0.5805,  0.5282,  0.3818,  0.2092,
  69.
                              0.1046,  0.0837,  0.0262,  0.0575,  0.1151,  0.2092,
  70.
                              0.3138,  0.4231,  0.4362,  0.2495,  0.2500,  0.1606,
  71.
                              0.0638,  0.0502,  0.0534,  0.1700,  0.2489,  0.2824,
  72.
                              0.3290,  0.4493,  0.3201,  0.2359,  0.1904,  0.1093,
  73.
                              0.0596,  0.1977,  0.3651,  0.5549,  0.5272,  0.4268,
  74.
                              0.3478,  0.1820,  0.1600,  0.0366,  0.1036,  0.4838,
  75.
                              0.8075,  0.6585,  0.4435,  0.3562,  0.2014,  0.1192,
  76.
                              0.0534,  0.1260,  0.4336,  0.6904,  0.6846,  0.6177,
  77.
                              0.4702,  0.3483,  0.3138,  0.2453,  0.2144,  0.1114,
  78.
                              0.0837,  0.0335,  0.0214,  0.0356,  0.0758,  0.1778,
  79.
                              0.2354,  0.2254,  0.2484,  0.2207,  0.1470,  0.0528,
  80.
                              0.0424,  0.0131,  0.0000,  0.0073,  0.0262,  0.0638,
  81.
                              0.0727,  0.1851,  0.2395,  0.2150,  0.1574,  0.1250,
  82.
                              0.0816,  0.0345,  0.0209,  0.0094,  0.0445,  0.0868,
  83.
                              0.1898,  0.2594,  0.3358,  0.3504,  0.3708,  0.2500,
  84.
                              0.1438,  0.0445,  0.0690,  0.2976,  0.6354,  0.7233,
  85.
                              0.5397,  0.4482,  0.3379,  0.1919,  0.1266,  0.0560,
  86.
                              0.0785,  0.2097,  0.3216,  0.5152,  0.6522,  0.5036,
  87.
                              0.3483,  0.3373,  0.2829,  0.2040,  0.1077,  0.0350,
  88.
                              0.0225,  0.1187,  0.2866,  0.4906,  0.5010,  0.4038,
  89.
                              0.3091,  0.2301,  0.2458,  0.1595,  0.0853,  0.0382,
  90.
                              0.1966,  0.3870,  0.7270,  0.5816,  0.5314,  0.3462,
  91.
                              0.2338,  0.0889,  0.0591,  0.0649,  0.0178,  0.0314,
  92.
                              0.1689,  0.2840,  0.3122,  0.3332,  0.3321,  0.2730,
  93.
                              0.1328,  0.0685,  0.0356,  0.0330,  0.0371,  0.1862,
  94.
                              0.3818,  0.4451,  0.4079,  0.3347,  0.2186,  0.1370,
  95.
                              0.1396,  0.0633,  0.0497,  0.0141,  0.0262,  0.1276,
  96.
                              0.2197,  0.3321,  0.2814,  0.3243,  0.2537,  0.2296,
  97.
                              0.0973,  0.0298,  0.0188,  0.0073,  0.0502,  0.2479,
  98.
                              0.2986,  0.5434,  0.4215,  0.3326,  0.1966,  0.1365,
  99.
                              0.0743,  0.0303,  0.0873,  0.2317,  0.3342,  0.3609,
 100.
                              0.4069,  0.3394,  0.1867,  0.1109,  0.0581,  0.0298,
 101.
                              0.0455,  0.1888,  0.4168,  0.5983,  0.5732,  0.4644,
 102.
                              0.3546,  0.2484,  0.1600,  0.0853,  0.0502,  0.1736,
 103.
                              0.4843,  0.7929,  0.7128,  0.7045,  0.4388,  0.3630,
 104.
                              0.1647,  0.0727,  0.0230,  0.1987,  0.7411,  0.9947,
 105.
                              0.9665,  0.8316,  0.5873,  0.2819,  0.1961,  0.1459,
 106.
                              0.0534,  0.0790,  0.2458,  0.4906,  0.5539,  0.5518,
 107.
                              0.5465,  0.3483,  0.3603,  0.1987,  0.1804,  0.0811,
 108.
                              0.0659,  0.1428,  0.4838,  0.8127
 109.
       
 110.
                            };
 111.
       
 112.
      REAL                  Mean;
 113.
      REAL                  TrainError;
 114.
      REAL                  TrainErrorPredictingMean;
 115.
      REAL                  TestError;
 116.
      REAL                  TestErrorPredictingMean;
 117.
       
 118.
      FILE*                 f;
 119.
       
 120.
       
 121.
      void GenerateNetwork(NET* Net)
 122.
      {
 123.
        INT l,i;
 124.
       
 125.
        Net->Layer = (LAYER**) calloc(NUM_LAYERS, sizeof(LAYER*));
 126.
       
 127.
        for (l=0; l<NUM_LAYERS; l++) {
 128.
          Net->Layer[l] = (LAYER*) malloc(sizeof(LAYER));
 129.
       
 130.
          Net->Layer[l]->Units      = Units[l];
 131.
          Net->Layer[l]->Output     = (REAL*)  calloc(Units[l]+1, sizeof(REAL));
 132.
          Net->Layer[l]->Error      = (REAL*)  calloc(Units[l]+1, sizeof(REAL));
 133.
          Net->Layer[l]->Weight     = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
 134.
          Net->Layer[l]->WeightSave = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
 135.
          Net->Layer[l]->dWeight    = (REAL**) calloc(Units[l]+1, sizeof(REAL*));
 136.
          Net->Layer[l]->Output[0]  = BIAS;
 137.
       
 138.
          if (l != 0) {
 139.
            for (i=1; i<=Units[l]; i++) {
 140.
              Net->Layer[l]->Weight[i]     = (REAL*) calloc(Units[l-1]+1,
 141.
      sizeof(REAL));
 142.
              Net->Layer[l]->WeightSave[i] = (REAL*) calloc(Units[l-1]+1,
 143.
      sizeof(REAL));
 144.
              Net->Layer[l]->dWeight[i]    = (REAL*) calloc(Units[l-1]+1,
 145.
      sizeof(REAL));
 146.
            }
 147.
          }
 148.
        }
 149.
        Net->InputLayer  = Net->Layer[0];
 150.
        Net->OutputLayer = Net->Layer[NUM_LAYERS - 1];
 151.
        Net->Alpha       = 0.9;
 152.
        Net->Eta         = 0.25;
 153.
        Net->Gain        = 1;
 154.
      }
 155.
       
 156.
      void RandomWeights(NET* Net)
 157.
      {
 158.
        INT l,i,j;
 159.
       
 160.
        for (l=1; l<NUM_LAYERS; l++) {
 161.
          for (i=1; i<=Net->Layer[l]->Units; i++) {
 162.
            for (j=0; j<=Net->Layer[l-1]->Units; j++) {
 163.
              Net->Layer[l]->Weight[i][j] = RandomEqualREAL(-0.5, 0.5);
 164.
            }
 165.
          }
 166.
        }
 167.
      }
 168.
       
 169.
       
 170.
      int main()
 171.
      {
 172.
        NET  Net;
 173.
        BOOL Stop;
 174.
        REAL MinTestError;
 175.
       
 176.
        GenerateNetwork(&Net);
 177.
        RandomWeights(&Net);
 178.
       
 179.
      }
 180.

Last edited by WingedPanther; 07-23-2008 at 11:37 AM.. Reason: add code tags
Reply With Quote