www.pudn.com > bpA.rar > bpA.cpp
#include "stdafx.h" #include#include "bpA.h" #include "stdlib.h" #include using namespace std; #define MAX_RAND 32767.0 IMPLEMENT_DYNAMIC(CBpAlgorithm,CObject) CBpAlgorithm::CBpAlgorithm(CWnd* pPanel,CWnd* pDlg){ //TODO:ADD CODE HERE m_nLR=0.7; m_nMC=0.9; m_nLayerNum=2; m_nHiddenLayerNum=m_nLayerNum-1; m_CurrentX=1000.0; m_CurrentY=-8000.0; m_nTrainingNum=80000; m_nVectorNum=2; m_nYdimension=1; m_nXdimension=2; m_pPanel=pPanel; m_pDlg=pDlg; m_strText=""; m_nMaxError=0.002; m_nWam=0; m_nNM=1; m_IsStop=FALSE; m_nNodes[0]=m_nXdimension; m_nNodes[1]=3; m_nNodes[m_nLayerNum]=1; m_IsInput=TRUE; TCHAR lpszPath[MAX_PATH]; ::GetCurrentDirectory(MAX_PATH,lpszPath); CString strPath(lpszPath); strPath+="\\dlls\\sigmoid.dll"; VERIFY(m_hInstance=::LoadLibrary(strPath)); VERIFY(m_pTransFuncX=(FUNCTION*)::GetProcAddress(m_hInstance,"TransFuncX")); VERIFY(m_pTransFunc=(FUNCTION*)::GetProcAddress(m_hInstance,"TransFunc")); } void CBpAlgorithm::Initialize(BOOL yFromFile) { int i,j,k; srand((unsigned)time(0)); CComboBox* pCB=(CComboBox*)m_pDlg->GetDlgItem(IDC_WEIGHT); CListBox* pLB=(CListBox*)m_pDlg->GetDlgItem(IDC_TRAIN); CListBox* pLB1=(CListBox*)m_pDlg->GetDlgItem(IDC_TEST); pCB->ResetContent(); pLB->ResetContent(); pLB1->ResetContent(); CString strText; CString subStr; int nWeightNum=0; for(i=0;i InsertString(nWeightNum++,strText); } for(i=0;i InsertString(i,strText); } /*int end,begin; for(i=0;i 1){ m_Y[i][yItem]=cy[yItem]*0.5; } else{ m_Y[i][yItem]=cy[yItem]; } CString str; str.Format("%f",m_Y[i][yItem]); pLB1->InsertString(i,str); } strText.Delete(strText.GetLength()-1); strText=strText+"]"; pLB->InsertString(i,strText); m_strText+=(strText+"\n"); } */ // ConstructOutputString(); } void CBpAlgorithm::InitInput(){ int begin,end; int i,j; begin=end=1; // m_strText="0.700000,0.900000,80000,2,21.000000,31.000000,52.000000,22.000000,32.000000,54.000000,0.700000,0.900000,80000,2,21.000000,31.000000,52.000000,22.000000,32.000000,54.000000,"; // AfxMessageBox(m_strText); for(i=0;i<4;++i) { end=m_strText.Find(',',begin)-1; switch(i) { case 0: m_nLR=ParseString(begin,end); break; case 1: m_nMC=ParseString(begin,end); break; case 2: m_nTrainingNum=(int)ParseString(begin,end); break; case 3: m_nVectorNum=(int)ParseString(begin,end); break; default: break; } begin=end+2; } end=m_strText.Find(',',begin)-1; for(i=0;i cMax[j])cMax[j]=Array[i][j]; if(Array[i][j] GetDlgItem(IDC_TEST); CString strText; switch(m_nNM) { case 0: for(i=0;i InsertString(-1,strText); } } break; case 1: for(i=0;i InsertString(-1,strText); } } break; case 2: double cRMax[MAX_DIMENSION]; for(i=0;i (cAvg[i]-cMin[i])) cRMax[i]=cMax[i]-cAvg[i]; else cRMax[i]=cAvg[i]-cMin[i]; if(IsSave) { m_RMaxX[i]=cRMax[i]; } else { m_RMaxY[i]=cRMax[i]; } } for(i=0;i InsertString(-1,strText); } } break; default: break; } return; } void CBpAlgorithm::DeNormalizing(double Array[],double ArrayDN[]) { //反归一化仅仅对输出向量有效 int i; for(i=0;i GetDlgItem(IDC_ERROR); pLB->ResetContent(); CString strText; Paint(); if(m_nWam==0)//m_nWam权值调整方式 { for(int loop=0;loop InsertString(cTrainingNum,strText); this->Paint(cTrainingNum); AdjustWeight(cVectorNum); } } if(AbsF(m_nError[cTrainingNum-1])>m_nMaxError){ AfxMessageBox("神经网络没有训练好!"); } else { AfxMessageBox("神经网络已经训练好!"); } } else if(m_nWam==1) { double cError; for(int cTrainingNum=0;cTrainingNum InsertString(cTrainingNum,strText); //画图 this->Paint(cTrainingNum); //调整权值 AdjustWeight(cVectorNum); } if(AbsF(m_nError[cTrainingNum-1])>m_nMaxError){ AfxMessageBox("神经网络没有训练好!"); } else { AfxMessageBox("神经网络已经训练好!"); } } m_CurrentX=1000; m_CurrentY=-8000; } void CBpAlgorithm::Fanhua(){ int i,j,k; for(i=0;i =0;--i) { if(i==m_nLayerNum-1){ for(j=0;j m_hWnd,rectClient); dc.DPtoLP(rectClient); dc.MoveTo(1000,-8000); dc.LineTo(17500,-8000); dc.MoveTo(1000,-1000); dc.LineTo(1000,-8000); dc.MoveTo(1000,-1000); dc.LineTo(800,-1200); dc.MoveTo(1000,-1000); dc.LineTo(1200,-1200); dc.MoveTo(17500,-8000); dc.LineTo(17300,-7800); dc.MoveTo(17500,-8000); dc.LineTo(17300,-8200); //设置横坐标 for(i=0;i<=10;i++) { strText.Format("%d",m_nTrainingNum/10*i); x=(int)(m_CurrentX+16000.0/10*i); dc.MoveTo(x,-8000); dc.LineTo(x,-7900); dc.SetTextColor(RGB(0,0,255)); dc.TextOut(x-500,y,strText); } //设置纵坐标 x=1000; for(i=1;i<=10;i++) { strText.Format("%2f",0.02*i); strText.Delete(4,4); y=(int)(m_CurrentY+7000/10*i); dc.MoveTo(1000,y); dc.LineTo(1200,y); dc.SetTextColor(RGB(0,0,255)); dc.TextOut(x-1000,y+300,strText); } } void CBpAlgorithm::ClearMatrix(){ int i,j,k; for(i=0;i<=m_nLayerNum;++i) { for(j=0;j > t; m_InitX[i][j] = t; } for (j=0; j > t; m_InitY[i][j] = t; } } m_IsInput = TRUE; infile.close(); } #ifdef _DEBUG void CBpAlgorithm::Dump(CDumpContext& dc)const{ CObject::Dump(dc); dc<<"m_nLR="<