Cod sursa(job #2929190)

Utilizator lolismekAlex Jerpelea lolismek Data 25 octombrie 2022 01:34:23
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#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;
}