Skip to content

File GPAgentAnalyze.h

File List > Agents > GP > GPAgentAnalyze.h

Go to the documentation of this file


//
// A class that analyzes the data of the best agent in the GP algorithm
// and saves it to a csv file
//

#pragma once

#include <vector>
#include <iostream>
#include <string>
#include <fstream>

namespace cowboys {

    class GPAgentAnalyzer {
    private:
        std::vector<double> average_fitness;

        std::vector<double> max_fitness;

        std::vector<double> elite_score;

        std::vector<double> average_score;

        std::vector<double> max_agents;

    public:
        GPAgentAnalyzer() = default;

        ~GPAgentAnalyzer() = default;

        void addAverageFitness(double fitness) {
            average_fitness.push_back(fitness);
        }

        void addMaxFitness(double fitness) {
            max_fitness.push_back(fitness);
        }

        void addEliteScore(double score) {
            elite_score.push_back(score);
        }

        void addAverageScore(double score) {
            average_score.push_back(score);
        }

        void addNumAgentsWithMaxFitness(double num_agents) {
            max_agents.push_back(num_agents);
        }

        void saveToFile() {
            // create a new file
            std::ofstream file("gp_agent_analyzer.csv");

            // write the data to the file
            file << "average_fitness,max_fitness,average_elite_score,best_agent_weighted_score,agents_with_max_fitness\n";

            for (size_t i = 0; i < average_fitness.size(); i++) {
                file << average_fitness[i] << "," << max_fitness[i] << "," << elite_score[i] << "," << average_score[i] << "," << max_agents[i] << "\n";
            }
            std::cout << "Saved GP Agent Analyzer data to gp_agent_analyzer.csv" << std::endl;

            // close the file
            file.close();
        }
    };

}  // namespace cowboys