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

📄 bpnlayerexedoc.cpp

📁 BP神经网络程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -