Projet du cours MPRI 2.24.2 "Résolution de problèmes d'optimisation avec heuristiques de recherche" : https://wikimpri.dptinfo.ens-cachan.fr/doku.php?id=cours:c-2-24-2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bestPGA.h 2.8KB

  1. #ifndef BEST_PGA_H_INCLUDED
  2. #define BEST_PGA_H_INCLUDED
  3. #include <vector>
  4. #include "PGA.h"
  5. class PGACrossoverProbaOptimizer : public ParameterOptimizer {
  6. public:
  7. PGACrossoverProbaOptimizer(unsigned int n_init, std::vector<double> probas, unsigned int flexive_point, std::default_random_engine& randomizer) : ParameterOptimizer(randomizer), n_initial{n_init}, m_probas{probas}, m_flexive_point{flexive_point} {};
  8. SearchHeuristic* get_context(unsigned int i, double parameter, std::default_random_engine& randomizer) {
  9. std::vector<double> probas(m_probas);
  10. //for(int k=m_flexive_point; k<probas.size(); k++)
  11. // probas[k] = parameter;
  12. probas[m_flexive_point] = parameter;
  13. if(m_flexive_point == 0) {
  14. for(int k=0; k<probas.size(); k++)
  15. probas[k] = parameter;
  16. }
  17. PGA* algo = new PGA(10, 10, PLUS, 1./(n_initial+i), probas, UNIFORM_CROSSOVER, GA_V1, randomizer);
  18. MasterMind* mm = new MasterMind(n_initial+i, n_initial+i, randomizer);
  19. algo->set_problem(mm);
  20. return algo;
  21. }
  22. std::string display_context(unsigned int context) {
  23. std::stringstream ss;
  24. ss << "n=" << n_initial+context;
  25. return ss.str();
  26. }
  27. std::string get_context_for_csvfile(unsigned int num_context) {
  28. return std::to_string(n_initial+num_context);
  29. }
  30. private:
  31. unsigned int n_initial;
  32. std::vector<double> m_probas;
  33. unsigned int m_flexive_point;
  34. };
  35. void pga_optimisation(unsigned int n, int subdivision_size, std::default_random_engine& randomizer) {
  36. std::vector<double> probas;
  37. for(int i=0; i<=subdivision_size; i++)
  38. probas.push_back(0.);
  39. for(unsigned int k=0; k<=subdivision_size; k++) {
  40. PGACrossoverProbaOptimizer pga_cpo(n, probas, k, randomizer);
  41. pga_cpo.set_nb_contexts(1);
  42. pga_cpo.set_study_interval(0.01, 0.95, 0.02);
  43. pga_cpo.add_test_wave(500, 2.2481733216, 0);
  44. pga_cpo.add_test_wave(8000, 2.243091696, 1);
  45. std::vector<ConfidenceInterval> cis = pga_cpo.run(false);
  46. std::cout << "STEP " << k << ": " << cis[0].down << ", " << cis[0].mean << ", " << cis[0].up << std::endl;
  47. double p = (cis[0].down + cis[0].up)/2.;
  48. if(k==0) {
  49. for(int j=0; j<=subdivision_size; j++)
  50. probas[j] = p;
  51. } else {
  52. probas[k] = p;
  53. if(k+1<=subdivision_size) probas[k+1] = (2*p+probas[k+1])/3;
  54. if(k+2<=subdivision_size) probas[k+2] = (p+2*probas[k+2])/3;
  55. }
  56. std::cout << "==========> " << k << ", " << p << std::endl;
  57. }
  58. }
  59. #endif // BEST_PGA_H_INCLUDED