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

📄 mbp1.cpp

📁 神经网络算法
💻 CPP
字号:
// MBP1.cpp: implementation of the CMBP class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "mbp.h"
//#include "MainFrm.h"
#include "MBP1.h"
#include"math.h"
//#include "stdlib.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMBP::CMBP()
{

}

CMBP::~CMBP()
{
delete w;
delete q;
delete para1;
delete para2;
delete HideData;
delete m_result;

}

void CMBP::InitData( int Inum, int Fnum,  int *Idata)
{
	int i,j;
	arf=0.2;
	bata=0.3;
	ObserNum=Inum;
	FacterNum=Fnum;
	HideNodeNum=3;
	OutNodeNum=Fnum;
	InputDays=Idata;
	ObserData=v;
	oldresult=(double *)malloc((Inum+100)*sizeof(double));
	para1=(double *)malloc(3*sizeof(double));
	para2=(double *)malloc(FacterNum*sizeof(double));
	w=(double *)malloc(3*sizeof(double));
	q=(double *)malloc(3*FacterNum*sizeof(double));
	m_result=(double *)malloc(FacterNum*sizeof(double));
	HideData=(double *)malloc(3*sizeof(double));
	
	for(i=0;i<3;i++)
	{
		w[i]=i/7.0+0.1;
		para1[i]=w[i]+0.3222;
		for(j=0;j<FacterNum;j++)

		{
			q[i*FacterNum+j]=(i*j)/25.0+0.1;	
			para2[j]=q[i*FacterNum+j]*0.345;
		}

	}
}

void CMBP::Exercise(CMBP &mdata,double Epsl)
{
	double Epsl1=1.0;
	int i,j,k,r;
	
	
	double d[4],e[3];
	int cc=0;
	double result[4],s=0.0;

      
	if(Epsl<0.0005) Epsl=0.1;

	while(Epsl1>Epsl)
	{   cc++;

	double maxxx=0.0;
	   for(i=0;i<ObserNum;i++)
	   {
		   for(j=0;j<3;j++)
			   HideData[j]=1.0/(1.0+exp(-w[j]*InputDays[i]-para1[j]));
           for(j=0;j<FacterNum;j++)
		   {
			   
			   double tt=0.0;
			   for(k=0;k<3;k++)
				   tt=tt+q[k*FacterNum+j]*HideData[k];
			   result[j]=1.0/(1.0+exp(-tt-para2[j]));
			   
		   };
		   
		   for(j=0;j<FacterNum;j++)
		   {
			   
			   d[j]=ObserData[i*FacterNum+j]-result[j];
			   if(fabs(d[j])>fabs(maxxx)) 
				   maxxx=d[j];
		   }
		   for(r=0;r<3;r++)
		   {
			   s=0.0;
			   for(j=0;j<FacterNum;j++)
				   s=s+q[r*FacterNum+j]*d[j];
			   e[r]=HideData[r]*(1.0-HideData[r])*s;
		   }	
		   
		   for(r=0;r<3;r++)
		   {
			   for(j=0;j<FacterNum;j++)
			   {
				   q[r*FacterNum+j]=q[r*FacterNum+j]+bata*HideData[r]*d[j];
				   if(r==0)para2[j]=para2[j]+bata*d[j];
			   }
		   }
		   for(j=0;j<3;j++)
		   { 
			   w[j]=w[j]+arf*InputDays[i]*e[j];
			   para1[j]=para1[j]+arf*e[j];
		   }
		   
	   }
	   Epsl1=fabs(maxxx);
	}
}

void CMBP::predict(int days)
{
int j,k;
double rt[10];
	
for(j=0;j<3;j++)  
 HideData[j]=1.0/(1.0+exp(-w[j]*days-para1[j]));
           for(j=0;j<FacterNum;j++)
		   {  double tt=0.0;
              rt[j]=0.0;
              for(k=0;k<3;k++) rt[j]=rt[j]+q[k*FacterNum+j]*HideData[k];
             tt= 1.0/(1.0+exp(-rt[j]-para2[j]));
			tt=(tt-0.1)*(max[j]-min[j])/0.8+min[j];
			rt[j]=tt;
		   }
      	
      for(j=0;j<FacterNum;j++)
		 m_result[j]=rt[j];
    
oldresult[0]=m_result[0];

}

void CMBP::PreProcess(int m,int n)
{
int i,j;
for( j=0;j<n;j++)
{
max[j]=v[j];
min[j]=v[j];	
for( i=0;i<m;i++)
{
if(v[i*n+j]>max[j])max[j]=v[i*n+j];
else if(v[i*n+j]<min[j])min[j]=v[i*n+j];
}
}

for( j=0;j<n;j++)
for( i=0;i<m;i++)
{

  if ((v[i*n+j]-min[j]==0 ) || (max[j]==min[j]))
	 v[i*n+j]=0.1; 
  else
  v[i*n+j]=0.8*(v[i*n+j]-min[j])/(max[j]-min[j])+0.1;

}
}

void CMBP::CombineValue(double a[], double b[], double c[], double d[],double e[],int qs,int cs)
{

	for(int i=0;i<qs;i++)
	{
		v[i*cs]=a[i];
		v[i*cs+1]=b[i];
		v[i*cs+2]=c[i];
		v[i*cs+3]=d[i];
		v[i*cs+4]=e[i];
	}

}

⌨️ 快捷键说明

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