#ifndef BEST_PGA_H_INCLUDED #define BEST_PGA_H_INCLUDED #include #include "heuristics/PGA.h" class PGACrossoverProbaOptimizer : public ParameterOptimizer { public: PGACrossoverProbaOptimizer(unsigned int n_init, std::vector probas, unsigned int flexive_point, std::default_random_engine& randomizer) : ParameterOptimizer(randomizer), n_initial{n_init}, m_probas{probas}, m_flexive_point{flexive_point} {}; SearchHeuristic* get_context(unsigned int i, double parameter, std::default_random_engine& randomizer) { std::vector probas(m_probas); //for(int k=m_flexive_point; kset_problem(mm); return algo; } std::string display_context(unsigned int context) { std::stringstream ss; ss << "n=" << n_initial+context; return ss.str(); } std::string get_context_for_csvfile(unsigned int num_context) { return std::to_string(n_initial+num_context); } private: unsigned int n_initial; std::vector m_probas; unsigned int m_flexive_point; }; void pga_optimisation(unsigned int n, unsigned int subdivision_size, std::default_random_engine& randomizer) { std::vector probas; for(unsigned int i=0; i<=subdivision_size; i++) probas.push_back(0.); for(unsigned int k=0; k<=subdivision_size; k++) { PGACrossoverProbaOptimizer pga_cpo(n, probas, k, randomizer); pga_cpo.set_nb_contexts(1); pga_cpo.set_study_interval(0.01, 0.95, 0.02); pga_cpo.add_test_wave(500, 2.2481733216, 0); pga_cpo.add_test_wave(8000, 2.243091696, 1); std::vector cis = pga_cpo.run(false); std::cout << "STEP " << k << ": " << cis[0].down << ", " << cis[0].mean << ", " << cis[0].up << std::endl; double p = (cis[0].down + cis[0].up)/2.; if(k==0) { for(unsigned int j=0; j<=subdivision_size; j++) probas[j] = p; } else { probas[k] = p; if(k+1<=subdivision_size) probas[k+1] = (2*p+probas[k+1])/3; if(k+2<=subdivision_size) probas[k+2] = (p+2*probas[k+2])/3; } std::cout << "==========> " << k << ", " << p << std::endl; } } #endif // BEST_PGA_H_INCLUDED