您的位置:首页 > 理论基础 > 计算机网络

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

2016-03-12 20:38 369 查看
转自http://blog.csdn.net/cnyali/article/details/50864942



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

[cpp] view
plain copy

 





// 感知器判断数字奇偶性   

#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;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息