📄 chromosome.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 + -