Advertisement
Hexadroid

Untitled

Sep 9th, 2020
1,041
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.98 KB | None | 0 0
  1. #include <algorithm>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <iostream>
  5.  
  6. using std::cin;
  7. using std::cout;
  8. using std::endl;
  9.  
  10.     long double training_set_inputs[4][3];
  11.     long double training_set_outputs[4];
  12.     long double SynapticWeight[4], new_situation[3];
  13.     long double i,j,l, Output5, DOToutput5;
  14.     long double Boutput[5], BsigmoidPart[5], Bsigmoid_DerivativePart[5], BerrorPart[5], BadjustmentPart[5], BadjustSynapticWeight[4];
  15.     int q,m;
  16.     long double output;
  17.  
  18.  
  19.  int _tmain(int argc, _TCHAR* argv[])
  20. {   srand (time(NULL));
  21.  
  22.     training_set_inputs[0][0]=3000;training_set_inputs[0][1]=2000;training_set_inputs[0][2]=1000;
  23.     training_set_inputs[1][0]=7500;training_set_inputs[1][1]=8000;training_set_inputs[1][2]=8000;
  24.     training_set_inputs[2][0]=5500;training_set_inputs[2][1]=6700;training_set_inputs[2][2]=4300;
  25.     training_set_inputs[3][0]=3300;training_set_inputs[3][1]=4215;training_set_inputs[3][2]=7178;
  26.  
  27.     training_set_outputs[0]=6000;
  28.     training_set_outputs[1]=23500;
  29.     training_set_outputs[2]=16500;
  30.     training_set_outputs[3]=14693;
  31.  
  32.  
  33.     training_set_inputs[0][0]= 1/training_set_inputs[0][0];
  34.     training_set_inputs[0][1]= 1/training_set_inputs[0][1];
  35.     training_set_inputs[0][2]= 1/training_set_inputs[0][2];
  36.  
  37.     training_set_inputs[1][0]= 1/training_set_inputs[1][0];
  38.     training_set_inputs[1][1]= 1/training_set_inputs[1][1];
  39.     training_set_inputs[1][2]= 1/training_set_inputs[1][2];
  40.  
  41.     training_set_inputs[2][0]= 1/training_set_inputs[2][0];
  42.     training_set_inputs[2][1]= 1/training_set_inputs[2][1];
  43.     training_set_inputs[2][2]= 1/training_set_inputs[2][2];
  44.  
  45.     training_set_inputs[3][0]= 1/training_set_inputs[3][0];
  46.     training_set_inputs[3][1]= 1/training_set_inputs[3][1];
  47.     training_set_inputs[3][2]= 1/training_set_inputs[3][2];
  48.  
  49.     training_set_outputs[0]= 1/training_set_outputs[0];
  50.     training_set_outputs[1]= 1/training_set_outputs[1];
  51.     training_set_outputs[2]= 1/training_set_outputs[2];
  52.     training_set_outputs[3]= 1/training_set_outputs[3];
  53.  
  54.  
  55.  
  56.     for (m = 1; m < 21; m++) {
  57.  
  58.  
  59.     SynapticWeight[1]=rand() % 2000/2000L;
  60.     SynapticWeight[2]=rand() % 2000/2000L;
  61.     SynapticWeight[3]=rand() % 2000/2000L;
  62.  
  63.  
  64.     for( i = 1; i <= 1500; i++ ){
  65.  
  66.         for( q = 1; q <= 4; q++) {
  67.  
  68.         Boutput[q] = training_set_inputs[q-1][0]*SynapticWeight[1]+training_set_inputs[q-1][1]*SynapticWeight[2]+training_set_inputs[q-1][2]*SynapticWeight[3];
  69.  
  70.                             //fastest function yet, powl(120+,x), reaches 7152/9200 in 1500 cycles with 4 training inputs
  71.         BsigmoidPart[q] = powl(139,Boutput[q]);
  72.  
  73.         Bsigmoid_DerivativePart[q] = powl(139,BsigmoidPart[q])*log10l(139);
  74.  
  75.         BerrorPart[q] =  powl(139,training_set_outputs[q-1]) - BsigmoidPart[q];
  76.  
  77.         BadjustmentPart[q] =  BerrorPart[q] * Bsigmoid_DerivativePart[q];
  78.  
  79.         }
  80.  
  81.  
  82.         for( q = 1; q <= 3; q++) {
  83.  
  84.         BadjustSynapticWeight[q] = (powl(139,training_set_inputs[0][q-1])*BadjustmentPart[1]+powl(139,training_set_inputs[1][q-1])*BadjustmentPart[2]+powl(139,training_set_inputs[2][q-1])*BadjustmentPart[3]+powl(139,training_set_inputs[3][q-1])*BadjustmentPart[4])/4;
  85.  
  86.         SynapticWeight[q]=SynapticWeight[q]+BadjustSynapticWeight[q];
  87.  
  88.         }
  89.  
  90.         if ((int(i) % 100000)==1) printf(".");
  91.        //printf("\nTEST %.14f %.14f %.14f ADJUSTMENTS %.14f %.14f %.14f", SynapticWeight[1], SynapticWeight[2], SynapticWeight[3], BadjustSynapticWeight[1], BadjustSynapticWeight[2], BadjustSynapticWeight[3]);
  92.     }
  93.  
  94.  
  95.     new_situation[0]=4000;new_situation[1]=4200;new_situation[2]=1000;
  96.  
  97.  
  98.     new_situation[0]= 1/new_situation[0];
  99.     new_situation[1]= 1/new_situation[1];
  100.     new_situation[2]= 1/new_situation[2];
  101.  
  102.     Output5=new_situation[0]*SynapticWeight[1]+new_situation[1]*SynapticWeight[2]+new_situation[2]*SynapticWeight[3];
  103.  
  104.     output = 1 / Output5;
  105.  
  106.     printf("\n Attempt nr %d gave as output %.2Lf       [4 training inputs](the real answer should be 9200)\n", m, output);
  107.     } //m
  108.  
  109.  
  110.  
  111.     cout << "Press enter to exit..." << endl;
  112.     cin.get();
  113.  
  114.  
  115.  
  116.  
  117.  
  118.     return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement