Well i wanted to attempt to model a basic perceptron in C++.
I know this isn't right or nothing, ha, but i gave it a go anyways.
I get all sorts of segfaults throughout, but here's the program:
Code:#include <iostream> #include <windows.h> using namespace std; struct ending { int input; }; struct perceptron { ending *ends[8]; int value; }; int ops[7]; //Functions void returnEnds(ending *e[8], int a[8]); bool learn(perceptron *p, int ops[7], int result); int createResult(int a[8]); int operations(int input1, int input2, int op); void displayEq(perceptron *p, int ops[]); int main() { //Perceptron (single) AI Self-Learning Program perceptron *p; p = new perceptron; ending *ends[8]; int a[8]; int dResult; dResult = createResult(a); //initialize ops[0] = -1; //being used as a flag for(int i=0; i<8; i++) { ends[i] = new ending; a[i] = (i*2); ends[i]->input = a[i]; } //Display cout<<"Target Number: "<<dResult<<endl; cout<<"The program will now try and figure out how to achieve this number and constantly" <<"compare it's own feedback, comparing it to the result, and hopefully learn the process."<<endl<<endl; //Start AI while(learn(p, ops, dResult) == false) { returnEnds(ends, a); for(int i=0; i<8; i++) { p->ends[i] = ends[i]; } } } void returnEnds(ending *e[8], int a[8]) { for(int i=0; i<8; i++) { e[i]->input = a[i]; } } int createResult(int a[8]) { return(a[0] + a[1] + a[2] - a[3] + a[4] - a[5] + a[6] - a[7]); } int operations(int input1, int input2, int op) { int ret=0; if(op == 0) { //addition ret = input1 + input2; }else if(op == 1) { //subtraction ret = input1 - input2; } else{ ret = 0; } return ret; } bool learn(perceptron *p, int ops[7], int result) { if(ops[0] == -1) { if(result <= 0) { for(int i=0; i<7; i++) { ops[i] = 1; } }else if(result >0) { for(int i=0; i<7; i++) { ops[i] = 0; } } } int value=0; for(int i=0; i<7; i++) { value += (operations(p->ends[i]->input, p->ends[i+1]->input, ops[i])); } cout<<"Target: "<<result<<endl; cout<<"Value: "<<value<<endl; cout<<"Approach: "; displayEq(p, ops); cout<<endl; Sleep(150); if(value > result) { //Decrease }else if(value < result) { //Increase }else if(value == result) { //Did what it is supposed to, return true return true; } return false; } void displayEq(perceptron *p, int ops[]) { int j; for(int i=0; i<8; i++) { if(i >= 7) { j = 6; }else{ j = i; } cout<<p->ends[i]->input<<" "; if(ops[j] == 0) { //addition cout<<"+"; }else if(ops[j] == 1) { //subtraction cout<<"-"; }else{ cout<<" "; } cout<<" "; } }
Danke!



LinkBack URL
About LinkBacks



