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

📄 chromosome.cpp

📁 基本遗传算法在求一个函数表达式的最大值应用!
💻 CPP
字号:
#include "stdafx.h"

#include "Gene.h"
#include "chromosome.h"
#include "objfunction.h"
#include "myRandom.h"
#include <iostream>
#include <string>

extern MyRandom myRandom;

Chromosome::Chromosome(int all){
	Length = all;
	Fitness = 0;
	myGenes = new Gene[Length];
} 

Chromosome::Chromosome(const Chromosome &c) {
	myGenes = new Gene[c.Length];
	for(int i=0;i<c.Length ;i++)
		myGenes[i].set_allele(c.myGenes[i].get_allele());
	this->Length =c.Length ;
	this->Fitness =c.Fitness ;
}

Chromosome::~Chromosome (){
	delete [] myGenes;
}

void Chromosome::set_fitness(double fit){
	this->Fitness = fit;
}

double Chromosome::get_fitness(){
	return this->Fitness ;
} 

void Chromosome::set_length(int len) {
	this->Length = len;
}

int Chromosome::get_length() {
	return this->Length ;
}

std::string Chromosome::genes_to_string() {
	std::string g_str;
	g_str.resize (Length );
	//char * gen_s;
	for(int i = 0;i<get_length();i++){
		if(myGenes[i].get_allele ()==0)
			g_str[i] = '0';
		else
			g_str[i] = '1';
	}
	return g_str;
}

void Chromosome::copyGene(Gene * gen,int offset ,int index ){
	if((index + offset) <= Length ){
		for(int i =0;i<offset;i++)
			myGenes[index + i].set_allele (gen[index + i].get_allele ());
	}
}

void Chromosome::evaluate() {
	Fitness = obj_function(*this);
}

void Chromosome::tocross(Chromosome &c,int index){
	Gene * midGene = new Gene[Length];
	for(int i=0;i<Length;i++)
		midGene[i].set_allele (myGenes[i].get_allele ());
	copyGene (c.myGenes ,Length - index , index);
	c.copyGene(midGene,Length - index , index );
	delete [] midGene;
}

void Chromosome::mutate(double pmut){
	for(int i=0;i<Length ;i++)
	{
		if(myRandom.double_random()<=pmut)
			myGenes[i].mutate ();
	}
}

⌨️ 快捷键说明

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