#include "chess.hpp" #include #include #include std::default_random_engine generator; void InitializeGenerator(void) { generator.seed(std::random_device{}()); } int GenerateRandomNumber(int generationLimit) { int generatedNumber; std::uniform_int_distribution<> distribution(0, generationLimit - 1); generatedNumber = distribution(generator); return generatedNumber; } GeneticRules::GeneticRules(void) { boardSize = 4; populationSize = 1; } GeneticRules::GeneticRules(unsigned int boardSize, unsigned int populationSize) { this->boardSize = boardSize; this->populationSize = populationSize; } Individual::Individual(const unsigned int boardSize) { generationCount = 0; InitializeGenerator(); // population init part of vector resize board.resize(boardSize, 0); for (int i = 0; i < board.size(); ++i) { board.at(i) = GenerateRandomNumber(boardSize); } } void Individual::Print(void) { std::cout << generationCount << ':' << std::endl; for (int i : board) { std::cout << '['; for (int j = 0; j < board.size(); ++j) { if (j == i) { std::cout << "Q"; } else { std::cout << ' '; } } std::cout << ']'; std::cout << std::endl; } } // Gets the fitness of the population unsigned int Individual::GetFitness(void) { unsigned int fitness = 0; for (unsigned int i : board) { if (!IsQueenThreatened(i)) { fitness++; } } std::cout << fitness << std::endl; return fitness; } // void Individual::Selection(void) { /* TODO: Finish selection int fitness[N] = {0}; int fitness_sum = 0; int i, j; // get fitness for all members of population for ( i=0; i