亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? learning.c

?? 模糊控制工具箱,很好用的,有相應的說明文件,希望對大家有用!
?? C
字號:

/*********************************************************************/
/*                        R C S  information                         */
/*********************************************************************/
/* $Revision: 1.20.4.1 $  
/*
 * $Log: learning.c,v $
 * Revision 1.20.4.1  2005/05/27 14:04:22  batserve
 * 2005/04/20  1.20.12.1  batserve
 *   2005/04/15  1.20.32.1  mbharadw
 *     Related Records: 198767
 *     Code Reviewer: mbharadw
 *     ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 *   2005/04/20  1.20.32.2  mbharadw
 *     Related Records: 198767
 *     Code Reviewer: mbharadw
 *     ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 *   Accepted job 5908 in Acontrol_14p0
 * Accepted job 27870 in A
 *
 * Revision 1.20.12.1  2005/04/20 04:46:54  batserve
 * 2005/04/15  1.20.32.1  mbharadw
 *   Related Records: 198767
 *   Code Reviewer: mbharadw
 *   ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 * 2005/04/20  1.20.32.2  mbharadw
 *   Related Records: 198767
 *   Code Reviewer: mbharadw
 *   ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 * Accepted job 5908 in Acontrol_14p0
 *
 * Revision 1.20.32.2  2005/04/20 00:07:44  mbharadw
 * Related Records: 198767
 * Code Reviewer: mbharadw
 * ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 *
 * Revision 1.20.32.1  2005/04/15 21:43:01  mbharadw
 * Related Records: 198767
 * Code Reviewer: mbharadw
 * ANFIS zero firing strength error bug. Added an extra parameter bias which gets updated when there is zero firing strength. Currently, I remove the bias parameter in anfis.m after the training in anfismex.dll. Will reinstate it if the fis gets converted from being a struct to an object
 *
 * Revision 1.20  2002/06/17 12:47:10  eyarrow
 * Update to current year for cprw
 *
 * Revision 1.20  2002/06/05 13:17:16  eyarrow
 * Update to current year for cprw
 *
 * Revision 1.19  2001/04/10 21:20:55  eyarrow
 * Copyright update
 * Code Reviewer: rsingh
 *
 * Revision 1.18  2001/03/22 15:10:52  nhickey
 * double was defined as DOUBLE which is either type double or typr real_Y
 * depending on application. This is related to geck 89752
 * Code Reviewer: pascal
 *
 * Revision 1.17  2001/02/07  19:03:30  nhickey
 * Ensure correct call to printf and calloc
 * Code Reviewer: pascal
 *
 * Revision 1.16  2000/09/18  22:01:45  greg
 * Fix log prefix
 * Related Records: CVS
 * Code Reviewer: marc, mmirman
 *
 * Revision 1.15  2000/06/15 13:40:13  eyarrow
 * Copyright update
 * Related Records:
 * Code Reviewer: greg
 *
 * Revision 1.14  2000/05/24 20:53:21  pascal
 * 1) Replace PARA and SUGENO_COEFF in MF data type (fis.h) by PARAMS/NPARAMS
 * fields 2) Fix geck 58789 (no assumption on the number of MF parameters) 3)
 * Protect against screwy constant MF (with empty params)
 * Related Records: 58789, 59702
 * Code Reviewer: eyarrow
 *
 * Revision 1.13  1999/01/12 17:30:14  joeya
 * Updated (c) Mathworks ==> (c) MathWorks
 *
 * Revision 1.12  1999/01/07  21:20:17  joeya
 * Updated ending cpyrt date
 *
 * Revision 1.11  1998/08/10  14:45:18  rob
 * updated HG calls to on off from yes no
 *
 * Related Records: 46062
 * Code Reviewer: Kelly Liu
 *
 * Revision 1.9  1998/04/17  16:44:02  kliu
 * use the old version for hibrid method
 * Related Records: 4116
 * Code Reviewer: roger
 *
 * Revision 1.3  1995/04/06  14:38:09  jang
 * Don't update parameters if gradient length == 0
 *
 * Revision 1.2  1994/10/25  20:38:51  jang
 * correct typos
 *
 * Revision 1.1  1994/09/14  21:55:01  jang
 * Initial revision
 * */
/*********************************************************************/
/*
 * Copyright 1994-2002 The MathWorks, Inc. 
 */

/* forward pass from node 'from' to node 'to' */
/* the input vector should have been dispatched */
static void anfisForward(FIS *fis, int from, int to)
{
	int i;

	if (from < fis->in_n || to >= fis->node_n)
		fisError("Node index out of bound!");

	/* forward calculation */
	for (i = from; i <= to ; i++)
		fis->node[i]->value =
			(*fis->node[i]->nodeFcn)(fis, i, "forward", -1);
	/*
	PRINT(from);
	PRINT(to);
	anfisPrintData(fis);
	*/
}

/* backward pass from node 'from' to node 'to' */
/* the de_do field of output nodes should have been set */
static void anfisBackward(FIS *fis, int from, int to)
{
	int i;

	if (from < fis->in_n || to >= fis->node_n)
		fisError("Node index out of bound!");

	/* backward calculation */
	for (i = from; i >= to; i--) {
		DOUBLE de_do, do_do;
		FAN *p, *q;
		int k;

		de_do = 0;
		for (p = fis->node[i]->fanout; p != NULL; p = p->next) {
			/* O_i is the k-th fanin of O_{p->index} --> find k */
			for (k = 0, q = fis->node[p->index]->fanin;
				q->index != i; q = q->next, k++);
			if (k >= fis->node[p->index]->fanin_n)
				fisError("Cannot find k in anfisBackward!");
			do_do = (*fis->node[p->index]->nodeFcn)
				(fis, p->index, "backward", k);
			/*
			printf("do%d_do%d = %lf\n", p->index, i, do_do);
			*/
			de_do += fis->node[p->index]->de_do*do_do;
		}
		/* update fis->node[i]->de_do */
		fis->node[i]->de_do = de_do;
	}
}

/* update de_dp of parameterized node from 'from' to 'to'. */
static void anfisUpdateDE_DP(FIS *fis, int from, int to)
{
	int i, j;
	for (i = from; i <= to; i++)
		for (j = 0; j < fis->node[i]->para_n; j++) {
			fis->node[i]->do_dp[j] = (*fis->node[i]->nodeFcn)
				(fis, i, "parameter", j);
			fis->node[i]->de_dp[j] +=
				fis->node[i]->de_do*fis->node[i]->do_dp[j];
		}
}

/* This is good for both on-line and off-line */
/* update parameters of nodes from 'from' to 'to' */
static void anfisUpdateParameter(FIS *fis, int from, int to)
{
	int i, j;
	DOUBLE length = 0;

	/* find the length of gradient vector */ 
	for (i = from; i <= to; i++)
		for (j = 0; j < fis->node[i]->para_n; j++)
			length += pow(fis->node[i]->de_dp[j], 2.0);
	length = sqrt(length);
	if (length == 0) {
		/*
		printf("gradient vector length == 0!\n");
		*/
		return;
	}

	/*
	printf("length = %lf\n", length);
	fisPrintArray(fis->de_dp, fis->para_n);
	fisPrintArray(fis->do_dp, fis->para_n);
	fisPrintArray(fis->para, fis->para_n);
	*/

	/* update parameters */
	for (i = from; i <= to; i++)
		for (j = 0; j < fis->node[i]->para_n; j++)
			fis->node[i]->para[j] -=
				fis->ss*fis->node[i]->de_dp[j]/length;
}

/* clear de_do */
/* do_dp is overwritten every time, so it needs not to be cleared */
static void anfisClearDerivative(FIS *fis)
{
	int i;
	for (i = 0; i < fis->para_n; i++)
		fis->de_dp[i] = 0;
}

/* compute training error */
static DOUBLE anfisComputeTrainingError(FIS *fis)
{
	int j, k;
	DOUBLE squared_error = 0;

	for (j = 0; j < fis->trn_data_n; j++) {
		/* dispatch inputs */
		for (k = 0; k < fis->in_n; k++)
			fis->node[k]->value = fis->trn_data[j][k];

		/* forward calculation */
		anfisForward(fis, fis->in_n, fis->node_n-1);

		/* calculate error measure */
		squared_error += pow(
			fis->trn_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value, 2.0);
	}
	return(sqrt(squared_error/fis->trn_data_n));
}

/* compute checking error */
static DOUBLE anfisComputeCheckingError(FIS *fis)
{
	int j, k;
	DOUBLE squared_error = 0;

	for (j = 0; j < fis->chk_data_n; j++) {
		/* dispatch inputs */
		for (k = 0; k < fis->in_n; k++)
			fis->node[k]->value = fis->chk_data[j][k];

		/* forward calculation */
		anfisForward(fis, fis->in_n, fis->node_n-1);

		/* calculate error measure */
		squared_error += pow(
			fis->chk_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value, 2.0);
	}
	return(sqrt(squared_error/fis->chk_data_n));
}

/* a single epoch with index i, using GD only */
static void anfisOneEpoch0(FIS *fis, int i)
{
	int j, k;
	DOUBLE squared_error;

	anfisClearDerivative(fis);
	squared_error = 0;
	for (j = 0; j < fis->trn_data_n; j++) {
		/* dispatch inputs */
		for (k = 0; k < fis->in_n; k++)
			fis->node[k]->value = fis->trn_data[j][k];

		/* forward calculation from layer 1 to layer 3 */
		anfisForward(fis, fis->in_n, fis->node_n-1);

		/* calculate error measure */
		squared_error += pow(
			fis->trn_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value, 2.0);

		/* dispatch de_do at outputs */
		fis->node[fis->node_n-1]->de_do =
			-2*(fis->trn_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value);

		/* backward calculation */
		anfisBackward(fis, fis->node_n-2, fis->in_n);

		/* update de_dp */
		anfisUpdateDE_DP(fis, fis->in_n, fis->node_n-1);

		/* print data for debugging */
		/*
		anfisPrintData(fis);
		*/
	}
	fis->trn_error[i] = sqrt(squared_error/fis->trn_data_n);
	if (fis->chk_data_n != 0)
		fis->chk_error[i] = anfisComputeCheckingError(fis);
}

/* a single epoch with index i, using both GD and LSE */
static void anfisOneEpoch1(FIS *fis, int i)
{
	int j, k;
	DOUBLE squared_error;

	anfisClearDerivative(fis);
	squared_error = 0;
	anfisKalman(fis, 1, 1e6);	/* reset matrices used in kalman */
	for (j = 0; j < fis->trn_data_n; j++) {
		/* dispatch inputs */
		for (k = 0; k < fis->in_n; k++)
			fis->node[k]->value = fis->trn_data[j][k];

		/* forward calculation from layer 1 to layer 3 */
		anfisForward(fis, fis->in_n, fis->layer[4]->index-1);

		/* store node outputs from layer 0 to 3 */
		for (k = 0; k < fis->layer[4]->index; k++)
			fis->tmp_node_output[j][k]=fis->node[k]->value;
		anfisGetKalmanDataPair(fis, j);
		anfisKalman(fis, 0, 1e6);	/* normal operation */
	}
	anfisPutKalmanParameter(fis);
	for (j = 0; j < fis->trn_data_n; j++) {
		/* restore node outputs from layer 0 to 3 */
		for (k = 0; k < fis->layer[4]->index; k++)
			fis->node[k]->value=fis->tmp_node_output[j][k];

		fis->skipdatapoint = 0;

		/* forward pass from layer 4 to 6 */
		anfisForward(fis, fis->layer[4]->index, fis->node_n-1);

		if (fis->skipdatapoint)
		{
			fis->bias[0] = fis->bias[0] + (fis->ss * (fis->trn_data[j][fis->in_n] - fis->bias[0]) );
			continue;
		}

		/* calculate error measure */
		squared_error += pow(
			fis->trn_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value, 2.0);

		/* dispatch de_do at outputs */
		fis->node[fis->node_n-1]->de_do =
			-2*(fis->trn_data[j][fis->in_n] -
			fis->node[fis->node_n-1]->value);

		/* backward calculation */
		anfisBackward(fis, fis->node_n-2, fis->in_n);

		/* update de_dp of layer 1*/
		anfisUpdateDE_DP(fis, fis->in_n,fis->layer[2]->index-1);

		/* print data for debugging */
		/*
		anfisPrintData(fis);
		*/
	}
	fis->trn_error[i] = sqrt(squared_error/fis->trn_data_n);
	if (fis->chk_data_n != 0)
		fis->chk_error[i] = anfisComputeCheckingError(fis);
}

/* main loop for learning */
static void anfisLearning(FIS *fis)
{
	int i, k;

	if (fis->display_error)
		PRINTF("\nStart training ANFIS ...\n\n");

	for (i = 0; i < fis->epoch_n; i++) {
		/* GD only */
		if (fis->method==0){
        		anfisOneEpoch0(fis, i);
		        anfisUpdateParameter(fis, fis->in_n, fis->node_n-1);

                }else
                {
		/* GD + LSE */
		        anfisOneEpoch1(fis, i);
                }
		/* update min. training error if necessary */
		if (fis->trn_error[i] < fis->min_trn_error) {
			fis->min_trn_error = fis->trn_error[i];
			/* record best parameters so far */
			for (k = 0; k < fis->para_n; k++)
				fis->trn_best_para[k] = fis->para[k];
		}


		/* update min. checking error if necessary */
		if (fis->chk_data_n != 0)
			if (fis->chk_error[i] < fis->min_chk_error) {
				fis->min_chk_error = fis->chk_error[i];
				/* record best parameters so far */
				for (k = 0; k < fis->para_n; k++)
					fis->chk_best_para[k] = fis->para[k];
			}

		if (fis->display_error)
		if (fis->chk_data_n != 0)
			PRINTF("%4d \t %g \t %g\n", i+1,
				fis->trn_error[i], fis->chk_error[i]);
		else
			PRINTF("%4d \t %g\n", i+1,
				fis->trn_error[i]);

		/* stop training if error goal is reached */
		if (fis->min_trn_error <= fis->trn_error_goal) {
			fis->actual_epoch_n = i+1;
			if (fis->display_error)
			PRINTF("\nError goal (%g) reached --> ANFIS training completed at epoch %d.\n\n", fis->trn_error_goal, fis->actual_epoch_n);
			return;
		}

		/* update parameters */
                if (fis->method==1)
		 anfisUpdateParameter(fis, fis->in_n,fis->layer[2]->index-1);

		/* update step size */
		fis->ss_array[i] = fis->ss;	/* record step size */
		anfisUpdateStepSize(fis, i);	/* update step size */
	}
	if (fis->display_error)
	PRINTF("\nDesignated epoch number reached --> ANFIS training completed at epoch %d.\n\n", fis->epoch_n);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久久久电影| 久久99蜜桃精品| 亚洲精品欧美在线| 91精品一区二区三区在线观看| 激情文学综合网| 亚洲成人自拍偷拍| 国产精品日产欧美久久久久| 91精品国产色综合久久不卡蜜臀 | 午夜精品久久久久久久99水蜜桃| 久久亚洲精精品中文字幕早川悠里| 日本韩国欧美三级| 国产999精品久久久久久绿帽| 亚洲国产成人va在线观看天堂| 国产欧美日韩亚州综合 | 最新国产成人在线观看| 日韩视频在线观看一区二区| 91麻豆国产香蕉久久精品| 国产一区啦啦啦在线观看| 首页国产丝袜综合| 亚洲综合图片区| 国产精品福利一区二区三区| 精品99999| 欧美大片在线观看一区二区| 欧美电影一区二区三区| 欧美在线免费观看视频| 99久久99久久免费精品蜜臀| 国产99精品国产| 国产精品乡下勾搭老头1| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日本网站在线观看一区二区三区| 亚洲色图欧洲色图婷婷| 国产日产欧美一区二区三区 | 亚洲成人免费视| 一区二区在线观看免费 | 国产精品久久久一区麻豆最新章节| 欧美成人高清电影在线| 欧美一区二区女人| 56国语精品自产拍在线观看| 欧美美女一区二区在线观看| 欧美日韩国产另类不卡| 欧美日韩国产色站一区二区三区| 欧美日韩卡一卡二| 在线观看91av| 日韩视频123| 26uuu精品一区二区三区四区在线| 日韩一级片在线播放| 日韩一区二区麻豆国产| 26uuu色噜噜精品一区二区| 欧美电影免费观看高清完整版在线观看| 91精品国产91热久久久做人人| 欧美一区二区三区四区久久| 日韩欧美中文一区| 国产偷国产偷亚洲高清人白洁| 国产色婷婷亚洲99精品小说| 日本一区二区三区dvd视频在线| 国产亚洲va综合人人澡精品| 国产精品乱码妇女bbbb| 午夜久久久久久久久久一区二区| 奇米影视7777精品一区二区| 国产一区二区三区久久悠悠色av| 成人激情综合网站| 欧美亚洲综合另类| 日韩一级欧美一级| 国产亚洲欧美一区在线观看| 中文字幕一区二区三区色视频 | 国产精品国产三级国产普通话99| 亚洲免费观看高清| 水野朝阳av一区二区三区| 久久成人av少妇免费| 盗摄精品av一区二区三区| 91福利在线免费观看| 欧美一区二区三区四区视频| 国产三级精品三级在线专区| 亚洲欧美偷拍卡通变态| 水蜜桃久久夜色精品一区的特点| 国产一区二区影院| 色综合久久久久综合| 日韩一区二区三区三四区视频在线观看 | 麻豆久久久久久| 成人小视频在线观看| 欧美影院精品一区| 久久久不卡影院| 国产成人综合网站| 日本精品一级二级| 久久先锋影音av鲁色资源| 亚洲免费av在线| 韩国精品主播一区二区在线观看| 99re亚洲国产精品| 欧美成人性战久久| 又紧又大又爽精品一区二区| 狠狠色伊人亚洲综合成人| 在线观看国产精品网站| 久久日韩粉嫩一区二区三区| 亚洲图片欧美视频| 懂色一区二区三区免费观看| 欧美精选午夜久久久乱码6080| 中文字幕欧美区| 久久黄色级2电影| 在线影院国内精品| 中文字幕乱码一区二区免费| 日韩精品福利网| 一本一道综合狠狠老| 久久久精品免费观看| 奇米影视一区二区三区小说| 在线欧美日韩精品| 欧美激情一区三区| 久久成人免费电影| 欧美日韩精品一区二区三区| 亚洲欧洲日产国码二区| 国模大尺度一区二区三区| 欧美三片在线视频观看| 亚洲人成网站影音先锋播放| 精品午夜一区二区三区在线观看 | 91同城在线观看| 亚洲精品一线二线三线| 国产乱码精品一区二区三区忘忧草| 欧美日韩激情在线| 亚洲免费在线看| 成人性色生活片| 国产亚洲一二三区| 国产在线精品一区二区不卡了| 日韩一区二区三区视频在线观看| 午夜不卡在线视频| 精品视频一区 二区 三区| 亚洲精品成人天堂一二三| 91色|porny| 中文字幕一区二区三区乱码在线| 高清国产午夜精品久久久久久| 精品99999| 国产裸体歌舞团一区二区| 欧美精品一区二区三区在线| 久久91精品久久久久久秒播 | 亚洲图片欧美激情| 粉嫩aⅴ一区二区三区四区五区| 国产日韩欧美麻豆| 国产v综合v亚洲欧| 欧美国产成人在线| 不卡电影免费在线播放一区| 国产精品久久午夜夜伦鲁鲁| 99久久婷婷国产| 亚洲激情一二三区| 欧美在线一区二区| 亚洲地区一二三色| 69堂亚洲精品首页| 九九国产精品视频| 久久久久久久综合色一本| 成人在线一区二区三区| 亚洲欧洲精品一区二区三区不卡| 99视频精品在线| 一区二区成人在线| 久久亚区不卡日本| 成人网页在线观看| 亚洲日本在线天堂| 欧美色区777第一页| 日韩精品乱码免费| 日韩精品中文字幕在线不卡尤物 | 91福利视频网站| 日本一不卡视频| 久久影院电视剧免费观看| caoporm超碰国产精品| 亚洲午夜国产一区99re久久| 91精品国产综合久久久久| 激情综合色综合久久综合| 欧美激情一区二区三区四区| 91久久国产最好的精华液| 亚洲国产精品一区二区久久恐怖片| 69久久99精品久久久久婷婷| 国产一区二区三区四| 亚洲靠逼com| 69堂亚洲精品首页| 国产91在线观看丝袜| 亚洲精品高清在线观看| 日韩一二在线观看| 成人不卡免费av| 午夜精品一区在线观看| 久久精品人人爽人人爽| 色婷婷亚洲精品| 精彩视频一区二区三区| 综合久久一区二区三区| 欧美丰满一区二区免费视频| 国产精品伊人色| 亚洲一区二区精品3399| 久久久国际精品| 欧美日韩国产成人在线免费| 国产另类ts人妖一区二区| 狠狠网亚洲精品| 亚洲精品免费电影| 久久日一线二线三线suv| 在线看日本不卡| 国产精品亚洲午夜一区二区三区| 伊人色综合久久天天| 久久蜜桃香蕉精品一区二区三区| 在线视频综合导航| 国产毛片精品视频| 日韩黄色在线观看| 亚洲欧洲另类国产综合| 久久久99精品免费观看不卡| 欧美人伦禁忌dvd放荡欲情| 成人美女在线视频| 国内外成人在线|