Pagini recente » Istoria paginii runda/viata_periculoasa_pe_infoarena | Cod sursa (job #1604380) | Cod sursa (job #1905763) | Cod sursa (job #1419816) | Cod sursa (job #2929190)
#include "genome.h"
genome::genome(){
genes = new char[N + 1];
fitness = 0;
}
genome::genome(char *input){
genes = new char[N + 1];
fitness = 0;
for(int i = 1; i <= N; i++)
genes[i] = input[i] - '0';
}
genome::~genome(){
delete genes;
}
void genome::randomInit(){
int val = 0, w = 0;
for(int i = 1; i <= N; i++)
genes[i] = rand() % 2;
}
bool cmpByFitness(genome a, genome b){
return a.fitness > b.fitness;
}
genome mutate(genome a){
genome b;
for(int i = 1; i <= N; i++){
if(rand() % 100 < 10)
b.genes[i] = 1 - a.genes[i];
else
b.genes[i] = a.genes[i];
}
return b;
}
genome crossOverRand(genome a, genome b){
genome child;
for(int i = 1; i <= N; i++){
if(rand() % 2)
child.genes[i] = a.genes[i];
else
child.genes[i] = b.genes[i];
}
// child = mutate(child);
return child;
}
genome crossOverSecv(genome a, genome b){
genome child;
for(int i = 1; i <= N; i++){
if(i <= N / 2)
child.genes[i] = a.genes[i];
else
child.genes[i] = b.genes[i];
}
child = mutate(child);
return child;
}