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
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

  1. #ifndef BEST_PEA_H_INCLUDED
  2. #define BEST_PEA_H_INCLUDED
  3. #include <vector>
  4. #include "heuristics/PEA.h"
  5. class PEAMutationProbaOptimizer : public ParameterOptimizer {
  6. public:
  7. PEAMutationProbaOptimizer(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>=0; 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. /*std::cout << "[" << m_flexive_point << "] ";
  18. for(int i=0, s=probas.size(); i<s; i++)
  19. std::cout << probas[i] << " ";
  20. std::cout << std::endl;
  21. */PEA* algo = new PEA(1, 1, PLUS, probas, randomizer);
  22. MasterMind* mm = new MasterMind(n_initial+i, n_initial+i, randomizer);
  23. algo->set_problem(mm);
  24. return algo;
  25. }
  26. std::string display_context(unsigned int context) {
  27. std::stringstream ss;
  28. ss << "n=" << n_initial+context;
  29. return ss.str();
  30. }
  31. std::string get_context_for_csvfile(unsigned int num_context) {
  32. return std::to_string(n_initial+num_context);
  33. }
  34. private:
  35. unsigned int n_initial;
  36. std::vector<double> m_probas;
  37. unsigned int m_flexive_point;
  38. };
  39. void pea_optimisation(unsigned int n, unsigned int subdivision_size, std::default_random_engine& randomizer) {
  40. std::vector<double> probas;
  41. for(unsigned int i=0; i<=subdivision_size; i++)
  42. probas.push_back(0.);
  43. for(unsigned int k=subdivision_size; k>=0; k--) {
  44. PEAMutationProbaOptimizer pea_mpo(n, probas, k, randomizer);
  45. pea_mpo.set_nb_contexts(1);
  46. if(k==subdivision_size)
  47. pea_mpo.set_study_interval(0.01, 0.3, 0.01);
  48. else if(k > 15)
  49. pea_mpo.set_study_interval(0.01, 0.5, 0.01);
  50. else if(k > 10)
  51. pea_mpo.set_study_interval(0.01, 0.7, 0.01);
  52. else if(k > 5)
  53. pea_mpo.set_study_interval(0.01, 0.9, 0.01);
  54. else
  55. pea_mpo.set_study_interval(0.01, 0.99, 0.01);
  56. pea_mpo.add_test_wave(500, 2.2481733216, 0);
  57. //pea_mpo.add_test_wave(8000, 2.243091696, 1);
  58. std::vector<ConfidenceInterval> cis = pea_mpo.run(false);
  59. std::cout << "STEP " << k << ": " << cis[0].down << ", " << cis[0].mean << ", " << cis[0].up << std::endl;
  60. double p = (cis[0].down + cis[0].up)/2.;
  61. probas[k] = p;
  62. /*if(k==0) {
  63. for(int j=0; j<=subdivision_size; j++)
  64. probas[j] = p;
  65. } else {
  66. probas[k] = p;
  67. if(k+1<=subdivision_size) probas[k+1] = (2*p+probas[k+1])/3;
  68. if(k+2<=subdivision_size) probas[k+2] = (p+2*probas[k+2])/3;
  69. }*/
  70. std::cout << "==========> " << k << ", " << p << std::endl;
  71. }
  72. }
  73. #endif // BEST_PEA_H_INCLUDED