#include <iostream>
#include "bpNet.h"
using namespace std;
#define SETSIZE 1000
#define TRAINTIMES 200
int main()
{
//BP *pBp = new BP(32,15,4,0.25,0.9);
BP *pBp = new BP(32,15,4);
cout << "Training..." << endl;
srand((unsigned int)time(NULL));
int list[1000];
for(int i = 0;i < SETSIZE; i++)
{
int r = rand();
if(r > (RAND_MAX/2))
r = -r;
list[i] = r;
}
for(int i = 0; i < TRAINTIMES;i++)
{
for(int j = 0; j < SETSIZE;j++)
{
double real[4] = {0};
int r = rand();
int value = list[j];
if (value >= 0)
{
if ((value & 1) == 1)
real[0] = 1;
else
real[1] = 1;
}
else if ((value & 1) == 1)
{
real[2] = 1;
}
else
{
real[3] = 1;
}
double binary[32];
int index = 31;
do{
binary[index--] = (value & 1);
value >>= 1;
}while(index >= 0);
pBp->train(binary,real);
}
}
cout << "Net trained." <<endl;
cout<< "Please input a number." <<endl;
while(true)
{
int value;
cin >> value;
int rawVal = value;
double binary[32];
int index = 31;
do{
binary[index--] = (value & 1);
value >>= 1;
}while(index >= 0);
double result[4] = {0};
pBp->calc(binary,result);
double max = INT_MIN;
int idx = -1;
for(int i = 0; i < 4;i++)
{
if(result[i] > max)
{
max =result[i];
idx = i;
}
//cout.precision(64);
//cout << result [i] <<" ";
}
switch (idx) {
case 0:
cout << rawVal << "是一个正奇数" << endl;
break;
case 1:
cout << rawVal << "是一个正偶数" << endl;
break;
case 2:
cout << rawVal << "是一个负奇数" << endl;
break;
case 3:
cout << rawVal << "是一个负偶数" << endl;
break;
}
}
return 0;
}