BOOL CSoftComputingWndDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;
	
	CString filetype = lpszPathName;

	if ((filetype.Find(".jpg") > -1) 
		|| (filetype.Find(".JPG") > -1) 
		|| (filetype.Find(".gif") > -1)
		|| (filetype.Find(".GIF") > -1)
		|| (filetype.Find(".bmp") > -1)
		|| (filetype.Find(".BMP") > -1)
		|| (filetype.Find(".tif") > -1)
		|| (filetype.Find(".TIF") > -1))
	{
		m_image = cvvLoadImage(lpszPathName);

		CMainFrame* mainframe = (CMainFrame*)AfxGetMainWnd();
		m_frtk.imgview = (CImageBaseView*)mainframe->GetImageBaseView();

		for (int i=0; i<4; i++) m_frtk.debug[i] = (CImageBaseView*)mainframe->GetDebugImage(i);

		m_frtk.msgview = (CLogView*)mainframe->GetDJMessage();
		m_frtk.FRTKinit(m_image);
	}

	return TRUE;
}
void CNNfunction::NNtrain(float *inputs, float *outputs, int no_sample)
{
	CMainFrame* main = (CMainFrame*)AfxGetMainWnd();

	int i, j;
	int epoch;
	float **input, **output;

	input = new float *[no_sample];
	for (i=0; i<no_sample; i++)
	{
		input[i] = new float[no_input];
		
		for (j=0; j<no_input; j++)
			input[i][j] = *(inputs + j + i*no_input);
	}

	output = new float *[no_sample];
	for (i=0; i<no_sample; i++)
	{
		output[i] = new float[no_output];
		
		for (j=0; j<no_output; j++)
			output[i][j] = *(outputs + j + i*no_output);
	}

	CString str;
	str.Format("\r\nLearning Start! Ep[%d] & Err[%.0e]", step, avg_err);
	(main->GetDJMessage())->AddLine(str);

	RLsTrainMLPBackPropagation(psNN, input, no_sample, no_input, output, no_output,
		eta, step, avg_err, mo, &epoch);

	if (RLGetStatus() != RL_StsOk)
		exit(0);

	str.Format("Learning Stop [%d]", epoch);
	(main->GetDJMessage())->AddLine(str);
}
void CNNfunction::NNeval(float *inputs, float* outputs, int no_sample)
{
	CMainFrame* main = (CMainFrame*)AfxGetMainWnd();

	int i, j;
	float *result = new float[no_output];
	float maxval = -1.0f;
	int maxid, maxid2;

	int cmat[7][7];
	for (i=0; i<7; i++)
		for (j=0; j<7; j++)
			cmat[i][j] = 0;

	float rr = 0.0f;

	for (j=0; j<no_sample; j++)
	{
		RLsEvalMLPFeedForward(psNN, (inputs +j*no_input), no_input, result, no_output);

		maxval = -1.0f;
		for (i=0; i<no_output; i++)
		{
			if (result[i] > maxval)
			{
				maxval = result[i];
				maxid = i;
			}
		}

		for (i=0; i<no_output; i++)
		{
			if (outputs[j*no_output + i] == 0.8f)
			{
				maxid2 = i;
				break;
			}
		}

		cmat[maxid2][maxid]++;
	}

	int sum = 0;
	for (i=0; i<no_output; i++)
	{
		sum += cmat[i][i];
	}

	rr = (float)sum/(float)no_sample*100.0f;

	CString str;
	str.Format("\r\nRec. Rate for Set[%.2f]", rr);
	(main->GetDJMessage())->AddLine(str);

	CString str2;
	str2.Format("");
	for (i=0; i<no_output; i++)
	{
		str.Format("%d ", cmat[i][i]);
		str2 += str;
	}
	(main->GetDJMessage())->AddLine(str2);


	delete [] result;	result = NULL;
}