Advertisement
Hexadroid

Untitled

Aug 9th, 2020
1,193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.10 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. using std::cin;
  17. using std::cout;
  18. using std::endl;
  19.  
  20.     const double version = 0.001;
  21.     const double E = 2.71828182845904523536;
  22.     const int cyclesi = 200000;
  23.     const int training_inputs=220000;
  24.  
  25.     double training_set_inputs[training_inputs][3];
  26.     double training_set_outputs[training_inputs];
  27.     double SynapticWeight[4], new_situation[training_inputs][3];
  28.     double i,j,l, Output5, DOToutput5, output,cool, indicator;
  29.     double Boutput[training_inputs], BsigmoidPart[training_inputs], Bsigmoid_DerivativePart[training_inputs], BerrorPart[training_inputs], BadjustmentPart[training_inputs], BadjustSynapticWeight[4];
  30.     int m,q,qq, create;
  31.  
  32.  
  33.     //output for the randomly generated training inputs
  34. double outt(double (*array)[training_inputs][3], int b)
  35. {
  36.     double calc;
  37.  
  38.  
  39.     // The current test-formula is input1^2 - input2 - input3
  40.     calc =  (*array)[b][0]*(*array)[b][0]-(*array)[b][1]-(*array)[b][2];
  41.  
  42.         //avoid 0, major bug
  43.         if (calc==0) { calc=1;
  44.                     }
  45.  
  46.  
  47.     return calc;
  48. }
  49.  
  50.  
  51.  int _tmain(int argc, _TCHAR* argv[])
  52. {
  53.  
  54.     srand (time(NULL));
  55.  
  56.     //requested data
  57.     new_situation[0][0]=41;new_situation[0][1]=31;new_situation[0][2]=28;
  58.  
  59.         cool = outt(&new_situation,0);
  60.        printf("\n the output should be approx %.2f\n",cool);
  61.  
  62.  
  63.     new_situation[0][0]= 1/(1 + exp(-(1/new_situation[0][0])));
  64.     new_situation[0][1]= 1/(1 + exp(-(1/new_situation[0][1])));
  65.     new_situation[0][2]= 1/(1 + exp(-(1/new_situation[0][2])));
  66.  
  67.     for (create = 0; create < training_inputs; create++) {
  68.  
  69.                 training_set_inputs[create][0]= (rand() % 100) + 1;
  70.                 training_set_inputs[create][1]= (rand() % 100) + 1;
  71.                 training_set_inputs[create][2]= (rand() % 100) + 1;
  72.  
  73.                 training_set_outputs[create] = outt(&training_set_inputs, create);
  74.  
  75.                 //printf("\n%d t0=%.2f t1=%.2f t2=%.2f o=%.2f", create, training_set_inputs[create][0], training_set_inputs[create][1], training_set_inputs[create][2], training_set_outputs[create]);
  76.  
  77.             }
  78.  
  79.  
  80.  
  81.  
  82.     for(auto& rows: training_set_inputs)
  83. {
  84.     for(auto& elem: rows)
  85.     {
  86.         elem =  1/(1 + exp(-(1/elem)));
  87.  
  88.     }
  89. }
  90.  
  91.  
  92.     for (auto& number : training_set_outputs)
  93.     {
  94.         number =  1/(1 + exp(-(1/number)));
  95.  
  96.     }
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.    printf("\n");
  108.    for( m = 1; m <= 19; m++ ){
  109.  
  110.  
  111.  
  112.     SynapticWeight[1]=rand() % 2000/double(1000)-double(1);
  113.     SynapticWeight[2]=rand() % 2000/double(1000)-double(1);
  114.     SynapticWeight[3]=rand() % 2000/double(1000)-double(1);
  115.  
  116.     //avoid 0, bugfix
  117.     if (SynapticWeight[1]==0) {  SynapticWeight[1]=0.001; }
  118.     if (SynapticWeight[2]==0) {  SynapticWeight[2]=0.001; }
  119.     if (SynapticWeight[3]==0) {  SynapticWeight[3]=0.001; }
  120.  
  121.     printf("SynapticWeight[1]=%.2f , SynapticWeight[2]=%.2f, SynapticWeight[3]=%.2f\n\n", SynapticWeight[1], SynapticWeight[2], SynapticWeight[3]);
  122.  
  123.  
  124.  
  125.     for( i = 1; i <= cyclesi; i++ ){
  126.  
  127.  
  128.         for( q = 1; q <= training_inputs; q++) {
  129.  
  130.         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];
  131.  
  132.         BsigmoidPart[q] = 1 / (1 + exp(-(Boutput[q])));
  133.  
  134.         Bsigmoid_DerivativePart[q] = BsigmoidPart[q] * (1 - BsigmoidPart[q]);
  135.  
  136.         BerrorPart[q] = (training_set_outputs[q-1] - BsigmoidPart[q]);
  137.  
  138.         BadjustmentPart[q] =  BerrorPart[q] * Bsigmoid_DerivativePart[q];
  139.  
  140.         }
  141.  
  142.  
  143.         for( q = 1; q <= 3; q++) {
  144.  
  145.             BadjustSynapticWeight[q]=0;
  146.             for( qq = 1; qq <= training_inputs; qq++) {  BadjustSynapticWeight[q] += (training_set_inputs[qq-1][q-1]*BadjustmentPart[qq])/10000;}
  147.                                         // the /1000 is done, bc of the thing will bug out if too many value is added.  so a subtler addition.
  148.                                         // also, too many iterations (>1000000) will cause a strange type of bug, probably the same sort of issue
  149.  
  150.         SynapticWeight[q]=SynapticWeight[q]+BadjustSynapticWeight[q];
  151.  
  152.         }
  153.  
  154.         if ((floor(i/cyclesi*100))!=indicator)
  155.                 {
  156.                     printf("Attempt %d, %.0f %% done",m, indicator);
  157.  
  158.     Output5=new_situation[0][0]*SynapticWeight[1]+new_situation[0][1]*SynapticWeight[2]+new_situation[0][2]*SynapticWeight[3];
  159.  
  160.     DOToutput5 = 1 / (1 + exp(-(Output5)));
  161.  
  162.  
  163.     output = 1 / DOToutput5;
  164.     output = output - 1;
  165.     output = log10(E)/log10(output);
  166.     output = abs(output);
  167.  
  168.  
  169.     printf("\n Betweenvalues (%.0d training-inputs, %d iterations) has output %.2f\n",training_inputs, cyclesi, output);
  170.                 }
  171.  
  172.  
  173.  
  174.         indicator = floor(i/cyclesi*100);
  175.  
  176.  
  177.     }
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.     Output5=new_situation[0][0]*SynapticWeight[1]+new_situation[0][1]*SynapticWeight[2]+new_situation[0][2]*SynapticWeight[3];
  185.  
  186.     DOToutput5 = 1 / (1 + exp(-(Output5)));
  187.  
  188.  
  189.     output = 1 / DOToutput5;
  190.     output = output - 1;
  191.     output = log10(E)/log10(output);
  192.     output = abs(output);
  193.  
  194.  
  195.     printf("\n Final Values (%.0d inputs, %d iterations) has output %.2f\n",training_inputs, cyclesi, output);
  196.    } //m
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.     cout << "\n\nPress enter to exit..." << endl;
  208.     cin.get();
  209.  
  210.  
  211.  
  212.  
  213.  
  214.     return 0;
  215. }
  216.  
  217.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement