转自http://blog.csdn.net/cnyali/article/details/50864942
这个程序其实就是让人工智能学习并认识怎么判断一个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];
- else
- M[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);
- else
- printf("%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;
- }