|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #ifndef BEST_PEA_H_INCLUDED
- #define BEST_PEA_H_INCLUDED
-
- #include <vector>
- #include "heuristics/PEA.h"
-
- class PEAMutationProbaOptimizer : public ParameterOptimizer {
- public:
- 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} {};
- SearchHeuristic* get_context(unsigned int i, double parameter, std::default_random_engine& randomizer) {
- std::vector<double> probas(m_probas);
- for(int k=m_flexive_point; k>=0; k--)
- probas[k] = parameter;
-
-
-
- PEA* algo = new PEA(1, 1, PLUS, probas, randomizer);
- MasterMind* mm = new MasterMind(n_initial+i, n_initial+i, randomizer);
- algo->set_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<double> m_probas;
- unsigned int m_flexive_point;
- };
-
- void pea_optimisation(unsigned int n, unsigned int subdivision_size, std::default_random_engine& randomizer) {
- std::vector<double> probas;
- for(unsigned int i=0; i<=subdivision_size; i++)
- probas.push_back(0.);
-
- for(unsigned int k=subdivision_size; k>=0; k--) {
- PEAMutationProbaOptimizer pea_mpo(n, probas, k, randomizer);
- pea_mpo.set_nb_contexts(1);
- if(k==subdivision_size)
- pea_mpo.set_study_interval(0.01, 0.3, 0.01);
- else if(k > 15)
- pea_mpo.set_study_interval(0.01, 0.5, 0.01);
- else if(k > 10)
- pea_mpo.set_study_interval(0.01, 0.7, 0.01);
- else if(k > 5)
- pea_mpo.set_study_interval(0.01, 0.9, 0.01);
- else
- pea_mpo.set_study_interval(0.01, 0.99, 0.01);
-
- pea_mpo.add_test_wave(500, 2.2481733216, 0);
-
-
- std::vector<ConfidenceInterval> cis = pea_mpo.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.;
- probas[k] = p;
-
-
- std::cout << "==========> " << k << ", " << p << std::endl;
- }
- }
-
- #endif
-
-
|