📄 mbp1.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 + -