多变量多目标的遗传算法程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这是我在解决电梯动力学参数写的简单遗传算法(程序带目标函数值、适应度值计算,但是我的适应度函数因为目标函数的计算很特殊,一起放在了程序外面计算,在此不提供)。

头文件:

// CMVSOGA.h : main header file for the CMVSOGA.cpp

// 本来想使用链表里面套链表的,程序调试比较麻烦,改为种群用链表表示

//染色体固定为16的方法。

#if !defined(AFX_CMVSOGA_H__45BECA_61EB_4A0E_9746_9A94D1CCF767_ _INCLUDED_)

#define

AFX_CMVSOGA_H__45BECA_61EB_4A0E_9746_9A94D1CCF767__INCLUDED _

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "Afxtempl.h"

#define variablenum 16

class CMVSOGA

{

public:

CMVSOGA();

void selectionoperator();

void crossoveroperator();

void mutationoperator();

void initialpopulation(int, int ,double ,double,double *,double *); //种群初始化

void generatenextpopulation(); //生成下一代种群

void evaluatepopulation(); //评价个体,求最佳个体

void calculateobjectvalue(); //计算目标函数值

void calculatefitnessvalue(); //计算适应度函数值

void findbestandworstindividual(); //寻找最佳个体和最差个体

void performevolution();

void GetResult(double *);

void GetPopData(double **);

void SetValueData(double *);

void maxandexpectation();

private:

struct individual

{

double chromosome[variablenum]; //染色体编码长度应该为变量的个数

double value;

double fitness; //适应度

};

double variabletop[variablenum]; //变量值

double variablebottom[variablenum]; //变量值

int popsize; //种群大小

// int generation; //世代数

int best_index;

int worst_index;

double crossoverrate; //交叉率

double mutationrate; //变异率

int maxgeneration; //最大世代数

struct individual bestindividual; //最佳个体

struct individual worstindividual; //最差个体

struct individual current; //当前个体

struct individual current1; //当前个体

struct individual currentbest; //当前最佳个体

CList population; //种群

CList newpopulation; //新种群

CList cfitness; //存储适应度值

// double maxfitness;

// double minfitness;

// double avefitness;

//怎样使链表的数据是一个结构体主要是想把种群作成链表。节省空间。

};

#endif

执行文件

// CMVSOGA.cpp : implementation file

//

#include "stdafx.h"

#include "CMVSOGA.h"

#include "math.h"

#include "stdlib.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CMVSOGA.cpp

void CMVSOGA::initialpopulation(int ps, int gen ,double cr ,double mr,double *xtop,double *xbottom) //第一步,初始化。

{

int i ,j;

相关文档
最新文档