From 03fe944c1cb54eb857ea400aea83dbc56b9aaa65 Mon Sep 17 00:00:00 2001 From: TriantaTV Date: Sun, 24 Sep 2023 19:42:08 -0500 Subject: [PATCH] Prepared genetic functions and renamed class and struct for a more fitting name --- src/chess.cpp | 113 +++++++++++++++++++++++++++++++++++++++-------- src/chess.hpp | 20 ++++----- src/n_queens.cpp | 14 +++--- 3 files changed, 111 insertions(+), 36 deletions(-) diff --git a/src/chess.cpp b/src/chess.cpp index 2850eae..9c7f59f 100644 --- a/src/chess.cpp +++ b/src/chess.cpp @@ -1,4 +1,5 @@ #include "chess.hpp" +#include #include #include @@ -15,30 +16,32 @@ int GenerateRandomNumber(int generationLimit) { return generatedNumber; } -GeneticDefaults::GeneticDefaults(void) { - size = 4; +GeneticRules::GeneticRules(void) { + boardSize = 4; + populationSize = 1; } -GeneticDefaults::GeneticDefaults(unsigned int size) { - this->size = size; +GeneticRules::GeneticRules(unsigned int boardSize, unsigned int populationSize) { + this->boardSize = boardSize; + this->populationSize = populationSize; } -GeneticChess::GeneticChess(void) { +Individual::Individual(const unsigned int boardSize) { generationCount = 0; InitializeGenerator(); // population init part of vector resize - board.resize(genetics.size, 0); + board.resize(boardSize, 0); for (int i = 0; i < board.size(); ++i) { - board.at(i) = GenerateRandomNumber(genetics.size); + board.at(i) = GenerateRandomNumber(boardSize); } } -void GeneticChess::Print(void) { +void Individual::Print(void) { std::cout << generationCount << ':' << std::endl; for (int i : board) { std::cout << '['; - for (int j = 0; j < genetics.size; ++j) { + for (int j = 0; j < board.size(); ++j) { if (j == i) { std::cout << "Q"; } else { std::cout << ' '; } } @@ -48,7 +51,7 @@ void GeneticChess::Print(void) { } // Gets the fitness of the population -unsigned int GeneticChess::GetFitness(void) { +unsigned int Individual::GetFitness(void) { unsigned int fitness = 0; for (unsigned int i : board) { if (!IsQueenThreatened(i)) { fitness++; } @@ -58,29 +61,101 @@ unsigned int GeneticChess::GetFitness(void) { } // -void GeneticChess::Selection(void) { +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 board; - GeneticDefaults genetics; int generationCount; - GeneticChess(void); + Individual(const unsigned int boardSize); void Print(void); unsigned int GetFitness(void); void Selection(void); void Crossover(void); void Mutation(void); private: - bool IsQueenThreatened(const unsigned int queenRow); + bool IsQueenThreatened(const int queenRow); }; #endif // CHESS_HPP diff --git a/src/n_queens.cpp b/src/n_queens.cpp index 154496d..366bcfd 100644 --- a/src/n_queens.cpp +++ b/src/n_queens.cpp @@ -1,13 +1,13 @@ #include "chess.hpp" #include "genetic_algorithm.hpp" -#include -#include -#include +#include -int main(){ - GeneticChess population; - population.Print(); - population.GetFitness(); +int main() { + GeneticRules genetics; + std::vector population; + Individual person(genetics.boardSize); + person.Print(); + person.GetFitness(); /* unsigned char population[N] = {0};