?? 1.cpp
字號:
/* 訓練集 0 0 0 0 0 0
0 0 0 0 1 0
0 0 0 1 0 0
1 0 0 0 0 0
1 0 0 0 1 0
1 0 0 1 0 0
0 0 1 1 1 1
0 1 0 0 0 0
0 1 0 0 1 0
0 1 0 1 0 0
0 1 0 1 1 1
0 1 1 0 0 0
0 1 1 0 1 1
0 1 1 1 0 1
0 1 1 1 1 1
1 1 1 1 0 1
最后一列為期望輸出值
五人表決系統,超過半數者通過 */
#include <stdlib.h>
#include <stdio.h>
double x1[]={0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1};//輸入向量
double x2[]={0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1};
double x3[]={0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,0,0,1};
double x4[]={0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,0,1,0,1,0};
double x5[]={0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0};
int d[]={0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1,0,0,0,1,1,1};//期待輸出
double w1=0.5,w2=0.7,w3=0.6,w4=0.5,w5=0.8;//初始化聯結權值
double o=0.6,s=0.4;//初始化閾值,增益因子
void main()
{
int i=0,out;
while (i!=22)//網絡學習過程,即調整閾值、學習因子和權值的過程
{
i=0;
for (int j=0;j<22;j++)
{
if (w1*x1[j]+w2*x2[j]+w3*x3[j]+w4*x4[j]+w5*x5[j]-o>=0)//得到輸出
out=1;
else out=0;
if (out==d[j]) i++;//輸出符合期望輸出的示例數
else//輸出與期望輸出不一致,調整閾值、學習因子、聯結權值
{
o=o+s*(d[j]-out)*(-1);
w1=w1+s*(d[j]-out)*x1[j];
w2=w2+s*(d[j]-out)*x2[j];
w3=w3+s*(d[j]-out)*x3[j];
w4=w4+s*(d[j]-out)*x4[j];
w5=w5+s*(d[j]-out)*x5[j];
}
}
}
//以下為使用網絡的過程
if (i==22)//若網絡訓練成功則進行示例驗證(即網絡學習)
{
printf ("五人表決系統\n");
int x1,x2,x3,x4,x5;
while (1)
{
printf ("請輸入一號表決情況(0否決,1通過):");
scanf ("%d",&x1);
if (x1!=1 && x1!=0)
{
printf ("非法輸入!");
break;
}
printf ("請輸入二號表決情況(0否決,1通過):");
scanf ("%d",&x2);
if (x2!=1 && x2!=0)
{
printf ("非法輸入!");
break;
}
printf ("請輸入三號表決情況(0否決,1通過):");
scanf ("%d",&x3);
if (x3!=1 && x3!=0)
{
printf ("非法輸入!");
break;
}
printf ("請輸入四號表決情況(0否決,1通過):");
scanf ("%d",&x4);
if (x4!=1 && x4!=0)
{
printf ("非法輸入!");
break;
}
printf ("請輸入五號表決情況(0否決,1通過):");
scanf ("%d",&x5);
if (x5!=1 && x5!=0)
{
printf ("非法輸入!");
break;
}
if (w1*x1+w2*x2+w3*x3+w4*x4+w5*x5-o>=0)//大于等于0表示表決通過,小于0失敗
printf ("表決通過!\n");
else
printf ("表決未通過!\n");
printf ("------------------------------------------------------\n\n");
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -