📄 bpnlayerexedoc.cpp
字号:
for (int j=0;j<m_piLayerCapture[0];j++)
{
StrTemp.Format("Input%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdInputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdOutputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
m_pBPNet->Input(pdInputArray,pdOutputArray);
m_pBPNet->Run();
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
if (m_bAbsError)
{
dResualt=fabs(m_pBPNet->GetResualt(j)-ColeTemp.dblVal);
}
else
{
dResualt=fabs(m_pBPNet->GetResualt(j)/(ColeTemp.dblVal)-1);
}
//dError=dResualt*dResualt/2;
m_pRsSave->SetFieldValue(StrTemp,dResualt);
pdDraw[j]=dResualt;
}
m_pRsSave->Update();
if (i==((iRecordNum-2)*iDataScareTimth-1))
{
m_pRsOpen->MoveFirst();
m_pRsOpen->MoveNext();
m_pRsOpen->MoveNext();
iDataScareTimth+=1;
}
else
{
m_pRsOpen->MoveNext();
}
m_pRsSave->AddNew();
m_pResualtView->DrawLately(m_iTrainTimth+i,pdDraw);
}
m_iTrainTimth+=times;
m_bPropotinoEnable=TRUE;
m_pTextShowView->SetTreeView();
}
void CBpNlayerEXEDoc::Train(int iRepeatTimth,double dError)
{
double *pdInputArray,*pdOutputArray;
pdInputArray=new double[m_piLayerCapture[0]];
pdOutputArray=new double[*(m_piLayerCapture+m_iLayerNum-1)];
COleVariant ColeTemp;
CString StrTemp;
int iRecordNum=m_pRsOpen->GetRecordCount();
int iDataScareTimth=1;
int i=0;
int iErrorth=0;
double dResualt;
BOOL bNotEnd=TRUE;
double *pdDraw;
pdDraw=new double[*(m_piLayerCapture+m_iLayerNum-1)];
m_pRsSave->AddNew();
m_pRsOpen->MoveFirst();
m_pRsOpen->MoveNext();
m_pRsOpen->MoveNext();//the beginning two records are enable;
while (bNotEnd)
{
for (int j=0;j<m_piLayerCapture[0];j++)
{
StrTemp.Format("Input%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdInputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdOutputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
m_pBPNet->Input(pdInputArray,pdOutputArray);
m_pBPNet->Run();
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
if (m_bAbsError)
{
dResualt=fabs(m_pBPNet->GetResualt(j)-ColeTemp.dblVal);
}
else
{
dResualt=fabs(m_pBPNet->GetResualt(j)/(ColeTemp.dblVal)-1);
}
//dErrortemp=dResualt*dResualt/2;
ColeTemp.Clear();
m_pRsSave->SetFieldValue(StrTemp,dResualt);
pdDraw[j]=dResualt;
if(dResualt<dError)
{
iErrorth+=1;
}
else
{
iErrorth=0;
}
if (iErrorth==iRepeatTimth)
{
bNotEnd=FALSE;
}
}
m_pRsSave->Update();
if (i==((iRecordNum-2)*iDataScareTimth-1))
{
m_pRsOpen->MoveFirst();
m_pRsOpen->MoveNext();
m_pRsOpen->MoveNext();
iDataScareTimth+=1;
}
else
{
m_pRsOpen->MoveNext();
}
m_pRsSave->AddNew();
m_pResualtView->DrawLately(m_iTrainTimth+i,pdDraw);
i++;
}
m_iTrainTimth+=i;
m_bPropotinoEnable=TRUE;
m_pTextShowView->SetTreeView();
}
void CBpNlayerEXEDoc::Expend(int times)
{
double *pdInputArray,*pdOutputArray;
pdInputArray=new double[m_piLayerCapture[0]];
pdOutputArray=new double[*(m_piLayerCapture+m_iLayerNum-1)];
double *pdDraw;
pdDraw=new double[*(m_piLayerCapture+m_iLayerNum-1)];
COleVariant ColeTemp;
CString StrTemp;
double dResualt;
int iRecordNum=m_pRsOpen->GetRecordCount();
int iDataScareTimth=1;
m_pRsSave->AddNew();
m_pRsOpen->MoveFirst();
m_pRsOpen->MoveNext();
m_pRsOpen->MoveNext();//the beginning two records are enable;
for (int i=0;i<times;i++)
{
for (int j=0;j<m_piLayerCapture[0];j++)
{
StrTemp.Format("Input%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdInputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
*(pdOutputArray+j)=ColeTemp.dblVal;
ColeTemp.Clear();
}
m_pBPNet->Input(pdInputArray,pdOutputArray);
m_pBPNet->Expend();
for (int j=0;j<m_piLayerCapture[m_iLayerNum-1];j++)
{
StrTemp.Format("Output%d",j);
m_pRsOpen->GetFieldValue(StrTemp,ColeTemp);
if (m_bAbsError)
{
dResualt=fabs(m_pBPNet->GetResualt(j)-ColeTemp.dblVal);
}
else
{
dResualt=fabs(m_pBPNet->GetResualt(j)/(ColeTemp.dblVal)-1);
}
//dError=dResualt*dResualt/2;
m_pRsSave->SetFieldValue(StrTemp,dResualt);
pdDraw[j]=dResualt;
}
m_pRsSave->Update();
if (i==((iRecordNum-2)*iDataScareTimth-1))
{
m_pRsOpen->MoveFirst();
m_pRsOpen->MoveNext();
m_pRsOpen->MoveNext();
iDataScareTimth+=1;
}
else
{
m_pRsOpen->MoveNext();
}
m_pRsSave->AddNew();
m_pResualtView->DrawLately(m_iTrainTimth+i,pdDraw);
}
m_iTrainTimth+=times;
m_bPropotinoEnable=TRUE;
m_pTextShowView->SetTreeView();
}
bool CBpNlayerEXEDoc::IsNum(CString str)
{
for(int i=0;i<str.GetLength();i++)
{
if(str.GetAt(i)<'0'||str.GetAt(i)>'9')
return false;
}
return true;
}
void CBpNlayerEXEDoc::OnFileSave()
{
// TODO: Add your command handler code here
if (m_pFileDlg)
{
delete m_pFileDlg;
m_pFileDlg=NULL;
}
m_pFileDlg=new CFileDialog(FALSE);
CFileFind FileFind;
CFile *pFile;
if (IDOK==m_pFileDlg->DoModal())
{
if (!FileFind.FindFile(m_pFileDlg->GetPathName()))
{
pFile=new CFile(m_pFileDlg->GetPathName(),CFile::modeCreate|CFile::modeWrite);
}
else
{
DeleteFile(m_pFileDlg->GetPathName());
pFile=new CFile(m_pFileDlg->GetPathName(),CFile::modeCreate|CFile::modeWrite);
}
}
CArchive ar(pFile,CArchive::store);
ar<<m_bPauseEnable<<m_bRunEnable<<m_bSaveAsEnable<<m_bSaveEnable<<m_bStopEnable<<m_dStudyRate
<<m_FunctionType<<m_iLayerNum<<m_dMomentum<<m_iTrainTimth<<m_bAbsError;
ar<<m_pBPNet;
for (int i=0;i<m_iLayerNum;i++)
{
ar<<m_piLayerCapture[i];
}
for (int i=0;i<m_piLayerCapture[m_iLayerNum-1];i++)
{
ar<<m_pResualtView->m_pdOrigin[i];
}
ar<<(m_pResualtView->m_dProportion);
ar.Close();
}
void CBpNlayerEXEDoc::OnFileOpen()
{
m_bDataOk=FALSE;
// TODO: Add your command handler code here
CView *pView1,*pView2,*pView3;
if (m_pFileDlg)
{
delete m_pFileDlg;
m_pFileDlg=NULL;
}
m_pFileDlg=new CFileDialog(TRUE);
CFile *pFile;
if (IDOK==m_pFileDlg->DoModal())
{
pFile=new CFile(m_pFileDlg->GetPathName(),CFile::modeRead);
}
else
{
return;
}
CArchive ar(pFile,CArchive::load);
ar>>m_bPauseEnable>>m_bRunEnable>>m_bSaveAsEnable>>m_bSaveEnable>>m_bStopEnable>>m_dStudyRate
>>m_FunctionType>>m_iLayerNum>>m_dMomentum>>m_iTrainTimth>>m_bAbsError;
if (m_pBPNet)
{
delete m_pBPNet;
m_pBPNet=NULL;
}
ar>>m_pBPNet;
if (m_piLayerCapture)
{
delete []m_piLayerCapture;
}
m_piLayerCapture=new int[m_iLayerNum];
for (int i=0;i<m_iLayerNum;i++)
{
ar>>m_piLayerCapture[i];
}
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
pView1=GetNextView(pos);
if (pView1->IsKindOf(RUNTIME_CLASS(resualtTextView)))
{
pView2=pView1;
m_pResualtView=(resualtTextView*)pView2;
}
if (pView1->IsKindOf(RUNTIME_CLASS(textshowView)))
{
pView3=pView1;
m_pTextShowView=(textshowView*)pView3;
}
}
if (m_pResualtView->m_pdOrigin)
{
delete [](m_pResualtView->m_pdOrigin);
}
m_pResualtView->m_pdOrigin=new double[m_piLayerCapture[m_iLayerNum-1]];
for (int i=0;i<m_piLayerCapture[m_iLayerNum-1];i++)
{
ar>>(m_pResualtView->m_pdOrigin[i]);
}
ar>>(m_pResualtView->m_dProportion);
double *pdTemp;
pdTemp=new double[m_piLayerCapture[m_iLayerNum-1]];
for (int i=0;i<m_piLayerCapture[m_iLayerNum-1];i++)
{
pdTemp[i]=0;
}
m_bNew=FALSE;
SetDatabase();
m_pResualtView->DrawLately(1,pdTemp);
m_pTextShowView->SetTreeView();
ar.Close();
m_bPropotinoEnable=TRUE;
}
void CBpNlayerEXEDoc::OnUnitary()
{
// TODO: Add your command handler code here
UnitaryDlg unitDlg;
unitDlg.DoModal();
}
void CBpNlayerEXEDoc::OnUnunitary()
{
// TODO: Add your command handler code here
UnUnitaryDlg ununiDlg;
ununiDlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -