⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 单层感知器简单实验
💻 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 + -