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

📄 神经元模型.c

📁 C语言源码
💻 C
字号:
/*神经元模型*/
#include < math.h>
#include < stdio.h>
#include < time.h>
#include < stdlib.h>
#include < conio.h>
#define AND1 .571388
#define AND2 .560999
#define OR1 1.149045
#define OR2 1.131896
#define SITA 1
#define NIU .1
#define OMIGA 50

float w[2]; 
float terg[4][3]; 

main()
{int m_result = 1, s; 
 float w1[2]; 
 while(m_result != 5){
	m_result = menu(m_result); 
	date(); 
	switch(m_result){
		case(1):             /*    学习*/
		case(3):randomize();  /*重新学习*/
			w[0] = random(80)+10; w[0] = w[0]/100.0; 
			w[1] = random(80)+10; w[1] = w[1]/100.0; 
			study(); 
			break; 
		case(2):practic(w);   /*实践新模型*/
			break; 
		case(4):printf(" what do you want to see, OR or AND?(1/2) " ); 
			scanf(" %d" , & s); 
			if(s==1){w1[0] = OR1;  w1[1] = OR2;  }
			   else if(s==2){w1[0] = AND1; w1[1] = AND2; }
				else break; 
			practic(w1); 
			break;        /*演示已有模型*/
		default:{}
		}       /*End Switch*/
	}               /*End While */
 clrscr(); 
 printf(" Good Bye!" ); 
}
menu(int r)
{int r1; 
 clrscr(); 
 printf(" \n\n\n" ); 
 printf(" \t\t1\tStudy a Model\n" );     /*    学习    */
 printf(" \t\t2\tPratice the model\n" ); /*重新学习    */
 printf(" \t\t3\tDefail the MOdel\n" );  /*实践新模型  */
 printf(" \t\t4\tPrepared Model\n" );    /*演示已有模型*/
 printf(" \t\t5\tEnd\n" );               /*结束        */
 printf(" \n\n\t\tWhat do you want to choice?(%d)" , r); 
 r1 = getche(); 
 if (r1!=13) r = r1-48; 
 return(r); 
}

date()    /*显示模型*/
{int i, j; 
 clrscr(); 
 for(i = 0; i < 4; i++) 
	 for(j = 0; j< 3; j++){ 
		gotoxy(20+j*4, i+5);  
		printf("%.0f", terg[i][j]);  
		} 
printf("\n\n\tThe quarities:%f, %f \n", w[0], w[1]);  
} 

study() /*学习子函数*/ 
{float x, y, width;  
	int wrong = 1, i, total = 0; 
	input();  /*andinput(); */ /*orinput();  */ 
	while(wrong){ 
		wrong = 0;  
		for(i = 0; i< 4; i++){
			x = OMIGA*(w[0]*terg[i][0]+w[1]*terg[i][1]-SITA); 
			y = 1.0/(1.0+exp(-x)); 
			width = terg[i][2]-y;  /*误差 = "教师信号-Y" */ 
			if(fabs(width)>=.01){
			 wrong = 1; 
			 total++; 
			 w[0] = w[0]*(1+width*NIU);     /*改变权值0*/
			 w[1] = w[1]*(1+width*NIU);     /*改变权值1*/
			 if(total> =200)       /*防止程序进入死循环*/
				{error(); return 1; }
			 }
		 }
	 }/*若i的四次循环均满足" fabs(width)> =.01" 则wrong=0, 结束循环*/
}
practic(quarity) /*实践新模型或演示已有模型, 由quarity[]值决定*/
float quarity[2]; 
{int k, y; 
 float x, width, x1, x2; 
 for(k = 0; k < 4; k++){ 
	 gotoxy(0, 4+k*3);  
	 printf("\nPlease input :x1, x2 ");  
	 scanf("%f, %f", &x1, &x2);  
	 x = OMIGA*(quarity[0]*x1+quarity[1]*x2-SITA); 
	 y = 1.0/(1.0+exp(-x))+.01;  /*精度为0.01*/ 
	 printf("\t\t\ty = "%d" , y); 
	 getch();  
	 } 
} 

input() /*当选择"学习"功能时输入事件*/ 
{int i;  
	printf("Please input the 4 groups data:\n\n");  
	for(i = 0; i< 4; i++){
		printf("\tThe %d group x1, x2, teacher's point: ", i+1);  
		scanf("%f, %f, %f", &terg[i][0], &terg[i][1], &terg[i][2]);  
		} 
	clrscr();  
} 

andinput() 
{terg[0][0] = 1; terg[0][1] = 1; terg[0][2] = 1; 
	terg[1][0] = 1; 
	terg[1][1] = 0; 
	terg[1][2] = 0; 
	terg[2][0] = 0; 
	terg[2][1] = 1; 
	terg[2][2] = 0; 
	terg[3][0] = 0; 
	terg[3][1] = 0; 
	terg[3][2] = 0; 
} 

orinput() 
{terg[0][0] = 1; 
	terg[0][1] = 1; 
	terg[0][2] = 1; 
	terg[1][0] = 1; 
	terg[1][1] = 0; 
	terg[1][2] = 1; 
	terg[2][0] = 0; 
	terg[2][1] = 1; 
	terg[2][2] = 1; 
	terg[3][0] = 0; 
	terg[3][1] = 0; 
	terg[3][2] = 0; 
} 

error() /*初始权值选择不当或模型无法实现(如异或模型)时退出*/ 
{clrscr();  
	printf("\n\n\n\tBecause the firse QUARITIES's choise is unavailble, \n");  
	printf("\tIt can't get the right result, forveve!");  
} 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -