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

📄 bpnetdlg.cpp

📁 有届面的BP算法软件.操作简单
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	 

   	
pDC->TextOut(0,-300,"0");
pDC->TextOut(1000,-300,"2");
pDC->TextOut(2000,-300,"4");
pDC->TextOut(3000,-300,"6");
pDC->TextOut(4000,-300,"8");
pDC->TextOut(5000,-300,"10");
pDC->TextOut(6000,-300,"12");
pDC->TextOut(7000,-300,"14");
pDC->TextOut(8000,-300,"16");
pDC->TextOut(9000,-300,"18");
pDC->TextOut(10000,-300,"20");


	for(int j=0;j<4;j++)
	{
		pDC->MoveTo(0,800+800*j);
        pDC->LineTo(10000,800+800*j);
	}
	pDC->TextOut(-500,800,"2%");
	pDC->TextOut(-500,800*2,"4%");
	pDC->TextOut(-500,800*3,"6%");
	pDC->TextOut(-500,800*4,"8%");
	pDC->TextOut(-620,800*5,"10%");

pDC->SetTextColor(RGB(250,0,0));
pDC->SelectObject(&font1);
pDC->TextOut(10000,-650,"(百次)");
pDC->TextOut(-700,4400,"误差");	
pDC->SetTextColor(RGB(0,255,0));
pDC->TextOut(6230,5200,"泛化:"); 
pDC->SelectObject(&pen6);
pDC->MoveTo(7200,5000);
pDC->LineTo(8000,5000);
pDC->SetTextColor(RGB(166,69,212));
pDC->TextOut(3120,5200,"训练:");
pDC->SelectObject(&pen5);
pDC->MoveTo(4200,5000);
pDC->LineTo(5000,5000);

	}








void CBPnetDlg::input_Pwork(int m)
{  
	int i;
   for(i=0;i<IN1;i++)
   {	
	Pwork[i]=Work_Data[m].input[i];
   }

}





void CBPnetDlg::input_Twork(int m)
{
	for (int k=0;k<ON;k++)
	{
	Twork[k]=Work_Data[m].teach[k];


	}

}

void CBPnetDlg::clear1()
{
	CPaintDC dc(this);
    pWnd = GetDlgItem(IDC_EDIT3);
	
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect rect;
	pWnd-> GetClientRect(rect);
	pDC->SelectObject(&pen4);
	pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));


}

void CBPnetDlg::clear2()
{
	CPaintDC dc(this);
    pWnd = GetDlgItem(IDC_EDIT4);
	
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect rect;
	pWnd-> GetClientRect(rect);
	pDC->SelectObject(&pen4);
	pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));

}

void CBPnetDlg::clear3()
{
	 CPaintDC dc(this);
     pWnd = GetDlgItem(IDC_EDIT5);
     pDC = pWnd->GetDC();
     pWnd->Invalidate();
     pWnd->UpdateWindow();
	 CRect rect;
	 pWnd-> GetClientRect(rect);
	 pDC->SelectObject(&pen4);
	 pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));


}

void CBPnetDlg::clear4()
{
	CPaintDC dc(this);
    pWnd = GetDlgItem(IDC_EDIT6);
	
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect rect;
	pWnd-> GetClientRect(rect);
	pDC->SelectObject(&pen4);
	pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));


}





void CBPnetDlg::OnDelete() 
{
	
	flagerrpicture=FALSE;
	flaghand1=TRUE;
	flaghand2=FALSE;
	flaghand3=FALSE;
	flaghand4=FALSE;

	flaghand6=FALSE;

   	
	 buttonflag1=FALSE;
	 buttonflag2=FALSE;
	 buttonflag3=FALSE;
	 buttonflag4=FALSE;
	 buttonflag5=FALSE;
	 Flagpicture=0;
	 flagdynamic=FALSE;
	 flag=0;
	 f1=0;	 
	 study=0;
	 KillTimer(1);
	 Invalidate();

	
}




void CBPnetDlg::dynamicpicture1()
{    
	
    pWnd = GetDlgItem(IDC_EDIT3);
	
	pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->SetTextColor(RGB(157,31,125));
	pDC->TextOut(0,0,"输入层至隐层权值:");
	

	CString   str[10][10];

	for(int i=0;i<HN;i++)
	{
		for(int j=0;j<IN1;j++)
			
		{	str[i][j].Format("%.2f",W[i][j]);
     
            pDC->TextOut(i*40,20+20*j,str[i][j]);
        }			

	}
           pDC->TextOut(140,120,"训练已完成...");
}



void CBPnetDlg::dynamicpicture2()
{

	    pWnd = GetDlgItem(IDC_EDIT5);

	    pDC = pWnd->GetDC();
        pWnd->Invalidate();
	    pWnd->UpdateWindow();
		pDC->SetTextColor(RGB(157,31,125));
	    pDC->TextOut(0,0,"隐层阈值:");
	    CString str[10];
	    for(int k=0;k<HN;k++)
		{
		str[k].Format("%.2f",YU_HN[k]);
		pDC->TextOut(0,20+20*k,str[k]);

		}
		pDC->TextOut(140,120,"训练已完成...");

}

void CBPnetDlg::dynamicpicture3()
{

    pWnd = GetDlgItem(IDC_EDIT4);
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	pDC->SetTextColor(RGB(157,31,125));
	pDC->TextOut(0,0,"隐层至输出层权值:");
	
	CString   str[10][10];
	for(int i=0;i<ON;i++)
	{
		for(int j=0;j<HN;j++)
		{
			str[i][j].Format("%.2f",V[i][j]);
			pDC->TextOut(i*40,20+20*j,str[i][j]);
		}
	}
	pDC->TextOut(140,120,"训练已完成...");

}

void CBPnetDlg::dynamicpicture4()
{
	 pWnd = GetDlgItem(IDC_EDIT6);
     pDC = pWnd->GetDC();
     pWnd->Invalidate();
     pWnd->UpdateWindow();
	 pDC->SetTextColor(RGB(157,31,125));
	 pDC->TextOut(0,0,"输出层阈值:");
	 CString str[10];
	  for(int k=0;k<ON;k++)
	  {
		str[k].Format("%.2f",YU_ON[k]);
		pDC->TextOut(0,20+20*k,str[k]);

	  }
	pDC->TextOut(140,120,"训练已完成...");

}



void CBPnetDlg::handpicture1()
{

    pWnd = GetDlgItem(IDC_HAND1);
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
		pWnd-> GetClientRect(&rect);
		pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
}

void CBPnetDlg::handpicture2()
{
    pWnd = GetDlgItem(IDC_HAND2);
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
		pWnd-> GetClientRect(&rect);
			pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

}

void CBPnetDlg::handpicture3()
{
	CWnd* pWnd = GetDlgItem(IDC_HAND3);
    CDC* pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
		pWnd-> GetClientRect(&rect);
			pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

}

void CBPnetDlg::handpicture4()
{
    pWnd = GetDlgItem(IDC_HAND4);
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
		pWnd-> GetClientRect(&rect);
			pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

}



 void CBPnetDlg::handpicture6()
 {
     pWnd = GetDlgItem(IDC_HAND6);
     pDC = pWnd->GetDC();
     pWnd->Invalidate();
 	 pWnd->UpdateWindow();
 
 	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

 	BITMAP bmp;
 	bitmap.GetBitmap(&bmp);
 
 	CDC dcCompatible;
 	dcCompatible.CreateCompatibleDC(pDC);
 
	dcCompatible.SelectObject(&bitmap);
 
 	CRect rect;
 		pWnd-> GetClientRect(&rect);
 			pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
 
}

void CBPnetDlg::handpicture7()
{

    pWnd = GetDlgItem(IDC_HAND7);
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();

	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP4);

	BITMAP bmp;
	bitmap.GetBitmap(&bmp);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

	dcCompatible.SelectObject(&bitmap);

	CRect rect;
		pWnd-> GetClientRect(&rect);
			pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
		0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
}

void CBPnetDlg::errpicture()
{
		CPaintDC dc(this);
	    pWnd = GetDlgItem(IDC_EDIT1);
	    pDC = pWnd->GetDC();
     
	    pWnd->UpdateWindow();

	   CRect  rectClient;
	   pWnd->GetClientRect(rectClient);
	   pDC->SetMapMode(MM_ISOTROPIC);
	   pDC->SetWindowExt(12500,1000);
	   int orgh=rectClient.Width()/9;
	   int orgz=4*rectClient.Height()/5;
       pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
	   pDC->SetViewportOrg(orgh,orgz);
	   pDC->SelectObject(&pen5);
	
    
      int x=0; 
      int y=4000;
	
      if(cerror[study]>=0.1)
	  {
		  
          for(int i=2;i<=study;i++)
		  {
			  cerror[study]=0.1;
	   
	          pDC->MoveTo(x,y);
	  
	   
	         pDC->LineTo(i*5,4000);
	   
	         x=i*5;
	        y=4000;
		  }
	  }

	  else
	  {

            for(int i=2;i<=study;i++)
			{
	  
	         pDC->MoveTo(x,y);
	         pDC->LineTo(i*5,cerror[i]*40000);
	         x=i*5;
	         y=cerror[i]*40000;
	  
			}
	
	

	
	  }

	CString str,str1;


        //////////////////////////即时误差和学习次出输出
    str.Format("%.8f",cerror[study]);
    str1.Format("%d",study);
	pDC->SelectObject(font1);
    pDC->SetTextColor(RGB(255,0,0));
    pDC->TextOut(600,4400,str);
	pDC->SetTextColor(RGB(0,255,0));
   
	pDC->TextOut(7100,-650,"已训练:");
	pDC->TextOut(8200,-650,str1);
	pDC->TextOut(9000,-650,"次");
	

}












void CBPnetDlg::H_I_Owork()
{
double sigma;
int i,j;
     for (j=0;j<HN;j++)
	 {
        sigma=0.0;
          	for (i=0;i<IN1;i++)
			{
		          sigma+=W[j][i]*Pwork[i];//求隐层内积
			}		
               Xwork[j]=sigma - YU_HN[j];//求隐层净输入
            Hwork[j]=1.0/(1.0+exp(-Xwork[j]));//求隐层输出 siglon算法
			int a=0;
 
	 }
}

void CBPnetDlg::O_I_Owork()
{
		double sigma;
   for (int k=0;k<ON;k++)
   {
 sigma=0.0;
        for (int j=0;j<HN;j++)
		{
 sigma+=V[k][j]*Hwork[j];//求输出层内积
 
		}
		
Ywork[k]=sigma-YU_ON[k]; //求输出层净输入
Owork[k]=1.0/(1.0+exp(-Ywork[k]));//求输出层输出

   }

}

void CBPnetDlg::Err_O_Hwork(int m)
{
	double ae[10];

   for (int k=0;k<ON;k++)
   {

     fanhua[m].T[k]=Twork[k];
     fanhua[m].O[k]=Owork[k];
     Twork[k]=Twork[k]*(trainteachmax[k]-trainteachmin[k])+trainteachmin[k];
     Owork[k]=Owork[k]*(trainteachmax[k]-trainteachmin[k])+trainteachmin[k];
     abs_err[k]=Twork[k]-Owork[k];


 
     ae[k]=fabs(abs_err[k]);
     ae[k]=abs_err[k]/T[k];
     ae[k]=fabs(ae[k]);
  
	 errwork[m]+=ae[k];
	
   }


  	errwork[m]=errwork[m]/ON;



}

void CBPnetDlg::errworkpicture()
{

	
	  	CPaintDC dc(this);
	    pWnd = GetDlgItem(IDC_EDIT1);
        pDC = pWnd->GetDC();
     
	    pWnd->UpdateWindow();

	    CRect  rectClient;
	    pWnd->GetClientRect(rectClient);
	    pDC->SetMapMode(MM_ISOTROPIC);
        pDC->SetWindowExt(12500,1000);
	    int orgh=rectClient.Width()/9;
	    int orgz=4*rectClient.Height()/5;
        pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
     	pDC->SetViewportOrg(orgh,orgz);
	    pDC->SelectObject(&pen6);
	
    
      int x=0;
      int y=4000;
	
      if(cerrorwork[study]>=0.1)
	  {
		  
                 for(int i=2;i<=study;i++)
				 {
					 cerrorwork[study]=0.1;
	   
	                 pDC->MoveTo(x,y);
	  
	   
	                 pDC->LineTo(i*5,4000);
	   
	                 x=i*5;
	                 y=4000;
				 }
	  }

	  else
	  {

                   for(int i=2;i<=study;i++)
				   {
	  
	   pDC->MoveTo(x,y);
	   pDC->LineTo(i*5,cerrorwork[i]*40000);
	   x=i*5;
	   y=cerrorwork[i]*40000;
	   
				   }
 
	  }


	  	CString str;


        //////////////////////////即时误差和学习次出输出
    
        str.Format("%.8f",cerrorwork[study]);
    	pDC->SelectObject(font1);
        pDC->SetTextColor(RGB(0,255,0));
        pDC->TextOut(-740,5000,"泛化误差");
	    pDC->TextOut(600,5000,str);

	
}





void CBPnetDlg::lastpicture()
{
		CPaintDC dc(this);
	    pWnd = GetDlgItem(IDC_EDIT1);
	    pDC = pWnd->GetDC();
     
	    pWnd->UpdateWindow();

	    CRect  rectClient;
	    pWnd->GetClientRect(rectClient);


	    pDC->SetMapMode(MM_ISOTROPIC);
     	pDC->SetWindowExt(250,120);
     	int orgh=rectClient.Width()/9;
	    int orgz=4*rectClient.Height()/5;
        pDC->SetViewportExt(rectClient.right,-rectClient.bottom);
    	pDC->SetViewportOrg(orgh,orgz);
  
	
		CPen penZ;
	    penZ.CreatePen(PS_SOLID,0.5,RGB(0,0,0));
    	pDC->SelectObject(&penZ);
     	pDC->MoveTo(0,0);
        pDC->LineTo(210,0);
		pDC->LineTo(207,3);
        pDC->MoveTo(210,0);
        pDC->LineTo(207,-3);


		pDC->MoveTo(0,0);
		pDC->LineTo(0,100);
		pDC->LineTo(-3,97);
		pDC->MoveTo(0,100);
		pDC->LineTo(3,97);
		
		
		CFont fontp;
		fontp.CreatePointFont(50,"宋体",NULL);
		pDC->SetTextColor(RGB(0,0,0));
		pDC->SelectObject(&fontp);
		pDC->TextOut(30,100,"输出值:");
    	pDC->TextOut(150,100,"期望值:");
		pDC->TextOut(-20,108,"输出");
		pDC->TextOut(200,-11,"样本");
		for(int s=0;s<=10;s++)
		{
			CString str1;
			str1.Format("%d",s*10);
			pDC->TextOut(s*20,-4,str1);
		}
		for(int a=1;a<=10;a++)
		{
			CString str2;
			str2.Format("%.1f",(float)a/10);
			pDC->TextOut(-12,a*10,str2);
		}
		int k=1;

    

	CPen penT;


	penT.CreatePen(PS_SOLID,0.1,RGB(166,69,212));
	pDC->SelectObject(&penT);
	pDC->MoveTo(174,97);
	pDC->LineTo(189,97);
	
	
    pDC->MoveTo(0,fanhua[0].T[0]);

		for(int i=0;i<N;i++)
		{
			for(int j=0;j<ON;j++)
			{
				pDC->LineTo(++k,fanhua[i].T[j]*100);
			
			}

		}


            CPen penO;
			penO.CreatePen(PS_DOT,0.1,RGB(0,255,0));
			pDC->SelectObject(&penO);
			pDC->MoveTo(54,97);
	        pDC->LineTo(69,97);
		
			int l=1;

	    	pDC->MoveTo(0,fanhua[0].O[0]);
			pDC->LineTo(0,fanhua[0].O[0]);

		  for(i=0;i<N;i++)
		  {
			for(int j=0;j<ON;j++)
			{
				pDC->LineTo(++l,fanhua[i].O[j]*100);
			
			}

		  }


		
}



void CBPnetDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
	
	if(flagdynamic==TRUE)
	{
		



	if((point.x>=576)&&(point.x<=1163)&&(point.y>=100)&&(point.y<=426))
	{   
		CPaintDC dc(this);
     CWnd* pWnd = GetDlgItem(IDC_EDIT1);
	
	CDC* pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect rect;
	pWnd-> GetClientRect(rect);
	pDC->SelectObject(&pen4);
	pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));
	flaglast=TRUE;
            flaglast=FALSE;
			lastpicture();
			

	}
	else
	{
	 CPaintDC dc(this);
      pWnd = GetDlgItem(IDC_EDIT1);
	
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
	pWnd->UpdateWindow();
	CRect rect;
	pWnd-> GetClientRect(rect);
	pDC->SelectObject(&pen4);
	pDC->Rectangle(CRect(rect.left,rect.top,rect.right,rect.bottom));
	flaglast=TRUE;

	picture();
	errworkpicture();
    errpicture();


	}
	}

	CDialog::OnLButtonDown(nFlags, point);
}

⌨️ 快捷键说明

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