📄 bpnetdlg.cpp
字号:
}
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 + -