Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <stdio.h>
- #include <math.h>
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- long double training_set_inputs[4][3];
- long double training_set_outputs[4];
- long double SynapticWeight[4], new_situation[3];
- long double i,j,l, Output5, DOToutput5;
- long double Boutput[5], BsigmoidPart[5], Bsigmoid_DerivativePart[5], BerrorPart[5], BadjustmentPart[5], BadjustSynapticWeight[4];
- int q,m;
- long double output;
- int _tmain(int argc, _TCHAR* argv[])
- { srand (time(NULL));
- training_set_inputs[0][0]=3000;training_set_inputs[0][1]=2000;training_set_inputs[0][2]=1000;
- training_set_inputs[1][0]=7500;training_set_inputs[1][1]=8000;training_set_inputs[1][2]=8000;
- training_set_inputs[2][0]=5500;training_set_inputs[2][1]=6700;training_set_inputs[2][2]=4300;
- training_set_inputs[3][0]=3300;training_set_inputs[3][1]=4215;training_set_inputs[3][2]=7178;
- training_set_outputs[0]=6000;
- training_set_outputs[1]=23500;
- training_set_outputs[2]=16500;
- training_set_outputs[3]=14693;
- training_set_inputs[0][0]= 1/training_set_inputs[0][0];
- training_set_inputs[0][1]= 1/training_set_inputs[0][1];
- training_set_inputs[0][2]= 1/training_set_inputs[0][2];
- training_set_inputs[1][0]= 1/training_set_inputs[1][0];
- training_set_inputs[1][1]= 1/training_set_inputs[1][1];
- training_set_inputs[1][2]= 1/training_set_inputs[1][2];
- training_set_inputs[2][0]= 1/training_set_inputs[2][0];
- training_set_inputs[2][1]= 1/training_set_inputs[2][1];
- training_set_inputs[2][2]= 1/training_set_inputs[2][2];
- training_set_inputs[3][0]= 1/training_set_inputs[3][0];
- training_set_inputs[3][1]= 1/training_set_inputs[3][1];
- training_set_inputs[3][2]= 1/training_set_inputs[3][2];
- training_set_outputs[0]= 1/training_set_outputs[0];
- training_set_outputs[1]= 1/training_set_outputs[1];
- training_set_outputs[2]= 1/training_set_outputs[2];
- training_set_outputs[3]= 1/training_set_outputs[3];
- for (m = 1; m < 21; m++) {
- SynapticWeight[1]=rand() % 2000/2000L;
- SynapticWeight[2]=rand() % 2000/2000L;
- SynapticWeight[3]=rand() % 2000/2000L;
- for( i = 1; i <= 1500; i++ ){
- for( q = 1; q <= 4; q++) {
- 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];
- //fastest function yet, powl(120+,x), reaches 7152/9200 in 1500 cycles with 4 training inputs
- BsigmoidPart[q] = powl(139,Boutput[q]);
- Bsigmoid_DerivativePart[q] = powl(139,BsigmoidPart[q])*log10l(139);
- BerrorPart[q] = powl(139,training_set_outputs[q-1]) - BsigmoidPart[q];
- BadjustmentPart[q] = BerrorPart[q] * Bsigmoid_DerivativePart[q];
- }
- for( q = 1; q <= 3; q++) {
- 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;
- SynapticWeight[q]=SynapticWeight[q]+BadjustSynapticWeight[q];
- }
- if ((int(i) % 100000)==1) printf(".");
- //printf("\nTEST %.14f %.14f %.14f ADJUSTMENTS %.14f %.14f %.14f", SynapticWeight[1], SynapticWeight[2], SynapticWeight[3], BadjustSynapticWeight[1], BadjustSynapticWeight[2], BadjustSynapticWeight[3]);
- }
- new_situation[0]=4000;new_situation[1]=4200;new_situation[2]=1000;
- new_situation[0]= 1/new_situation[0];
- new_situation[1]= 1/new_situation[1];
- new_situation[2]= 1/new_situation[2];
- Output5=new_situation[0]*SynapticWeight[1]+new_situation[1]*SynapticWeight[2]+new_situation[2]*SynapticWeight[3];
- output = 1 / Output5;
- printf("\n Attempt nr %d gave as output %.2Lf [4 training inputs](the real answer should be 9200)\n", m, output);
- } //m
- cout << "Press enter to exit..." << endl;
- cin.get();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement