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

📄 nnmod.cpp

📁 vc编程实现bp神经网络
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// NNMod.cpp : implementation file
//

#include "stdafx.h"
#include "OptSoftWare.h"
#include "NNMod.h"
#include "UserDataDlg.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

/////////////////////////////////////////////////////////////////////////////
// CNNMod

IMPLEMENT_DYNCREATE(CNNMod, CFormView)

CNNMod::CNNMod()
	: CFormView(CNNMod::IDD)
{
	//{{AFX_DATA_INIT(CNNMod)
	m_nComboArithmetic = -1;
	m_nComboFunc = -1;
	m_strDemoDataInput = _T("");
	m_strDemoSaveNetwork = _T("");
	m_strDemoSaveResult = _T("");
	m_nInputLayerNumber = 0;
	m_nHideLayerNumber = 0;
	m_nMaxTrainTimes =LOOP_MAX_TIMES;
	m_nOutputLayerNumber = 0;
	m_strSimuDataInput = _T("");
	m_strSimuNetworkFold = _T("");
	m_nStep = INIT_STEP;
	m_nSystemError = 0.0;
	m_nTrainTimes = 0;
	m_strSimuResult = _T("");
	m_nSystemErrorLevel = SYSTEM_ERROR_LEVEL;
	nModelMethod=0;
	m_MDescription = _T("");
	//}}AFX_DATA_INIT

// Initialize the member variables
	m_bStartFlag = false;
	m_bSimulateDataFlag = false;

	m_SystemErrorNew	= MAX_SYSTEM_ERROR;
	m_SystemErrorOld	= MAX_SYSTEM_ERROR;

	m_hThread	=	NULL;

}

CNNMod::~CNNMod()
{
}

void CNNMod::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNNMod)
	DDX_Control(pDX, IDC_STOP_TRAIN, m_btnStopTrain);
	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_NETWORK_BROWSER, m_btnDemoSaveNetworkBrowser);
	DDX_Control(pDX, IDC_DEMO_SAVE_RESULT_BROWSER, m_btnDemoDataResultBrowser);
	DDX_Control(pDX, IDC_DEMO_DATA_INPUT_BROWSER, m_btnDemoDataInputBrowser);
	DDX_Control(pDX, IDC_COMBO_FUNC, m_ctrlComboFunc);
	DDX_Control(pDX, IDC_COMBO_ARITHMETIC, m_ctrlComboArithmetic);
	DDX_Control(pDX, IDC_BEGIN_TRAIN, m_btnBeginTrain);
	DDX_CBIndex(pDX, IDC_COMBO_ARITHMETIC, m_nComboArithmetic);
	DDX_CBIndex(pDX, IDC_COMBO_FUNC, m_nComboFunc);
	DDX_Text(pDX, IDC_DEMO_DATA_INPUT, m_strDemoDataInput);
	DDX_Text(pDX, IDC_DEMO_SAVE_NETWORK, m_strDemoSaveNetwork);
	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_MAX_TRAIN_TIMES, m_nMaxTrainTimes);
	DDX_Text(pDX, IDC_OUTPUT_LAYER_NUMBER, m_nOutputLayerNumber);
	DDX_Text(pDX, IDC_SIMU_DATA_INPUT, m_strSimuDataInput);
	DDX_Text(pDX, IDC_SIMU_NETWORK_FOLD, m_strSimuNetworkFold);
	DDX_Text(pDX, IDC_STEP, m_nStep);
	DDX_Text(pDX, IDC_SYSTEM_ERROR, m_nSystemError);
	DDX_Text(pDX, IDC_TRAIN_TIMES, m_nTrainTimes);
	DDX_Text(pDX, IDC_SIMU_RESULT, m_strSimuResult);
	DDX_Text(pDX, IDC_SYSTEM_LEVEL, m_nSystemErrorLevel);
	DDX_Text(pDX, IDC_EDT_MDESCRIPTION, m_MDescription);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNNMod, CFormView)
	//{{AFX_MSG_MAP(CNNMod)
	ON_BN_CLICKED(IDC_BEGIN_TRAIN, OnBeginTrain)
	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_DATA_INPUT_BROWSER, OnSimuDataInputBrowser)
	ON_BN_CLICKED(IDC_SIMU_NETWORK_FOLD_BROWSER, OnSimuNetworkFoldBrowser)
	ON_BN_CLICKED(IDC_SIMU_RESULT_BROWSER, OnSimuResultBrowser)
	ON_BN_CLICKED(IDC_STATE, OnState)
	ON_BN_CLICKED(IDC_STOP_TRAIN, OnStopTrain)
	ON_WM_TIMER()
	ON_WM_SHOWWINDOW()
	ON_BN_CLICKED(IDC_FORECAST, OnForecast)
	ON_BN_CLICKED(IDC_ModVarDefine, OnModVarDefine)
	ON_BN_CLICKED(IDC_Modeling, OnModeling)
	ON_BN_CLICKED(IDC_DOCUMENT, OnDocument)
	ON_BN_CLICKED(IDC_DATABASE, OnDatabase)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNNMod diagnostics

#ifdef _DEBUG
void CNNMod::AssertValid() const
{
	CFormView::AssertValid();
}

void CNNMod::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CNNMod message handlers

void CNNMod::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);


}

void CNNMod::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 CNNMod::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 CNNMod::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 CNNMod::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 CNNMod::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 CNNMod::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 CNNMod::OnState() 
{
	// TODO: Add your control notification handler code here
	// Change the button flag
	m_bSimulateDataFlag = !m_bSimulateDataFlag;

	if(m_bSimulateDataFlag)
	{
		// 程序处在数据仿真状态

		/////////////////////////////////////////////////////////////////////
		// Disabled the following controls
		/////////////////////////////////////////////////////////////////////
		(CNNMod *)GetDlgItem(IDC_SYSTEM_LEVEL)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_MAX_TRAIN_TIMES)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_STEP)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_INPUT_LAYER_NUMBER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_HIDE_LAYER_NUMBER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_OUTPUT_LAYER_NUMBER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_COMBO_ARITHMETIC)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_COMBO_FUNC)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_DATA_INPUT)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_DATA_INPUT_BROWSER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_SAVE_NETWORK)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_SAVE_NETWORK_BROWSER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_SAVE_RESULT)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_DEMO_SAVE_RESULT_BROWSER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_STOP_TRAIN)->EnableWindow(FALSE);

		
		/////////////////////////////////////////////////////////////////////
		// Enabled the following controls
		/////////////////////////////////////////////////////////////////////
		(CNNMod *)GetDlgItem(IDC_SIMU_NETWORK_FOLD)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_SIMU_NETWORK_FOLD_BROWSER)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_SIMU_DATA_INPUT)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_SIMU_DATA_INPUT_BROWSER)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_SIMU_RESULT)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_SIMU_RESULT_BROWSER)->EnableWindow(TRUE);

	}
	else
	{
		// 程序处在样本训练状态
	
		/////////////////////////////////////////////////////////////////////
		// Disabled the following controls
		/////////////////////////////////////////////////////////////////////
		(CNNMod *)GetDlgItem(IDC_SIMU_NETWORK_FOLD)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_SIMU_NETWORK_FOLD_BROWSER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_SIMU_DATA_INPUT)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_SIMU_DATA_INPUT_BROWSER)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_SIMU_RESULT)->EnableWindow(FALSE);

		(CNNMod *)GetDlgItem(IDC_SIMU_RESULT_BROWSER)->EnableWindow(FALSE);

		/////////////////////////////////////////////////////////////////////
		// Enabled the following controls
		/////////////////////////////////////////////////////////////////////
		(CNNMod *)GetDlgItem(IDC_SYSTEM_LEVEL)->EnableWindow(TRUE);

		(CNNMod *)GetDlgItem(IDC_MAX_TRAIN_TIMES)->EnableWindow(TRUE);

⌨️ 快捷键说明

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