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

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

?? pso_nn.cpp

?? 標準粒子群優化算法源碼
?? CPP
字號:
/*********************************************************
PSO優化算法+BP神經網絡逼近二元分類問題程序
所有參數設置在"set.txt"配置文件中
*********************************************************/

#include "stdafx.h"
#include "pso_nn.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <Mmsystem.h>
#include "PS.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define MAX_LINE_CHAR	1024
#define MAX_FN_LEN		50

int g_OriginalDimension=41;										//原始特征個數
char g_TrainFileName[MAX_FN_LEN],g_TestFileName[MAX_FN_LEN];	//訓練數據文件名和測試數據文件名
int g_TrainDataNumber=5092,g_TestDataNumber=6890;				//訓練數據和測試數據個數
int g_NormalNumber=0,g_AnormalNumber=0;							//正常、異常訓練數據數目
double *g_TrainData;											//訓練數據緩沖區指針

int g_InputNodeNumber=g_OriginalDimension;						//NN輸入個數
int g_HideNodeNumber=8;											//NN隱含層節點個數
int g_OutputNumber=1;											//NN輸出個數
int g_ParamNumber=g_InputNodeNumber*g_HideNodeNumber			//優化參數個數
	+g_HideNodeNumber*g_OutputNumber
	+g_HideNodeNumber+g_OutputNumber;
double g_WL=-.5;												//參數左邊界
double g_WH=.5;													//參數右邊界

int g_PopScale=20;												//粒子群規模
int g_MaxIter=200;												//最大迭代次數

double Evaluate(double *pw);									//粒子評價函數

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

/*********************************************************
從文件中讀取一行數據
*********************************************************/
BOOL ReadLine(FILE *fp,char *buf)
{
	if(fgets(buf,MAX_LINE_CHAR,fp)==NULL)return FALSE;
	for(int i=0;i<MAX_LINE_CHAR;i++)
	{
		if(buf[i]==0x0a || buf[i]==0x0d)
		{
			buf[i]='\0';
			break;
		}
	}
	return TRUE;
}

/*********************************************************
按空格或制表符間隔解析一個數據元素
*********************************************************/
int ParseData(int pos,const char *buf,char *szRes)
{
	int i=pos,j=0;

	while((buf[i]==32 || buf[i]==9) && buf[i])i++;
	while(!(buf[i]==32 || buf[i]==9) && buf[i])
	{
		szRes[j]=buf[i];
		i++;
		j++;
	}
	szRes[j]=0;
	return i;
}

/*********************************************************
解析參數配置文件中的一個設定值
*********************************************************/
void GetValue(char *from,char *to)
{
	sprintf(to,strstr(from,"=")+1);
	return;
}

/*********************************************************
從配置文件中讀取各參數配置
*********************************************************/
BOOL GetSet()
{
	FILE *f=fopen("set.txt","r");
	if(!f)return FALSE;
	char str[200],value[MAX_FN_LEN];
	
	ReadLine(f,str);
	GetValue(str,value);
	g_OriginalDimension=atoi(value);

	ReadLine(f,str);
	GetValue(str,g_TrainFileName);

	ReadLine(f,str);
	GetValue(str,g_TestFileName);

	ReadLine(f,str);
	GetValue(str,value);
	g_TrainDataNumber=atoi(value);

	ReadLine(f,str);
	GetValue(str,value);
	g_TestDataNumber=atoi(value);

	ReadLine(f,str);
	GetValue(str,value);
	g_HideNodeNumber=atoi(value);

	ReadLine(f,str);
	GetValue(str,value);
	g_OutputNumber=atoi(value);

	ReadLine(f,str);
	GetValue(str,value);
	g_PopScale=atoi(value);

	ReadLine(f,str);
	GetValue(str,value);
	g_MaxIter=atoi(value);

	g_InputNodeNumber=g_OriginalDimension;
	g_ParamNumber=g_InputNodeNumber*g_HideNodeNumber
		+g_HideNodeNumber*g_OutputNumber
		+g_HideNodeNumber+g_OutputNumber;

	fclose(f);
	return TRUE;
}

/*********************************************************
讀取訓練數據
*********************************************************/
BOOL ReadTrainData()
{
	FILE *fp=fopen(g_TrainFileName,"r");
	if(!fp)return FALSE;
	
	char buf[MAX_LINE_CHAR];
	char pData[MAX_LINE_CHAR];
	int nPos;
	int i,j;

	g_TrainData=new double[g_TrainDataNumber*(g_OriginalDimension+1)];
	for(i=0;i<g_TrainDataNumber;i++)
	{
		if(feof(fp))break;
		ReadLine(fp,buf);
		nPos=0;
		for(j=0;j<g_OriginalDimension+1;j++)
		{
			nPos=ParseData(nPos,buf,pData);
			g_TrainData[i*(g_OriginalDimension+1)+j]=atof(pData);
		}
		if(g_TrainData[i*(g_OriginalDimension+1)+g_OriginalDimension]==1.)
			g_NormalNumber++;
		else
			g_AnormalNumber++;
	}
	fclose(fp);
	return TRUE;
}

/*********************************************************
計算NN節點輸出函數
*********************************************************/
double  fire(double x, double a)
{
	double e;
	e = exp(-2.0*a*x);
	return  (1.0/(1.0 + e));
}

/*********************************************************
計算NN輸出函數
*********************************************************/
double *CalculateNNOutput(double *pi,double *pw)
{
	int i,j;
	double *p1=pi,*p2=pw;
	double *HideOutput=new double[g_HideNodeNumber];
	double *Output=new double[g_OutputNumber];
	int WeightNumber=g_InputNodeNumber*g_HideNodeNumber
		+g_HideNodeNumber*g_OutputNumber;

	for(i=0;i<g_HideNodeNumber;i++)
	{
		double sum=0.;
		p1=pi;
		for(j=0;j<g_InputNodeNumber;j++,p1++,p2++)
			sum+=(*p1)*(*p2);
		HideOutput[i]=fire(sum,pw[WeightNumber+i]);
	}
	for(i=0;i<g_OutputNumber;i++)
	{
		double sum=0.;
		p1=HideOutput;
		for(j=0;j<g_HideNodeNumber;j++,p1++,p2++)
			sum+=(*p1)*(*p2);
		Output[i]=fire(sum,pw[WeightNumber+g_HideNodeNumber+i]);
	}

	delete []HideOutput;
	return Output;
}

/*********************************************************
粒子外部評價函數
*********************************************************/
double Evaluate(double *pw,int &err)
{
	int i;
	double *p,*po;
	int tp=0,tn=0,fp=0,fn=0;
	double f;

	for(i=0;i<g_TrainDataNumber;i++)
	{
		p=g_TrainData+i*(g_OriginalDimension+1);
		po=CalculateNNOutput(p,pw);

		if(g_TrainData[i*(g_OriginalDimension+1)+g_OriginalDimension]==1. && po[0]>=.5)
			tp++;
		if(g_TrainData[i*(g_OriginalDimension+1)+g_OriginalDimension]==1. && po[0]<.5)
			tn++;
		if(g_TrainData[i*(g_OriginalDimension+1)+g_OriginalDimension]==0. && po[0]<.5)
			fn++;
		if(g_TrainData[i*(g_OriginalDimension+1)+g_OriginalDimension]==0. && po[0]>=.5)
			fp++;

		delete []po;
	}
//	f=(double)(tp+fn)/g_TrainDataNumber;
	f=(double)tp/g_NormalNumber+(double)fn/g_AnormalNumber;
	f/=2.;
	err=tn+fp;

	return f;
}

/*********************************************************
保存優化結果函數
*********************************************************/
void SaveWParam(double *pw)
{
	FILE *fp=fopen("weight.txt","w");
	if(!fp)return;
	for(int i=0;i<g_ParamNumber;i++)
		fprintf(fp,"%lf\n",pw[i]);
	fclose(fp);
}

void TestByChromosome(double *pw)
{
	FILE *fp=fopen(g_TestFileName,"r");
	double *x=new double[g_OriginalDimension+1];
	double *po;
	char buf[MAX_LINE_CHAR],pData[20];
	int nPos,j;
	int TP=0,TN=0,FP=0,FN=0;
	int NormalNumber=0,AnormalNumber=0;
	for(int i=0;i<g_TestDataNumber;i++)
	{
		if(feof(fp))break;
		ReadLine(fp,buf);
		nPos=0;
		for(j=0;j<g_OriginalDimension+1;j++)
		{
			nPos=ParseData(nPos,buf,pData);
			x[j]=atof(pData);
		}
		po=CalculateNNOutput(x,pw);

		if(x[g_OriginalDimension]==1.)
		{
			NormalNumber++;
			if(po[0]>=.5)
				TP++;
			else
				TN++;
		}
		else
		{
			AnormalNumber++;
			if(po[0]<.5)
				FN++;
			else
				FP++;
		}
		delete []po;
	}
	fclose(fp);
	cout<<"Error number:"<<TN+FP<<endl;
	cout<<"TP="<<TP<<"  FP="<<FP<<endl;
	cout<<"Accuracy="<<(double)(TP+FN)/g_TestDataNumber*100.<<"%  tp="
		<<(double)TP/NormalNumber*100.<<"%  fp="<<(double)FP/AnormalNumber*100.<<"%"<<endl;
	delete []x;
}

/*********************************************************
綜合測試函數
*********************************************************/
void Test()
{
	FILE *fp=fopen("weight.txt","r");
	if(!fp)return;
	double *pw=new double[g_ParamNumber];
	for(int i=0;i<g_ParamNumber;i++)
		fscanf(fp,"%lf\n",pw+i);
	fclose(fp);
	fp=NULL;

	fp=fopen(g_TestFileName,"r");
	double *x=new double[g_OriginalDimension+1];
	char buf[MAX_LINE_CHAR],pData[20];
	int nPos,j;
	int TP=0,TN=0,FP=0,FN=0;
	int NormalNumber=0,AnormalNumber=0;
	for(i=0;i<g_TestDataNumber;i++)
	{
		if(feof(fp))break;
		ReadLine(fp,buf);
		nPos=0;
		for(j=0;j<g_OriginalDimension+1;j++)
		{
			nPos=ParseData(nPos,buf,pData);
			x[j]=atof(pData);
		}
		double *po=CalculateNNOutput(x,pw);
		if(x[g_OriginalDimension]==1.)
		{
			NormalNumber++;
			if(po[0]>=.5)
				TP++;
			else
				TN++;
		}
		else
		{
			AnormalNumber++;
			if(po[0]<.5)
				FN++;
			else
				FP++;
		}
		delete []po;
	}
	fclose(fp);
	cout<<"Error number:"<<TN+FP<<endl;
	cout<<"TP="<<TP<<"  FP="<<FP<<endl;
	cout<<"Accuracy="<<(double)(TP+FN)/g_TestDataNumber*100.<<"%  tp="
		<<(double)TP/NormalNumber*100.<<"%  fp="<<(double)FP/AnormalNumber*100.<<"%"<<endl;
	delete []pw;
	delete []x;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		cout<<"********PSO優化算法+BP神經網絡逼近二元分類問題程序********"<<endl;
		
		GetSet();
		ReadTrainData();
		char cmd[20];
		CPS *ps=new CPS(g_PopScale,g_ParamNumber,g_WL,g_WH);
		while(strcmp(cmd,"bye"))
		{
			cout<<"Input command:"<<endl;
			cout<<"'c' to optimize the neural network"<<endl;
			cout<<"'t' to test the neural network"<<endl;
			cout<<"'i' to reinitiate the particle swarm"<<endl;
			cout<<"'bye' to quit"<<endl;
			cout<<"command:";
			cin>>cmd;
			if(strcmp(cmd,"c")==NULL)
			{
				int start_time=timeGetTime();
				ps->Iterate(g_MaxIter);
				int end_time=timeGetTime();
				cout<<"Use "<<end_time-start_time<<" millisecond!"<<endl;
				SaveWParam(ps->m_gbest);
			}
			if(strcmp(cmd,"t")==NULL)
				Test();
			if(strcmp(cmd,"i")==NULL)
				ps->InitPop();
		}

		delete ps;
	}

	return nRetCode;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久人人人人传媒| 亚洲黄一区二区三区| 国产亚洲午夜高清国产拍精品| 久久久久久久久岛国免费| 日本一区二区三区高清不卡| 亚洲人xxxx| 日本三级亚洲精品| 国产精品12区| 色哦色哦哦色天天综合| 91精品国产手机| 久久久精品综合| 亚洲在线视频网站| 久久国产精品区| 99国内精品久久| 日韩一区二区三区免费看| 欧美高清一级片在线观看| 亚洲午夜免费视频| 国产精品综合在线视频| 在线观看成人小视频| 精品国产欧美一区二区| 亚洲欧美日韩在线不卡| 欧美aaaaaa午夜精品| 99视频在线观看一区三区| 日韩一卡二卡三卡四卡| 国产精品不卡一区二区三区| 日韩av中文字幕一区二区三区| 懂色av中文一区二区三区| 欧美日韩成人综合| 国产精品二区一区二区aⅴ污介绍| 亚洲国产精品嫩草影院| 国产精品99久久久久久久女警| 在线观看欧美黄色| 欧美国产日韩亚洲一区| 日韩成人av影视| 一本色道久久综合狠狠躁的推荐| 精品久久久久一区| 亚洲国产你懂的| 成人99免费视频| 日韩免费在线观看| 亚洲一级二级三级在线免费观看| 国产夫妻精品视频| 91精品国产综合久久小美女| 亚洲男人天堂一区| 国产乱人伦偷精品视频不卡| 69堂亚洲精品首页| 亚洲裸体xxx| 国产99精品视频| 欧美xingq一区二区| 亚洲va欧美va人人爽午夜| 成人av电影在线网| 国产午夜精品在线观看| 麻豆精品一区二区av白丝在线| 欧美亚洲一区三区| 亚洲欧美日韩一区二区 | 91啪在线观看| 久久综合狠狠综合| 久久精品久久综合| 制服视频三区第一页精品| 一区二区高清免费观看影视大全| 成人美女在线视频| 久久人人97超碰com| 美女久久久精品| 3d动漫精品啪啪| 香港成人在线视频| 欧美在线观看视频一区二区三区| 综合网在线视频| 91精品国产综合久久久蜜臀图片| 亚洲黄色小说网站| 91美女蜜桃在线| 亚洲视频免费在线观看| 99久久伊人网影院| 国产精品久久久久影院亚瑟| 成人激情免费视频| 中文字幕精品在线不卡| 成人国产在线观看| 国产精品久久久久影院| 成人av影视在线观看| 1区2区3区国产精品| 91丨九色丨黑人外教| 亚洲欧美日韩国产一区二区三区| 99精品国产99久久久久久白柏| 中文字幕一区av| 91猫先生在线| 亚洲高清视频中文字幕| 欧美日韩一区三区四区| 日日夜夜精品视频天天综合网| 在线综合视频播放| 麻豆成人免费电影| 久久无码av三级| 国产91在线看| 亚洲人成影院在线观看| 在线观看成人免费视频| 丝袜亚洲另类欧美| 日韩精品一区二区三区中文不卡 | 99久久99久久综合| 亚洲精品美国一| 欧美日韩一区中文字幕| 日本美女一区二区三区视频| 欧美大片在线观看| 国产传媒一区在线| 1区2区3区欧美| 欧美日韩五月天| 久久精品国产网站| 国产欧美日韩一区二区三区在线观看| 99麻豆久久久国产精品免费 | 国产精品99久久久| 最新成人av在线| 欧美特级限制片免费在线观看| 男人操女人的视频在线观看欧美| 久久伊99综合婷婷久久伊| av电影在线观看完整版一区二区| 亚洲一区二区五区| 欧美成人艳星乳罩| aaa欧美色吧激情视频| 亚洲一区二区欧美日韩| 一区二区激情视频| 欧美xxxxx牲另类人与| thepron国产精品| 五月综合激情婷婷六月色窝| 精品国产污污免费网站入口 | 成人一级片在线观看| 艳妇臀荡乳欲伦亚洲一区| 欧美一区二区三区视频| 丰满岳乱妇一区二区三区| 一区二区国产视频| 亚洲精品在线三区| 日本韩国欧美在线| 久久99国产精品久久| 亚洲欧美日韩综合aⅴ视频| 日韩欧美在线一区二区三区| 99久久久无码国产精品| 麻豆91在线看| 亚洲免费在线观看| www久久精品| 欧美天天综合网| 成人午夜免费av| 丝袜美腿亚洲综合| 亚洲日本免费电影| 久久综合九色综合97婷婷| 欧亚一区二区三区| 国产乱码一区二区三区| 亚欧色一区w666天堂| 国产精品夫妻自拍| 欧美成人精品福利| 欧美三日本三级三级在线播放| 国产99久久久国产精品免费看 | 欧美一级日韩不卡播放免费| 99re66热这里只有精品3直播| 久久99国产精品成人| 午夜精品久久久久久久久久| 国产精品视频一二| 精品国产伦一区二区三区观看方式| 在线观看亚洲a| 东方aⅴ免费观看久久av| 青青草国产精品97视觉盛宴 | 91麻豆产精品久久久久久 | 国产欧美一二三区| 日韩欧美中文一区| 6080日韩午夜伦伦午夜伦| 色哟哟一区二区三区| 国产成人综合在线播放| 久久狠狠亚洲综合| 午夜国产不卡在线观看视频| 亚洲日本护士毛茸茸| 日本一区二区免费在线| 精品99999| 欧美成人一区二区| 日韩午夜在线观看视频| 日韩一区有码在线| 国产精品天天看| 久久久高清一区二区三区| 欧美一卡2卡3卡4卡| 欧美三级电影网站| 91国产精品成人| 91年精品国产| 972aa.com艺术欧美| 成人黄色av电影| 成人一级片在线观看| 懂色av一区二区三区免费观看| 国产成a人亚洲精| 国产很黄免费观看久久| 国产老女人精品毛片久久| 狠狠色综合色综合网络| 另类成人小视频在线| 美国欧美日韩国产在线播放| 日韩1区2区日韩1区2区| 日本欧美一区二区| 麻豆专区一区二区三区四区五区| 日韩国产精品91| 蜜臀久久99精品久久久久久9| 男女视频一区二区| 看电视剧不卡顿的网站| 极品少妇xxxx精品少妇偷拍| 久久99国产精品麻豆| 国产精品自产自拍| 国产91露脸合集magnet| 成人丝袜18视频在线观看| 成人v精品蜜桃久久一区| 97久久精品人人做人人爽50路| 91女厕偷拍女厕偷拍高清|