📄 yichuansuanfaview.cpp
字号:
// yichuansuanfaView.cpp : implementation of the CYichuansuanfaView class
//
#include "stdafx.h"
#include "yichuansuanfa.h"
#include "ShengchengDlg.h"
#include "yichuansuanfaDoc.h"
#include "yichuansuanfaView.h"
#include "InisialDlg.h"
#include "InisialParaterDlg.h"
//#include "iostream.h"
#include "YiChuan.h"
#include "afxwin.h"
#include <string.h>
#include <stdio.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView
IMPLEMENT_DYNCREATE(CYichuansuanfaView, CView)
BEGIN_MESSAGE_MAP(CYichuansuanfaView, CView)
//{{AFX_MSG_MAP(CYichuansuanfaView)
ON_COMMAND(IDD_CINPARATER, OnCinparater)
ON_COMMAND(IDD_Inisialparater, OnInisialparater)
ON_COMMAND(IDD_StratDiedai, OnStratDiedai)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView construction/destruction
CYichuansuanfaView::CYichuansuanfaView()
{
// TODO: add construction code here
}
CYichuansuanfaView::~CYichuansuanfaView()
{
}
BOOL CYichuansuanfaView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView drawing
void CYichuansuanfaView::OnDraw(CDC* pDC)
{
CYichuansuanfaDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//dlg.Create(IDD_DIALOG1,this);
//dlg.ShowWindow(SW_SHOW);
}
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView printing
BOOL CYichuansuanfaView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CYichuansuanfaView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CYichuansuanfaView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView diagnostics
#ifdef _DEBUG
void CYichuansuanfaView::AssertValid() const
{
CView::AssertValid();
}
void CYichuansuanfaView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CYichuansuanfaDoc* CYichuansuanfaView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYichuansuanfaDoc)));
return (CYichuansuanfaDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CYichuansuanfaView message handlers
void CYichuansuanfaView::OnCinparater()
{
// TODO: Add your command handler code here
CInisialDlg dlg;
dlg.m_njiaocha=0.8;//pc一般取0.6~0.95;
dlg.m_nbianyigailv=0.01;//pm一般取0.001~0.1;
dlg.m_nqunti=200;//一般取20~100;
dlg.m_ndiedai=100;
dlg.m_nShiyingdu=100.0;
int ren=dlg.DoModal();
formular=dlg.str;
jiaochap=dlg.m_njiaocha;
bianyip=dlg.m_nbianyigailv;
quntiNumber=dlg.m_nqunti;
diedaiNumber=dlg.m_ndiedai;
Shiyingdu=dlg.m_nShiyingdu;
}
void CYichuansuanfaView::OnInisialparater()
{
// TODO: Add your command handler code here
extern int num;
CInisialParaterDlg dlg;
int ren=dlg.DoModal();
double *data1=dlg.data;
int n=0;
int n1=0;
int n2=0;
Chromlength=0;
Length=new int[num];
LeftValue=new double[num];
RightValue=new double[num];
for(int i=0;i<3*num;i++)
{
if(i<num)
{
Length[n++]=data1[i];
Chromlength=Chromlength+data1[i];
}
if(i>=num && i<2*num)
LeftValue[n1++]=data1[i];
if(i>=2*num && i<3*num)
RightValue[n2++]=data1[i];
}
for(int j=0;j<num;j++)
{
if(LeftValue[j]>RightValue[j])
AfxMessageBox("左极限不能大于右极限,请从新输入!");
}
/*Length=Length;
delete[]Length;
LeftValue=mLeftValue;
delete[]mLeftValue;
RightValue=mRightValue;
delete[]mRightValue;*/
//delete[]data1;严重错误
//菲模式对话框
/*CShengchengDlg* pdlg;
pdlg=new CShengchengDlg(this);
pdlg->Create(IDD_DIALOG1,this);
pdlg->ShowWindow(SW_SHOW);*/
}
void CYichuansuanfaView::OnStratDiedai()
{
// TODO: Add your command handler code here
extern int num;
CYiChuan myichuan(formular,Chromlength,quntiNumber,diedaiNumber,Length,LeftValue,
RightValue,Shiyingdu,jiaochap,bianyip);
// srand( (unsigned)time( NULL ) );
myichuan.InisialPopulation();
myichuan.JinHuaComputer();
for(int i=0;i<diedaiNumber;i++)
{
myichuan.NextPopulation();
myichuan.JinHuaComputer();
myichuan.ZhiXingOperation();
}
myichuan.ShowResult();
double average1=myichuan.average;
CShengchengDlg dlg;
CString stringstr;
CString string;
int ncount=0;
int mgeneration=myichuan.generation;
stringstr.Format("%s%d",stringstr,mgeneration);
stringstr="迭代次数:"+stringstr+'\r'+'\n';
//dlg.m_Edit=stringstr;
string.Format("%s%f",string,average1);
string="进化平均值:"+string+'\r'+'\n';
//dlg.m_Edit=string+'\r'+'\n'+stringstr;
CString sss;
for(int i1=0;i1<num;i1++)
{
CString ss;
for(int j=0;j<Length[i1];j++)
{
ss=ss+myichuan.Currentbest.chrom[j];
}
ss="最佳染色体:"+ss+'\r'+'\n';
sss=sss+ss;
}
double *x=myichuan.parater;
CString ssss;
for(i=0;i<num;i++)
{
double paraterxi=x[i];
CString ss;
ss.Format("%s%f",ss,paraterxi);
CString ss1;
ss1.Format("%s%d",ss1,i);
ss1='x'+ss1;
ss="最佳个体 "+ss1+':'+ss+'\r'+'\n';
ssss=ssss+ss;
}
double result=myichuan.Currentbest.value;
CString sss1;
sss1.Format("%s%f",sss1,result);
dlg.m_Edit=stringstr+string+sss+ssss+sss1;
//dlg.m_nEdit="迭代次数:"+stringstr+'\n';
//dlg.m_nEdit="进化平均值:"+string+'\n';
dlg.DoModal();
delete []Length;
delete []LeftValue;
delete []RightValue;
}
// myichuan.~CYiChuan();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -