#include "../src/NeuronNetwork/Learning/QLearning.h" #include #include class X: public Shin::NeuronNetwork::Problem { public: X(const X& a) :Problem(a) {} X(const std::vector &a):Problem() {data=a;} }; float atof(char *s) { int f, m, sign, d=1; f = m = 0; sign = (s[0] == '-') ? -1 : 1; if (s[0] == '-' || s[0] == '+') s++; for (; *s != '.' && *s; s++) { f = (*s-'0') + f*10; } if (*s == '.') for (++s; *s; s++) { m = (*s-'0') + m*10; d *= 10; } return sign*(f + (float)m/d); } float AA=10; float getQuality(X& p, int action) { if((p[0]==0&& p[1]==0) ||(p[0]==1&& p[1]==1)) //should be 0 { return action==1?-AA:AA; }else // should be 1 { return action==0?-AA:AA; } } int main(int argc, char **argv) { srand(time(NULL)); Shin::NeuronNetwork::Learning::QLearning l(2,45,2); if(argc==4 && argv[3][0]=='o') { std::cerr << "USING Optical Backpropagation\n"; l.opticalBackPropagation(); } if(argc>=3) { std::cerr << "Setting learning coefficients to:" << atof(argv[1]) << "," << atof(argv[2]) << "\n"; l.setLearningCoeficient(atof(argv[1]),atof(argv[2])); } std::vector > p1x; std::vector states; states.push_back(X(std::vector({1,0}))); states.push_back(X(std::vector({0,0}))); states.push_back(X(std::vector({1,1}))); states.push_back(X(std::vector({0,1}))); unsigned long step=0; double quality=0; while(step< 600000 && quality < (3.9*AA)) { quality=0; if(step%10000==0) std::cerr << "STEP " << step << "\n"; for(unsigned i=0;i