Skip to content
Snippets Groups Projects
Commit bea2ee4d authored by Gontier Antonin's avatar Gontier Antonin :fox:
Browse files

Ajout des paramètres de l'algo gen au fichier de config

parent c7f7e12e
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,13 @@ repeatActionProb=0.25
colourPalette=SECAM
//Algo gen
algoGen=false
algoGen=true
//Launch parameters
nEvalP=1
nEvalS=3
mutRate=0.6
crossRate=0.6
tournSize=3
popSize=30
nbIter=100
......@@ -3,72 +3,98 @@
#include "agent_worker.hpp"
#include "fitness.hpp"
#include "ga.hpp"
#include "Utils.hpp"
namespace master_slave
{
void run(int argc, char* argv[])
{
namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
("help,h", "print usage message")
("master,m", "launch master")
("slave,s", "launch slave")
("host", po::value<std::string>(), "address of master (used for slave)")
("port,p", po::value<int>(), "host port for slave, port to listen to for master")
("np", po::value<int>(), "number of eval by parameter")
("ns", po::value<int>(), "number of eval by slave")
("duration,d", po::value<int>(), "slave duration in minute");
using namespace std;
po::variables_map vm;
po::store(parse_command_line(argc, argv, desc), vm);
namespace master_slave{
void run(int argc, char* argv[]){
namespace po = boost::program_options;
po::options_description desc("Allowed options");
desc.add_options()
("help,h", "print usage message")
("master,m", "launch master")
("slave,s", "launch slave")
("host", po::value<std::string>(), "address of master (used for slave)")
("port,p", po::value<int>(), "host port for slave, port to listen to for master")
("np", po::value<int>(), "number of eval by parameter")
("ns", po::value<int>(), "number of eval by slave")
("duration,d", po::value<int>(), "slave duration in minute");
if (vm.count("help"))
{
std::cout << desc << std::endl;
return;
}
std::string host = "localhost";
int port = 54321;
if (vm.count("host")) host = vm["host"].as<std::string>();
if (vm.count("port")) port = vm["port"].as<int>();
if (vm.count("master"))
{
int np = 1, ns = 1;//np, c'est le nombre de tests sur un individu et on l'évalue sur la moyenne, ns c'est le nombre d'évaluations qu'on fait tourner sur une machine
if (vm.count("np")) np = vm["np"].as<int>();
if (vm.count("ns")) ns = vm["ns"].as<int>();
const ga::parameters params
{
.mutation_rate = 0.6,//combien de fois on laisse le programme cuisiner
.crossover_rate = 0.6,//combien de fois on croise les instructions
.tournament_size = 2,//taille du pool de sélection des individus (1 à 2% de la population)
.population_size = 30,//taille de la population
.nb_iterations = 100//nombre de générations
};
const agent::parameters agent_params
{
.input_size = 1344,//taille de l'écran
.output_size = 9,//là c'est spécifique au jeu, c'est le nombre d'actions possibles
.nb_registers = 8,//
.block_size = 32,//taille du bloc d'instructions
.nb_blocks = 10//nombre du bloc du programme
};
ga ga(params, agent_params);
auto fitness = genetic_algorithms::make_distributed_fitness<double, agent>
(port,
genetic_algorithms::accumulate::mean_score<double>,
np, ns);
ga.run(fitness);
return;
}
if (vm.count("slave"))
{
int d = 1e6;
if (vm.count("duration")) d = vm["duration"].as<int>();
slave<double, agent> slave(host, port, agent_worker, d);
slave.run();
return;
}
std::cout << "choose master or slave mode" << std::endl;
}
po::variables_map vm;
po::store(parse_command_line(argc, argv, desc), vm);
if (vm.count("help")){
std::cout << desc << std::endl;
return;
}
std::string host = "localhost";
int port = 54321;
if (vm.count("host")) host = vm["host"].as<std::string>();
if (vm.count("port")) port = vm["port"].as<int>();
if (vm.count("master")){
//Valeur par défaut
int np = 1;//nombre de tests sur un individu, évaluer sur la moyenne
int ns = 3;//nombre d'évaluations qu'on fait tourner sur une machine
float mutRate = 0.6;
float crossRate = 0.6;
int tournSize = 2;
int popSize = 30;
int nbIter = 100;
//Lecture de la config
vector<vector<string>> config = Utils::read_Config();
for(size_t i = 0; i<config.size(); i++){
if(config.at(i).at(0) == "nEvalP"){
np = stoi(config.at(i).at(1));
}else if(config.at(i).at(0) == "nEvalS"){
ns = stoi(config.at(i).at(1));
}else if(config.at(i).at(0) == "mutRate"){
mutRate = stof(config.at(i).at(1));
}else if(config.at(i).at(0) == "crossRate"){
crossRate = stof(config.at(i).at(1));
}else if(config.at(i).at(0) == "tournSize"){
tournSize = stoi(config.at(i).at(1));
}else if(config.at(i).at(0) == "popSize"){
popSize = stoi(config.at(i).at(1));
}else if(config.at(i).at(0) == "nbIter"){
nbIter = stoi(config.at(i).at(1));
}
}
//Application de la config
if (vm.count("np")) np = vm["np"].as<int>();
if (vm.count("ns")) ns = vm["ns"].as<int>();
const ga::parameters params{
.mutation_rate = mutRate,//combien de fois on laisse le programme cuisiner
.crossover_rate = crossRate,//combien de fois on croise les instructions
.tournament_size = tournSize,//taille du pool de sélection des individus (1 à 2% de la population)
.population_size = popSize,//taille de la population
.nb_iterations = nbIter//nombre de générations
};
const agent::parameters agent_params{
.input_size = 1344,//taille de l'écran
.output_size = 9,//là c'est spécifique au jeu, c'est le nombre d'actions possibles
.nb_registers = 8,//
.block_size = 32,//taille du bloc d'instructions
.nb_blocks = 10//nombre du bloc du programme
};
ga ga(params, agent_params);
auto fitness = genetic_algorithms::make_distributed_fitness<double, agent>
(port,
genetic_algorithms::accumulate::mean_score<double>,
np, ns);
ga.run(fitness);
return;
}
if (vm.count("slave")){
int d = 1e6;
if (vm.count("duration")) d = vm["duration"].as<int>();
slave<double, agent> slave(host, port, agent_worker, d);
slave.run();
return;
}
std::cout << "choose master or slave mode" << std::endl;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment