Advertisement
Hexadroid

reverse

Aug 7th, 2020
1,506
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.25 KB | None | 0 0
  1. #pragma hdrstop
  2. #pragma argsused
  3.  
  4. #ifdef _WIN32
  5. #include <tchar.h>
  6. #else
  7.   typedef char _TCHAR;
  8.   #define _tmain main
  9. #endif
  10.  
  11. #include <algorithm>
  12. #include <stdio.h>
  13. #include <math.h>
  14. #include <iostream>
  15.  
  16. const double E = 2.71828182845904523536;
  17.  
  18. using std::cin;
  19. using std::cout;
  20. using std::endl;
  21.  
  22.     double training_set_inputs[4][3];
  23.     double training_set_outputs[4];
  24.     double SynapticWeight[4], new_situation[3];
  25.     double i,j,l, Output5, DOToutput5;
  26.     double Boutput[5], BsigmoidPart[5], Bsigmoid_DerivativePart[5], BerrorPart[5], BadjustmentPart[5], BadjustSynapticWeight[4];
  27.     int q,m;
  28.     double output;
  29.  
  30.  
  31.  int _tmain(int argc, _TCHAR* argv[])
  32. {   srand (time(NULL));
  33.  
  34.     training_set_inputs[0][0]=3000;training_set_inputs[0][1]=2000;training_set_inputs[0][2]=1000;
  35.     training_set_inputs[1][0]=7500;training_set_inputs[1][1]=8000;training_set_inputs[1][2]=8000;
  36.     training_set_inputs[2][0]=5500;training_set_inputs[2][1]=6700;training_set_inputs[2][2]=4300;
  37.     training_set_inputs[3][0]=3300;training_set_inputs[3][1]=4215;training_set_inputs[3][2]=7178;
  38.  
  39.     training_set_outputs[0]=6000;
  40.     training_set_outputs[1]=23500;
  41.     training_set_outputs[2]=16500;
  42.     training_set_outputs[3]=14693;
  43.  
  44.  
  45.     //yes needs a function to convert, will do later.
  46.     training_set_inputs[0][0]=  1/(1 + exp(-(1/training_set_inputs[0][0])));
  47.     training_set_inputs[0][1]=  1/(1 + exp(-(1/training_set_inputs[0][1])));
  48.     training_set_inputs[0][2]=  1/(1 + exp(-(1/training_set_inputs[0][2])));
  49.  
  50.     training_set_inputs[1][0]= 1/(1 + exp(-(1/training_set_inputs[1][0])));
  51.     training_set_inputs[1][1]= 1/(1 + exp(-(1/training_set_inputs[1][1])));
  52.     training_set_inputs[1][2]= 1/(1 + exp(-(1/training_set_inputs[1][2])));
  53.  
  54.     training_set_inputs[2][0]= 1/(1 + exp(-(1/training_set_inputs[2][0])));
  55.     training_set_inputs[2][1]= 1/(1 + exp(-(1/training_set_inputs[2][1])));
  56.     training_set_inputs[2][2]= 1/(1 + exp(-(1/training_set_inputs[2][2])));
  57.  
  58.     training_set_inputs[3][0]=  1/(1 + exp(-(1/training_set_inputs[3][0])));
  59.     training_set_inputs[3][1]=  1/(1 + exp(-(1/training_set_inputs[3][1])));
  60.     training_set_inputs[3][2]=  1/(1 + exp(-(1/training_set_inputs[3][2])));
  61.  
  62.     training_set_outputs[0]= 1/(1 + exp(-(1/training_set_outputs[0])));
  63.     training_set_outputs[1]= 1/(1 + exp(-(1/training_set_outputs[1])));
  64.     training_set_outputs[2]= 1/(1 + exp(-(1/training_set_outputs[2])));
  65.     training_set_outputs[3]= 1/(1 + exp(-(1/training_set_outputs[3])));
  66.  
  67.     //printf("\n waarden  %.14f %.14f %.14f",  training_set_inputs[0][0], training_set_inputs[0][1], training_set_inputs[0][2]);
  68.  
  69.  
  70.  
  71.  
  72.     for (m = 1; m < 21; m++) {
  73.  
  74.  
  75.     SynapticWeight[1]=rand() % 2000/double(1000)-double(1);
  76.     SynapticWeight[2]=rand() % 2000/double(1000)-double(1);
  77.     SynapticWeight[3]=rand() % 2000/double(1000)-double(1);
  78.  
  79.     //printf("\n waarden  %.14f %.14f %.14f",  SynapticWeight[1], SynapticWeight[2], SynapticWeight[3]);
  80.  
  81.  
  82.     for( i = 1; i <= 200000000; i++ ){
  83.  
  84.         for( q = 1; q <= 4; q++) {
  85.  
  86.         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];
  87.  
  88.         BsigmoidPart[q] = 1 / (1 + exp(-(Boutput[q])));
  89.  
  90.         Bsigmoid_DerivativePart[q] = BsigmoidPart[q] * (1 - BsigmoidPart[q]);
  91.  
  92.         BerrorPart[q] = (training_set_outputs[q-1] - BsigmoidPart[q]);
  93.  
  94.         BadjustmentPart[q] =  BerrorPart[q] * Bsigmoid_DerivativePart[q];
  95.  
  96.         }
  97.  
  98.  
  99.         for( q = 1; q <= 3; q++) {
  100.  
  101.         BadjustSynapticWeight[q] = training_set_inputs[0][q-1]*BadjustmentPart[1]+training_set_inputs[1][q-1]*BadjustmentPart[2]+training_set_inputs[2][q-1]*BadjustmentPart[3]+training_set_inputs[3][q-1]*BadjustmentPart[4];
  102.  
  103.         SynapticWeight[q]=SynapticWeight[q]+BadjustSynapticWeight[q];
  104.  
  105.         }
  106.  
  107.  
  108.        //printf("\nTEST %.14f %.14f %.14f ADJUSTMENTS %.14f %.14f %.14f", SynapticWeight[1], SynapticWeight[2], SynapticWeight[3], BadjustSynapticWeight[1], BadjustSynapticWeight[2], BadjustSynapticWeight[3]);
  109.     }
  110.  
  111.     //new_situation[0]=28;new_situation[1]=40;new_situation[2]=44; //outcome should be 68, it reaches 84,5
  112.     new_situation[0]=4000;new_situation[1]=4200;new_situation[2]=1000; //outcome should be 9200, it reaches 8000
  113.  
  114.  
  115.  
  116.     //yes needs a function to convert, will do later.
  117.     new_situation[0]= 1/(1 + exp(-(1/new_situation[0])));
  118.     new_situation[1]= 1/(1 + exp(-(1/new_situation[1])));
  119.     new_situation[2]= 1/(1 + exp(-(1/new_situation[2])));
  120.  
  121.     Output5=new_situation[0]*SynapticWeight[1]+new_situation[1]*SynapticWeight[2]+new_situation[2]*SynapticWeight[3];
  122.  
  123.     DOToutput5 = 1 / (1 + exp(-(Output5)));
  124.  
  125.     //yes needs a function to convert back, will do later.
  126.     output = 1 / DOToutput5;
  127.     output = output - 1;
  128.     output = log10(E)/log10(output);
  129.     output = -output;
  130.  
  131.     printf("\n Attempt nr %d gave as output %.2f       (the real answer should be 9200)\n", m, output);
  132.     } //m
  133.  
  134.  
  135.  
  136.     cout << "Press enter to exit..." << endl;
  137.     cin.get();
  138.  
  139.  
  140.  
  141.  
  142.  
  143.     return 0;
  144. }
  145.  
  146. // python and c++
  147. // ref:   medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1
  148. // A.I. / Neural Network crude example
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. //  0,502957 = 1/(1 + exp(-x))
  156.  
  157. //  1/x
  158. //  1,9882 = (1 + exp(-x))
  159. //  -1
  160. //  0.9882 = exp(-x)
  161.  
  162. //  -x = log(e)/log0.9882
  163.  
  164. //  -82.24
  165.  
  166. //  x=84.24
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement