轉自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;
}