人工智能——神经网络算法初体验

来源:互联网 发布:java职业培训机构 编辑:程序博客网 时间:2024/06/11 04:30

这个程序其实就是让人工智能学习并认识怎么判断一个0~9的数是奇数还是偶数,最简单的人工智能程序

// 感知器判断数字奇偶性 #include<stdlib.h>#include<stdio.h>#include<time.h>int M[10];//权值 int X[10]={1,2,3,4,5,6,7,8,9,10};//输入向量 int Y[10]={1,0,1,0,1,0,1,0,1,0};//理想输出向量,0,奇数,1,偶数 int O[10];//保存输出向量 int ST=52;//阈值 void initM(){//初始化权值srand((unsigned int)time(0));for(int x=0;x<10;++x)M[x]=rand()%100;} int active(int m,int x){// 跃迁型激活函数  int o=m*x;if(o>ST)return 1;else return 0;}void calcY(){//计算输出向量 for(int x=0;x<10;++x)O[x]=active(M[x],X[x]);}//根据实际输出向量和理想输出向量调整权向量,//返回实际输出和理想输出不匹配的数目int adjustM(){int err=0;for(int x=0;x<10;++x)if(O[x]!=Y[x]){err++;if(0==O[x])M[x]+=X[x];elseM[x]-=X[x];} return err;}void printM(){//打印权向量 for(int x=0;x<10;++x)printf("M[%i]=%i\n",x,M[x]);}void test(int input){printf("[%i][%i]",M[input],X[input]);if(active(M[input],X[input]))printf("%d 是偶数\n",input);elseprintf("%d 是奇数\n",input);}int main(){int n=0;initM();while(1){// 一直训练直到能够100%正确为止  n++;calcY();int err=adjustM();if(0>=err)break;//能够 100 %正确地回答问题了,结束训练printf("错误数%d\n",err);}printM();printf("阈值%d 训练次数%d\n",ST,n);while(1){int a=0;scanf("%i",&a);if(0>a || 9<a)break;test(a);}return 0;}


7 0