NNBPDlg.cpp
上传用户:guanx8y8
上传日期:2007-07-30
资源大小:326k
文件大小:44k
- // NNBPDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "NNBP.h"
- #include "NNBPDlg.h"
- //***************************************************************************
- // Add the user-defined header file
- #include "AllDef.h"
- //***************************************************************************
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- CButtonST m_btnHelpDocument;
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- virtual BOOL OnInitDialog();
- afx_msg void OnHelpdocument();
- afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- DDX_Control(pDX, IDC_HELPDOCUMENT, m_btnHelpDocument);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- ON_BN_CLICKED(IDC_HELPDOCUMENT, OnHelpdocument)
- ON_WM_LBUTTONDOWN()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CNNBPDlg dialog
- CNNBPDlg::CNNBPDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CNNBPDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CNNBPDlg)
- m_strDemoDataInput = _T("");
- m_strDemoSaveResult = _T("");
- m_nInputLayerNumber = 0;
- m_nHideLayerNumber = 0;
- m_nOutputLayerNumber = 0;
- m_nComboFunc = -1;
- m_nSystemError = 0.0;
- m_nTrainTimes = 0;
- m_nSystemErrorLevel = SYSTEM_ERROR_LEVEL;
- m_nMaxTrainTimes = LOOP_MAX_TIMES;
- m_strDemoSaveNetwork = _T("");
- m_strSimuNetworkFold = _T("");
- m_strSimuDataInput = _T("");
- m_strSimuResult = _T("");
- m_nComboArithmetic = -1;
- m_nStep = INIT_STEP;
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- // Initialize the member variables
- m_bStartFlag = false;
- m_bSimulateDataFlag = false;
- m_SystemErrorNew = MAX_SYSTEM_ERROR;
- m_SystemErrorOld = MAX_SYSTEM_ERROR;
- m_hThread = NULL;
- }
- void CNNBPDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CNNBPDlg)
- DDX_Control(pDX, IDC_COMBO_ARITHMETIC, m_ctrlComboArithmetic);
- DDX_Control(pDX, IDC_COMBO_FUNC, m_ctrlComboFunc);
- DDX_Control(pDX, IDC_STATIC_TITLE, m_staticTextTitle);
- DDX_Control(pDX, IDC_STATE, m_btnState);
- DDX_Control(pDX, IDC_SIMU_RESULT_BROWSER, m_btnSimuResultBrowser);
- DDX_Control(pDX, IDC_SIMU_NETWORK_FOLD_BROWSER, m_btnSimuNetworkFoldBrowser);
- DDX_Control(pDX, IDC_SIMU_DATA_INPUT_BROWSER, m_btnSimuDataInputBrowser);
- DDX_Control(pDX, IDC_DEMO_SAVE_RESULT_BROWSER, m_btnDemoSaveResultBrowser);
- DDX_Control(pDX, IDC_DEMO_SAVE_NETWORK_BROWSER, m_btnDemoSaveNetworkBrowser);
- DDX_Control(pDX, IDC_DEMO_DATA_INPUT_BROWSER, m_btnDemoDataInputBrowser);
- DDX_Control(pDX, IDC_STOP_TRAIN, m_btnStopTrain);
- DDX_Control(pDX, IDC_EXIT, m_btnExit);
- DDX_Control(pDX, IDC_ABOUT_US, m_btnAboutUs);
- DDX_Control(pDX, IDC_BEGIN_TRAIN, m_btnBeginTrain);
- DDX_Text(pDX, IDC_DEMO_DATA_INPUT, m_strDemoDataInput);
- DDX_Text(pDX, IDC_DEMO_SAVE_RESULT, m_strDemoSaveResult);
- DDX_Text(pDX, IDC_INPUT_LAYER_NUMBER, m_nInputLayerNumber);
- DDX_Text(pDX, IDC_HIDE_LAYER_NUMBER, m_nHideLayerNumber);
- DDX_Text(pDX, IDC_OUTPUT_LAYER_NUMBER, m_nOutputLayerNumber);
- DDX_CBIndex(pDX, IDC_COMBO_FUNC, m_nComboFunc);
- DDX_Text(pDX, IDC_SYSTEM_ERROR, m_nSystemError);
- DDX_Text(pDX, IDC_TRAIN_TIMES, m_nTrainTimes);
- DDX_Text(pDX, IDC_SYSTEM_LEVEL, m_nSystemErrorLevel);
- DDX_Text(pDX, IDC_MAX_TRAIN_TIMES, m_nMaxTrainTimes);
- DDX_Text(pDX, IDC_DEMO_SAVE_NETWORK, m_strDemoSaveNetwork);
- DDX_Text(pDX, IDC_SIMU_NETWORK_FOLD, m_strSimuNetworkFold);
- DDX_Text(pDX, IDC_SIMU_DATA_INPUT, m_strSimuDataInput);
- DDX_Text(pDX, IDC_SIMU_RESULT, m_strSimuResult);
- DDX_CBIndex(pDX, IDC_COMBO_ARITHMETIC, m_nComboArithmetic);
- DDX_Text(pDX, IDC_STEP, m_nStep);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CNNBPDlg, CDialog)
- //{{AFX_MSG_MAP(CNNBPDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_EXIT, OnExit)
- ON_BN_CLICKED(IDC_ABOUTUS, OnAboutus)
- ON_WM_TIMER()
- ON_BN_CLICKED(IDC_DEMO_DATA_INPUT_BROWSER, OnDemoDataInputBrowser)
- ON_BN_CLICKED(IDC_DEMO_SAVE_NETWORK_BROWSER, OnDemoSaveNetworkBrowser)
- ON_BN_CLICKED(IDC_DEMO_SAVE_RESULT_BROWSER, OnDemoSaveResultBrowser)
- ON_BN_CLICKED(IDC_SIMU_NETWORK_FOLD_BROWSER, OnSimuNetworkFoldBrowser)
- ON_BN_CLICKED(IDC_SIMU_DATA_INPUT_BROWSER, OnSimuDataInputBrowser)
- ON_BN_CLICKED(IDC_SIMU_RESULT_BROWSER, OnSimuResultBrowser)
- ON_BN_CLICKED(IDC_BEGIN_TRAIN, OnBeginTrain)
- ON_BN_CLICKED(IDC_STATE, OnState)
- ON_BN_CLICKED(IDC_STOP_TRAIN, OnStopTrain)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CNNBPDlg message handlers
- BOOL CNNBPDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // Add "About..." menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
- // TODO: Add extra initialization here
- // Set the Graphic Title
- {
- m_staticTextTitle.Initialise( RGB(160,180,220) );
- m_staticTextTitle.SetAlignCentre();
- m_staticTextTitle.SetDrawShadow();
- CFont font;
- font.CreateFont(36,0,0,0,FW_BOLD,0,0,0,GB2312_CHARSET,0,0,0,0,TEXT("黑体"));
- LOGFONT logfont;
- font.GetLogFont(&logfont);
- m_staticTextTitle.SetMainTextLogFont(logfont);
- }
-
- // "浏览"按钮的资源的装入
- // For Demo Data Input Browser Button
- m_btnDemoDataInputBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnDemoDataInputBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnDemoDataInputBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnDemoDataInputBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnDemoDataInputBrowser.AddToolTip(TEXT("浏览"));
- // For Demo Save Network Browser Button
- m_btnDemoSaveNetworkBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnDemoSaveNetworkBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnDemoSaveNetworkBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnDemoSaveNetworkBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnDemoSaveNetworkBrowser.AddToolTip(TEXT("浏览"));
- // For Demo Save Result Browser Button
- m_btnDemoSaveResultBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnDemoSaveResultBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnDemoSaveResultBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnDemoSaveResultBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnDemoSaveResultBrowser.AddToolTip(TEXT("浏览"));
- // For Simu Data Input Browser Button
- m_btnSimuDataInputBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnSimuDataInputBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnSimuDataInputBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnSimuDataInputBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnSimuDataInputBrowser.AddToolTip(TEXT("浏览"));
- // For Simu Network Fold Browser Button
- m_btnSimuNetworkFoldBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnSimuNetworkFoldBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnSimuNetworkFoldBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnSimuNetworkFoldBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnSimuNetworkFoldBrowser.AddToolTip(TEXT("浏览"));
- // For Simu Result Browser Button
- m_btnSimuResultBrowser.SubclassDlgItem (IDI_FILEOPEN,this);
- m_btnSimuResultBrowser.SetIcon ( IDI_FILEOPEN);
- m_btnSimuResultBrowser.SetActiveBgColor (RGB(160,180,220));
- m_btnSimuResultBrowser.SetInactiveBgColor (RGB(160,180,220));
- m_btnSimuResultBrowser.AddToolTip(TEXT("浏览"));
- // "开始训练"按钮的资源的装入
- m_btnBeginTrain.SubclassDlgItem ( IDI_START,this);
- m_btnBeginTrain.SetIcon ( IDI_START);
- m_btnBeginTrain.SetActiveBgColor (RGB(160,180,220));
- m_btnBeginTrain.SetInactiveBgColor (RGB(160,180,220));
- m_btnBeginTrain.AddToolTip(TEXT("开始训练"));
- // "停止训练"按钮的资源的装入
- m_btnStopTrain.SubclassDlgItem ( IDI_STOP,this);
- m_btnStopTrain.SetIcon ( IDI_STOP);
- m_btnStopTrain.SetActiveBgColor (RGB(160,180,220));
- m_btnStopTrain.SetInactiveBgColor (RGB(160,180,220));
- m_btnStopTrain.AddToolTip(TEXT("停止训练"));
- // "显示程序状态"按钮的资源的装入
- m_btnState.SubclassDlgItem ( IDI_TRAINING,this);
- m_btnState.SubclassDlgItem ( IDI_SIMULATOR,this);
- m_btnState.SetIcon ( IDI_TRAINING);
- m_btnState.SetActiveBgColor (RGB(160,180,220));
- m_btnState.SetInactiveBgColor (RGB(160,180,220));
- m_btnState.AddToolTip (TEXT("样本训练状态"));
- // "关于我们"按钮的资源的装入
- m_btnAboutUs.SubclassDlgItem (IDI_ABOUT,this);
- m_btnAboutUs.SetIcon (IDI_ABOUT);
- m_btnAboutUs.SetActiveBgColor (RGB(160,180,220));
- m_btnAboutUs.SetInactiveBgColor (RGB(160,180,220));
- m_btnAboutUs.AddToolTip (TEXT("关于我们"));
- // "退出程序"按钮的资源的装入--->Yes
- m_btnExit.SubclassDlgItem (IDI_EXIT,this);
- m_btnExit.SetIcon (IDI_EXIT);
- m_btnExit.SetActiveBgColor (RGB(160,180,220));
- m_btnExit.SetInactiveBgColor (RGB(160,180,220));
- m_btnExit.AddToolTip (TEXT("退出程序"));
- /////////////////////////////////////////////////////////////////////////
- // 初始化对话框上各控件的状态
- //
- /////////////////////////////////////////////////////////////////////
- // Disabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT_BROWSER)->EnableWindow(FALSE);
- /////////////////////////////////////////////////////////////////////
- // Enabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SYSTEM_LEVEL)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_MAX_TRAIN_TIMES)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_STEP)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_INPUT_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_HIDE_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_OUTPUT_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_TRAIN)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_FUNC)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT_BROWSER)->EnableWindow(TRUE);
- //
- // End of initializing the state of the controls on the CNNBPDlg
- /////////////////////////////////////////////////////////////////////////
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CNNBPDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CNNBPDlg::OnPaint()
- {
- // Draw the title label
- m_staticTextTitle.SetMainTextColour (RGB(0,128,192));
- m_staticTextTitle.Display (TEXT("神经网络仿真工具"),TEXT(""),0);
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CNNBPDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void CNNBPDlg::OnExit()
- {
- // TODO: Add your control notification handler code here
- DWORD dwExitCode = 0;
- if(::GetExitCodeThread (m_hThread, &dwExitCode))
- {
- if(dwExitCode == STILL_ACTIVE)
- {
- ::TerminateThread (m_hThread, (DWORD)0);
- }
- CloseHandle (m_hThread);
- m_hThread = NULL;
- }
- CDialog::OnOK ();
-
- }
- void CNNBPDlg::OnAboutus()
- {
- // TODO: Add your control notification handler code here
- CAboutDlg dlg;
- if(dlg.DoModal () == IDOK)
- return;
-
- }
- void CNNBPDlg::OnTimer(UINT nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
-
- CDialog::OnTimer(nIDEvent);
- }
- void CNNBPDlg::OnDemoDataInputBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the demo data file to load the data
- CFileDialog dlg(TRUE,
- lpszDefExt,
- NULL,
- OFN_READONLY |
- OFN_FILEMUSTEXIST |
- OFN_PATHMUSTEXIST,
- szFilter,
- this);
- if(dlg.DoModal () == IDOK)
- {
- m_strDemoDataInput = dlg.GetPathName ();
-
- HWND hWnd = ::GetDlgItem (this->m_hWnd,IDC_DEMO_DATA_INPUT);
- ::SetWindowText (hWnd,m_strDemoDataInput);
- }
- else
- {
- return;
- }
-
- }
- void CNNBPDlg::OnDemoSaveNetworkBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the demo data file to save the network
- CFileDialog dlg(FALSE,
- lpszDefExt,
- NULL,
- OFN_HIDEREADONLY |
- OFN_CREATEPROMPT |
- OFN_OVERWRITEPROMPT,
- szFilter,
- this );
- if(dlg.DoModal ()==IDOK)
- {
- m_strDemoSaveNetwork = dlg.GetPathName ();
- HWND hWnd = ::GetDlgItem (this->m_hWnd,IDC_DEMO_SAVE_NETWORK);
- ::SetWindowText (hWnd,m_strDemoSaveNetwork);
- }
- else
- {
- return;
- }
- }
- void CNNBPDlg::OnDemoSaveResultBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the demo data file to save the result
- CFileDialog dlg(FALSE,
- lpszDefExt,
- NULL,
- OFN_HIDEREADONLY |
- OFN_CREATEPROMPT |
- OFN_OVERWRITEPROMPT,
- szFilter,
- this);
- if(dlg.DoModal ()==IDOK)
- {
- m_strDemoSaveResult = dlg.GetPathName ();
-
- HWND hWnd = ::GetDlgItem (this->m_hWnd , IDC_DEMO_SAVE_RESULT);
- ::SetWindowText (hWnd, m_strDemoSaveResult);
- }
- else
- {
- return;
- }
- }
- void CNNBPDlg::OnSimuNetworkFoldBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the network data file
- CFileDialog dlg(TRUE,
- lpszDefExt,
- NULL,
- OFN_READONLY |
- OFN_FILEMUSTEXIST |
- OFN_PATHMUSTEXIST,
- szFilter,
- this);
- if(dlg.DoModal ()==IDOK)
- {
- m_strSimuNetworkFold = dlg.GetPathName ();
- HWND hWnd = ::GetDlgItem (this->m_hWnd ,IDC_SIMU_NETWORK_FOLD);
- ::SetWindowText (hWnd, m_strSimuNetworkFold);
-
- }
- else
- {
- return;
- }
-
- }
- void CNNBPDlg::OnSimuDataInputBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the simulate data file
- CFileDialog dlg(TRUE,
- lpszDefExt,
- NULL,
- OFN_READONLY |
- OFN_FILEMUSTEXIST |
- OFN_PATHMUSTEXIST,
- szFilter,
- this);
- if(dlg.DoModal ()==IDOK)
- {
- m_strSimuDataInput = dlg.GetPathName ();
- HWND hWnd = ::GetDlgItem (this->m_hWnd ,IDC_SIMU_DATA_INPUT);
- ::SetWindowText (hWnd,m_strSimuDataInput);
-
- }
- else
- {
- return;
- }
-
- }
- void CNNBPDlg::OnSimuResultBrowser()
- {
- // TODO: Add your control notification handler code here
- static char BASED_CODE szFilter[] = TEXT("文本文件(*.txt)|*.txt|All Files (*.*)|*.*||");
- static char BASED_CODE lpszDefExt[] = TEXT("txt");
- //Create the dialog to select the demo data file
- CFileDialog dlg(FALSE,
- lpszDefExt,
- NULL,
- OFN_HIDEREADONLY |
- OFN_CREATEPROMPT |
- OFN_OVERWRITEPROMPT,
- szFilter,
- this);
- if(dlg.DoModal ()==IDOK)
- {
- m_strSimuResult = dlg.GetPathName ();
- HWND hWnd = ::GetDlgItem (this->m_hWnd ,IDC_SIMU_RESULT);
- ::SetWindowText (hWnd,m_strSimuResult);
-
- }
- else
- {
- return;
- }
-
- }
- void CNNBPDlg::OnBeginTrain()
- {
- // TODO: Add your control notification handler code here
-
- UpdateData(TRUE);
- STHREADDATA* pData = new STHREADDATA;
-
- pData->pDlg = this;
- DWORD dwExitCode = 0;
- ::GetExitCodeThread (m_hThread, &dwExitCode);
-
- if(dwExitCode == STILL_ACTIVE)
- {
- ::MessageBox (this->m_hWnd, _T("程序中的训练线程仍然在运行中!"), _T("警告:"), MB_ICONWARNING | MB_OK);
- return;
- }
- ULONG ulThreadID;
- m_hThread = ::CreateThread (NULL,
- 0,
- WorkThreadProc,
- pData,
- CREATE_SUSPENDED,
- &ulThreadID
- );
- ResumeThread (m_hThread);
-
- }
- BOOL CAboutDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- // TODO: Add extra initialization here
- // "使用说明"按钮的资源的装入
- m_btnHelpDocument.SubclassDlgItem (IDI_HELP,this);
- m_btnHelpDocument.SetIcon ( IDI_HELP);
- m_btnHelpDocument.SetActiveBgColor (RGB(160,180,220));
- m_btnHelpDocument.SetInactiveBgColor (RGB(160,180,220));
- m_btnHelpDocument.AddToolTip (TEXT("使用说明"));
-
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
- }
- void CNNBPDlg::OnState()
- {
- // TODO: Add your control notification handler code here
- /////////////////////////////////////////////////////////////////////////
- // Change the button flag
- m_bSimulateDataFlag = !m_bSimulateDataFlag;
- if(m_bSimulateDataFlag)
- {
- // 程序处在数据仿真状态
- m_btnState.SetIcon (IDI_SIMULATOR);
- m_btnState.AddToolTip (TEXT("数据仿真状态"));
- // the BeginTrain Button State
- m_btnBeginTrain.AddToolTip(TEXT("开始仿真"));
- /////////////////////////////////////////////////////////////////////
- // Disabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SYSTEM_LEVEL)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_MAX_TRAIN_TIMES)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_STEP)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_INPUT_LAYER_NUMBER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_HIDE_LAYER_NUMBER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_OUTPUT_LAYER_NUMBER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_TRAIN)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_FUNC)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_STOP_TRAIN)->EnableWindow(FALSE);
-
- /////////////////////////////////////////////////////////////////////
- // Enabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT_BROWSER)->EnableWindow(TRUE);
- }
- else
- {
- // 程序处在样本训练状态
- m_btnState.SetIcon (IDI_TRAINING);
- m_btnState.AddToolTip (TEXT("样本训练状态"));
- // the BeginTrain Button State
- m_btnBeginTrain.AddToolTip(TEXT("开始训练"));
- /////////////////////////////////////////////////////////////////////
- // Disabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_NETWORK_FOLD_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_DATA_INPUT_BROWSER)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT)->EnableWindow(FALSE);
- (CNNBPDlg *)GetDlgItem(IDC_SIMU_RESULT_BROWSER)->EnableWindow(FALSE);
- /////////////////////////////////////////////////////////////////////
- // Enabled the following controls
- /////////////////////////////////////////////////////////////////////
- (CNNBPDlg *)GetDlgItem(IDC_SYSTEM_LEVEL)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_MAX_TRAIN_TIMES)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_STEP)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_INPUT_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_HIDE_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_OUTPUT_LAYER_NUMBER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_TRAIN)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_COMBO_FUNC)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_DATA_INPUT_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_NETWORK_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_DEMO_SAVE_RESULT_BROWSER)->EnableWindow(TRUE);
- (CNNBPDlg *)GetDlgItem(IDC_STOP_TRAIN)->EnableWindow(TRUE);
- }
-
- }
- bool CNNBPDlg::TrainingDemo()
- {
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(FALSE);
- if(m_bSimulateDataFlag)
- {
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_nInputLayerNumber <= 0)
- {
- ::MessageBox (this->m_hWnd, _T("输入层数目必须为大于等于1的正整数!"), _T(":("), MB_OK);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_nHideLayerNumber <= 0)
- {
- ::MessageBox (this->m_hWnd, _T("隐含层数目必须为大于等于1的正整数!"), _T(":("), MB_OK);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_nOutputLayerNumber <= 0)
- {
- ::MessageBox (this->m_hWnd, _T("输出层数目必须为大于等于1的正整数!"), _T(":("), MB_OK | MB_ICONINFORMATION);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_nComboArithmetic == -1)
- {
- ::MessageBox (this->m_hWnd, _T("你还没有选取用来训练的算法!"), _T(":("), MB_OK | MB_ICONINFORMATION);
-
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_nComboFunc == -1)
- {
- ::MessageBox (this->m_hWnd, _T("你还没有选取用来训练的激活函数!"), _T(":("), MB_OK | MB_ICONINFORMATION);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strDemoDataInput.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取用来训练的样本数据文件的装载路径!"), _T(":("), MB_OK | MB_ICONINFORMATION);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strDemoSaveNetwork.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取最终模拟输出网络参数的文件的存放路径!"), _T(":("), MB_OK | MB_ICONINFORMATION);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strDemoSaveResult.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取最终模拟输出结果的文件的存放路径!"), _T(":("), MB_OK | MB_ICONINFORMATION);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- // 装载资源
- m_matrixDemoDataInput.LoadDataFromFile (m_strDemoDataInput);
- if((m_nInputLayerNumber + m_nOutputLayerNumber) != m_matrixDemoDataInput.GetMatrixColNumber () )
- {
- ::MessageBox (this->m_hWnd, _T("所输入的输入层和输出层数目之和与被读取文件中的数目不相符!"), _T("错误!"), MB_OK | MB_ICONERROR);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return FALSE;
- }
- // 第一次前向计算初始化
- ForwardCalculateInit();
- // 反复反馈运算
- bool bSuccess = DemoDataTrainRepeat();
- if(bSuccess) // Successful!
- {
-
- //////////////////////////////////////////////////////////////////////////////
- // 定义存储矩阵格式 //
- //////////////////////////////////////////////////////////////////////////////
- if(!(m_strDemoSaveNetwork.IsEmpty ()))
- {
- CString strDemoInputLayerNumber = _T("## 样本的输入层的数目: ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strDemoInputLayerNumber);
- CString strInputLayerNumber;
- strInputLayerNumber.Format ("%u", m_nInputLayerNumber);
- SaveConstantStringToFile(m_strDemoSaveNetwork, strInputLayerNumber);
-
- CString strDemoHideLayerNumber = _T("n## 样本的隐含层的数目: ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strDemoHideLayerNumber);
- CString strHideLayerNumber;
- strHideLayerNumber.Format ("%u", m_nHideLayerNumber);
- SaveConstantStringToFile(m_strDemoSaveNetwork, strHideLayerNumber);
- CString strDemoOutputLayerNumber = _T("n## 样本的输出层的数目: ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strDemoOutputLayerNumber);
- CString strOutputLayerNumber;
- strOutputLayerNumber.Format ("%u", m_nOutputLayerNumber);
- SaveConstantStringToFile(m_strDemoSaveNetwork, strOutputLayerNumber);
- CString strSelectAlgorithm = _T("n## 训练网络所采用的神经网络算法: ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strSelectAlgorithm);
- CString strComboArithmetic;
- strComboArithmetic.Format ("%d", m_nComboArithmetic);
- SaveConstantStringToFile(m_strDemoSaveNetwork, strComboArithmetic);
- CString strSelectFunction = _T("n## 网络中使用的函数的索引值: ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strSelectFunction);
- CString strComboFunc;
- strComboFunc.Format ("%d", m_nComboFunc);
- SaveConstantStringToFile(m_strDemoSaveNetwork, strComboFunc);
- CString strSeparator = _T("n## 输入层到隐含层的权值矩阵 ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork, strSeparator);
-
- // 存储模拟过的输入到隐含层的权值矩阵
- m_matrixInputToHideWeightValue.SaveDataToFile (m_strDemoSaveNetwork);
- strSeparator = _T("n## 隐含层的阀值矩阵 ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork,strSeparator);
- // 存储模拟过的隐含层的阀值矩阵
- m_matrixHideLayerValveValue.SaveDataToFile (m_strDemoSaveNetwork);
- strSeparator = _T("n## 隐含层到输出层的权值矩阵 ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork,strSeparator);
- // 存储模拟过的隐含层到输出层的权值矩阵
- m_matrixHideToOutputWeightValue.SaveDataToFile (m_strDemoSaveNetwork);
- strSeparator = _T("n## 输出层的阀值矩阵 ##n");
- SaveConstantStringToFile(m_strDemoSaveNetwork,strSeparator);
- // 存储模拟过的输出层的阀值矩阵
- m_matrixOutputLayerValveValue.SaveDataToFile (m_strDemoSaveNetwork);
- }
- // 存储模拟过输出层的输出值矩阵
- if(!(m_strDemoSaveResult.IsEmpty ()))
- {
- (m_matrixOutputLayerOutput.Transpose()).SaveDataToFile (m_strDemoSaveResult);
- }
- // 释放全局变量所占的内存
- m_matrixDemoDataInput.InitializeZero ();
- m_matrixInputLayerValue.InitializeZero ();
- m_matrixInputToHideWeightValue.InitializeZero ();
- m_matrixHideLayerValveValue.InitializeZero ();
- m_matrixHideLayerOutput.InitializeZero ();
-
- m_matrixHideToOutputWeightValue.InitializeZero ();
- m_matrixOutputLayerValveValue.InitializeZero ();
-
- m_matrixOutputLayerOutput.InitializeZero ();
- // ReInitialize the global value
- m_nInputLayerNumber = 0;
- m_nHideLayerNumber = 0;
- m_nOutputLayerNumber = 0;
- m_nComboFunc = -1;
- m_nComboArithmetic = -1;
- m_nSystemError = 0;
- m_nTrainTimes = 0;
- m_nSystemErrorLevel = SYSTEM_ERROR_LEVEL;
- m_nMaxTrainTimes = LOOP_MAX_TIMES;
- m_SystemErrorNew = MAX_SYSTEM_ERROR;
- m_SystemErrorOld = MAX_SYSTEM_ERROR;
- m_nStep = INIT_STEP;
-
- m_strDemoDataInput = TEXT("");
- m_strDemoSaveNetwork = TEXT("");
- m_strDemoSaveResult = TEXT("");
- ::MessageBox (this->m_hWnd, _T("任务完成了!"), _T("恭喜!"), MB_OK);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- //*******************************************************************
- // handle the UI
- //
- CString strSystemErrorLevel;
- strSystemErrorLevel.Format ("%lf", m_nSystemErrorLevel);
- HWND hWnd = ::GetDlgItem (this->m_hWnd, IDC_SYSTEM_LEVEL);
- ::SetWindowText (hWnd, (LPCTSTR)strSystemErrorLevel);
- CString strMaxTrainTimes;
- strMaxTrainTimes.Format ("%u", m_nMaxTrainTimes);
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_MAX_TRAIN_TIMES);
- ::SetWindowText (hWnd, (LPCTSTR)strMaxTrainTimes);
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_INPUT_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_HIDE_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_OUTPUT_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- m_ctrlComboArithmetic.SetCurSel (-1);
- m_ctrlComboFunc.SetCurSel (-1);
-
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_DATA_INPUT);
- ::SetWindowText (hWnd, _T(""));
-
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_SAVE_NETWORK);
- ::SetWindowText (hWnd, _T(""));
-
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_SAVE_RESULT);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SYSTEM_ERROR);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_TRAIN_TIMES);
- ::SetWindowText (hWnd, _T("0"));
- }
- else // Fail to accomplish the task
- {
- // 释放全局变量所占的内存
- m_matrixDemoDataInput.InitializeZero ();
- m_matrixInputLayerValue.InitializeZero ();
- m_matrixInputToHideWeightValue.InitializeZero ();
- m_matrixHideLayerValveValue.InitializeZero ();
- m_matrixHideLayerOutput.InitializeZero ();
-
- m_matrixHideToOutputWeightValue.InitializeZero ();
- m_matrixOutputLayerValveValue.InitializeZero ();
-
- m_matrixOutputLayerOutput.InitializeZero ();
- // ReInitialize the global value
- m_nInputLayerNumber = 0;
- m_nHideLayerNumber = 0;
- m_nOutputLayerNumber = 0;
- m_nComboFunc = -1;
- m_nComboArithmetic = -1;
- m_nSystemError = 0;
- m_nTrainTimes = 0;
- m_nSystemErrorLevel = SYSTEM_ERROR_LEVEL;
- m_nMaxTrainTimes = LOOP_MAX_TIMES;
- m_SystemErrorNew = MAX_SYSTEM_ERROR;
- m_SystemErrorOld = MAX_SYSTEM_ERROR;
- m_nStep = INIT_STEP;
-
- m_strDemoDataInput = TEXT("");
- m_strDemoSaveNetwork = TEXT("");
- m_strDemoSaveResult = TEXT("");
- ::MessageBox (this->m_hWnd, _T("很抱歉,我未能完成您交给我的任务."), _T(":("),MB_OK | MB_ICONERROR);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- //*******************************************************************
- // handle the UI
- //
- CString strSystemErrorLevel;
- strSystemErrorLevel.Format ("%lf", m_nSystemErrorLevel);
- HWND hWnd = ::GetDlgItem (this->m_hWnd, IDC_SYSTEM_LEVEL);
- ::SetWindowText (hWnd, (LPCTSTR)strSystemErrorLevel);
- CString strMaxTrainTimes;
- strMaxTrainTimes.Format ("%u", m_nMaxTrainTimes);
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_MAX_TRAIN_TIMES);
- ::SetWindowText (hWnd, (LPCTSTR)strMaxTrainTimes);
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_INPUT_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_HIDE_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_OUTPUT_LAYER_NUMBER);
- ::SetWindowText (hWnd, _T("0"));
- m_ctrlComboArithmetic.SetCurSel (-1);
- m_ctrlComboFunc.SetCurSel (-1);
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_DATA_INPUT);
- ::SetWindowText (hWnd, _T(""));
-
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_SAVE_NETWORK);
- ::SetWindowText (hWnd, _T(""));
-
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_DEMO_SAVE_RESULT);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SYSTEM_ERROR);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_TRAIN_TIMES);
- ::SetWindowText (hWnd, _T("0"));
- return false;
- }
- return true;
-
- }
- bool CNNBPDlg::SimulateData()
- {
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(FALSE);
- if(!m_bSimulateDataFlag)
- {
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strSimuNetworkFold.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取提供网络参数的文件的装载路径!"), _T(":("),MB_OK | MB_ICONWARNING);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strSimuDataInput.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取用来仿真的数据文件的装载路径!"), _T(":("),MB_OK | MB_ICONWARNING);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- if(m_strSimuResult.IsEmpty ())
- {
- ::MessageBox (this->m_hWnd, _T("你还没选取最终仿真结果的数据文件的存放路径!"), _T(":("),MB_OK | MB_ICONWARNING);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- return false;
- }
- // 装载网络参数文件
- m_matrixSimuNetwork.LoadDataFromFileSpecial(m_strSimuNetworkFold,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerValveValue,
- m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_nComboArithmetic,
- m_nComboFunc);
-
- // 装载仿真数据文件
- m_matrixDemoDataInput.LoadDataFromFile (m_strSimuDataInput);
- if( m_matrixDemoDataInput.GetMatrixColNumber () != m_nInputLayerNumber )
- {
- ::MessageBox (this->m_hWnd, _T("待仿真数据文件的输入层数目与网络中的输入层数目不相等!!!"), _T("错误!"), MB_OK | MB_ICONERROR);
- // 释放全局变量所占的内存
- m_matrixSimuNetwork.InitializeZero ();
- m_matrixInputToHideWeightValue.InitializeZero ();
- m_matrixHideLayerValveValue.InitializeZero ();
- m_matrixHideToOutputWeightValue.InitializeZero ();
- m_matrixOutputLayerValveValue.InitializeZero ();
- m_matrixDemoDataInput.InitializeZero ();
- m_strSimuNetworkFold = TEXT("");
- m_strSimuDataInput = TEXT("");
- m_strSimuResult = TEXT("");
-
- m_nInputLayerNumber = 0;
- m_nHideLayerNumber = 0;
- m_nOutputLayerNumber = 0;
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- //*******************************************************************
- // Update the UI
- //
- HWND hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_NETWORK_FOLD);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_DATA_INPUT);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_RESULT);
- ::SetWindowText (hWnd, _T(""));
- return false;
- }
- else // Successful!!!
- {
- // 前向计算
- switch(m_nComboArithmetic)
- {
- case 0: // LM Arithmetic Selected
- LMForwardCalculate( m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_bSimulateDataFlag,
- m_nComboFunc,
- m_matrixDemoDataInput,
- m_matrixInputLayerValue,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideLayerOutput,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerOutput,
- m_matrixOutputLayerValveValue
- );
- break;
- case 1: // BP Arithmetic Selected
- BPForwardCalculate2(m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_bSimulateDataFlag,
- m_nComboFunc,
- m_matrixDemoDataInput,
- m_matrixInputLayerValue,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideLayerOutput,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerOutput,
- m_matrixOutputLayerValveValue
- );
- break;
- default: // No Arithmetic Selected
- return false;
- }
- // 存储模拟结果
- (m_matrixOutputLayerOutput.Transpose()).SaveDataToFile(m_strSimuResult);
- // 释放全局变量所占的内存
- m_matrixSimuNetwork.InitializeZero ();
- m_matrixInputToHideWeightValue.InitializeZero ();
- m_matrixHideLayerValveValue.InitializeZero ();
- m_matrixHideToOutputWeightValue.InitializeZero ();
- m_matrixOutputLayerValveValue.InitializeZero ();
- m_matrixDemoDataInput.InitializeZero ();
- m_matrixHideLayerOutput.InitializeZero ();
- m_matrixOutputLayerOutput.InitializeZero ();
- m_strSimuNetworkFold = _T("");
- m_strSimuDataInput = _T("");
- m_strSimuResult = _T("");
-
- m_nComboFunc = -1;
- m_nInputLayerNumber = 0;
- m_nHideLayerNumber = 0;
- m_nOutputLayerNumber = 0;
-
- ::MessageBox (this->m_hWnd, _T("数据仿真结果保存成功!"), _T("恭喜!"), MB_OK);
- (CNNBPDlg *)GetDlgItem(IDC_STATE)->EnableWindow(TRUE);
- //*******************************************************************
- // Update the UI
- //
- HWND hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_NETWORK_FOLD);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_DATA_INPUT);
- ::SetWindowText (hWnd, _T(""));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_SIMU_RESULT);
- ::SetWindowText (hWnd, _T(""));
- }
- return true;
- }
- void CNNBPDlg::ForwardCalculateInit()
- {
- LMForwardCalculateInit( m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_matrixDemoDataInput,
- m_matrixInputLayerValue,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerValveValue
- );
-
- }
- bool CNNBPDlg::DemoDataTrainRepeat()
- {
- bool bReturn = false;
- switch( m_nComboArithmetic)
- {
- case 0: // LM Arithmetic Selected
- bReturn = LMDemoDataTrainRepeat ( m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_bSimulateDataFlag,
- m_nComboFunc,
- m_SystemErrorOld,
- m_SystemErrorNew,
- m_nSystemErrorLevel,
- m_nSystemError,
- m_nStep,
- m_nMaxTrainTimes,
- m_nTrainTimes,
- IDC_SYSTEM_ERROR,
- IDC_TRAIN_TIMES,
- this->m_hWnd,
- m_matrixDemoDataInput,
- m_matrixInputLayerValue,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideLayerOutput,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerOutput,
- m_matrixOutputLayerValveValue
- );
- break;
- case 1: // BP Arithmetic Selected
- bReturn = BPDemoDataTrainRepeat ( m_nInputLayerNumber,
- m_nHideLayerNumber,
- m_nOutputLayerNumber,
- m_bSimulateDataFlag,
- m_nComboFunc,
- m_SystemErrorOld,
- m_SystemErrorNew,
- m_nSystemErrorLevel,
- m_nSystemError,
- m_nStep,
- m_nMaxTrainTimes,
- m_nTrainTimes,
- IDC_SYSTEM_ERROR,
- IDC_TRAIN_TIMES,
- this->m_hWnd,
- m_matrixDemoDataInput,
- m_matrixInputLayerValue,
- m_matrixInputToHideWeightValue,
- m_matrixHideLayerValveValue,
- m_matrixHideLayerOutput,
- m_matrixHideToOutputWeightValue,
- m_matrixOutputLayerOutput,
- m_matrixOutputLayerValveValue
- );
- break;
- default: // No Arithmetic Selected
- return bReturn;
- }
- return bReturn;
- }
- bool CNNBPDlg::SaveConstantStringToFile(CString& strFileName,CString& strConstantData)
- {
- // Convert CString to LPCTSTR
- LPCTSTR lpszFileName = "";
-
- strFileName.TrimLeft ();
- strFileName.TrimRight ();
- lpszFileName = (LPCTSTR)strFileName;
- CStdioFile dataFile;
- if(!dataFile.Open (lpszFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite | CFile::typeText))
- {
- ::MessageBox(this->m_hWnd, _T("不能创建存储网络参数的文件!"), _T("错误!"), MB_OK | MB_ICONERROR);
- dataFile.Close ();
- return FALSE;
- }
- dataFile.SeekToEnd ();
- // Write data into the file
- char *pBuffer = new char[strConstantData.GetLength ()];
- memcpy(pBuffer,strConstantData,strConstantData.GetLength ());
- dataFile.Write (pBuffer,strConstantData.GetLength ());
- dataFile.Close ();
- return TRUE;
- }
- /////////////////////////////////////////////////////////////////////////////
- // 工作线程过程
- //
- /////////////////////////////////////////////////////////////////////////////
- ULONG __stdcall WorkThreadProc(LPVOID lParam)
- {
- if(lParam == NULL)
- return -1;
-
- STHREADDATA *pData = (STHREADDATA *)lParam;
- // Set the flag
- pData->pDlg->m_bStartFlag = true;
-
- if(pData->pDlg->m_bSimulateDataFlag)
- {
- pData->pDlg->SimulateData();
- }
- else
- {
- pData->pDlg->TrainingDemo();
- }
- pData->pDlg->m_bStartFlag = false;
- delete pData;
- pData = 0;
- return 0;
- }
- void CAboutDlg::OnHelpdocument()
- {
- // TODO: Add your control notification handler code here
- DWORD nBufferLength=256;
- TCHAR lpBuffer[256];
- CString m_strPath;
- GetCurrentDirectory(nBufferLength,lpBuffer);
- m_strPath = lpBuffer;
- m_strPath = m_strPath + '\' + TEXT("Help.chm");
- HINSTANCE hHelpFile = ShellExecute (NULL,"open", m_strPath, NULL, NULL, SW_SHOWNORMAL);
-
- if((long)hHelpFile == ERROR_FILE_NOT_FOUND)
- {
- ::MessageBox(this->m_hWnd, _T("帮助文件没有找到,你是不是把它给删了?"), _T("没找到"), MB_ICONEXCLAMATION | MB_OK );
- return ;
- }
-
- }
- void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- CDialog::OnOK ();
-
- //CDialog::OnLButtonDown(nFlags, point);
- }
- void CNNBPDlg::OnStopTrain()
- {
- // TODO: Add your control notification handler code here
- DWORD dwExitCode = 0;
- ::GetExitCodeThread (m_hThread, &dwExitCode);
-
- if(dwExitCode == STILL_ACTIVE)
- {
- ::TerminateThread (m_hThread, (DWORD)0);
- CloseHandle (m_hThread);
- m_hThread = NULL;
- HWND hWnd = ::GetDlgItem (this->m_hWnd, IDC_SYSTEM_ERROR);
- ::SetWindowText (hWnd, _T("0"));
- hWnd = ::GetDlgItem (this->m_hWnd, IDC_TRAIN_TIMES);
- ::SetWindowText (hWnd, _T("0"));
- }
-
- }