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

📄 yichuansuanfaview.cpp

📁 本遗传算法是保留大量状态种群的随机爬山搜索算法
💻 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 + -