00001
00002
00003
00004 #ifndef FITYK__GAFIT__H__
00005 #define FITYK__GAFIT__H__
00006 #include <vector>
00007 #include "common.h"
00008 #include "fit.h"
00009
00010
00011 struct Individual
00012 {
00013 std::vector<realt> g;
00014 realt raw_score, phase_2_score, reversed_score, norm_score;
00015 int generation;
00016 Individual (int n) : g(n), raw_score(0) {}
00017 Individual () : g(), raw_score(0) {}
00018 };
00019
00020
00021 class GAfit : public Fit
00022 {
00023 public:
00024 GAfit(Ftk* F);
00025 ~GAfit();
00026 virtual void init();
00027 void autoiter();
00028 private:
00029 int popsize;
00030 int elitism;
00031 char mutation_type;
00032 realt p_mutation;
00033 bool mutate_all_genes;
00034 realt mutation_strength;
00035 char crossover_type;
00036 realt p_crossover;
00037 char selection_type;
00038 bool rank_scoring;
00039 int tournament_size;
00040 int window_size;
00041 realt linear_scaling_a, linear_scaling_c, linear_scaling_b;
00042 realt std_dev_stop;
00043 int iter_with_no_progresss_stop;
00044 int autoplot_indiv_nr;
00045 std::vector<Individual> pop1, pop2, *pop, *opop;
00046 int iteration;
00047 Individual best_indiv;
00048 realt tmp_max;
00049 std::map<char, std::string> Crossover_enum;
00050 std::map<char, std::string> Selection_enum;
00051
00052 void mutation();
00053 void crossover();
00054 void uniform_crossover (std::vector<Individual>::iterator c1,
00055 std::vector<Individual>::iterator c2);
00056 void one_point_crossover (std::vector<Individual>::iterator c1,
00057 std::vector<Individual>::iterator c2);
00058 void two_points_crossover (std::vector<Individual>::iterator c1,
00059 std::vector<Individual>::iterator c2);
00060 void arithmetic_crossover1 (std::vector<Individual>::iterator c1,
00061 std::vector<Individual>::iterator c2);
00062 void arithmetic_crossover2 (std::vector<Individual>::iterator c1,
00063 std::vector<Individual>::iterator c2);
00064 void guaranteed_avarage_crossover (std::vector<Individual>::iterator c1,
00065 std::vector<Individual>::iterator c2);
00066 void scale_score ();
00067 void pre_selection();
00068 void post_selection();
00069 realt max_in_window ();
00070 realt std_dev_based_q();
00071 void do_rank_scoring(std::vector<Individual> *popp);
00072 void roulette_wheel_selection (std::vector<int>& next);
00073 void tournament_selection (std::vector<int>& next);
00074 void stochastic_remainder_sampling(std::vector<int>& next);
00075 void deterministic_sampling_selection(std::vector<int>& next);
00076 std::vector<int>::iterator SRS_and_DS_common (std::vector<int>& next);
00077 bool termination_criteria_and_print_info (int iter);
00078 void print_post_fit_info (realt wssr_before);
00079 void autoplot_in_autoiter();
00080 void compute_wssr_for_ind (std::vector<Individual>::iterator ind);
00081 };
00082
00083 #endif
00084