File: GAfit.h

package info (click to toggle)
fityk 1.3.1-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,784 kB
  • sloc: cpp: 34,396; ansic: 4,673; python: 971; makefile: 366; sh: 117; java: 31; ruby: 27; perl: 25; xml: 16
file content (85 lines) | stat: -rw-r--r-- 3,024 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// This file is part of fityk program. Copyright 2001-2013 Marcin Wojdyr
// Licence: GNU General Public License ver. 2+

#ifndef FITYK_GAFIT_H_
#define FITYK_GAFIT_H_
#include <vector>
#include <map>
#include "fityk.h" // realt
#include "fit.h"

namespace fityk {
/// Individual in Genetic Algorithms (i.e. candidate solutions)
struct Individual
{
    std::vector<realt> g;
    realt raw_score, phase_2_score, reversed_score, norm_score;
    Individual (int n) : g(n), raw_score(0) {}
    Individual () : g(), raw_score(0) {}
};

/// Genetic Algorithm method
class GAfit : public Fit
{
public:
    GAfit(Full* F, const char* name);
    ~GAfit();
    virtual double run_method(std::vector<realt>* best_a);
private:
    int popsize;
    int elitism; // = 0, 1, ... popsize
    char mutation_type;
    realt p_mutation;
    bool mutate_all_genes;
    realt mutation_strength;
    char crossover_type;
    realt p_crossover;
    char selection_type;
    bool rank_scoring;
    int tournament_size;
    int window_size;
    realt linear_scaling_a, linear_scaling_c, linear_scaling_b;
    realt std_dev_stop;
    int iter_with_no_progresss_stop;
    int autoplot_indiv_nr;
    std::vector<Individual> pop1, pop2, *pop, *opop;
    int iteration;
    Individual best_indiv;
    realt tmp_max;
    std::map<char, std::string> Crossover_enum;
    std::map<char, std::string> Selection_enum;

    void mutation();
    void crossover();
    void uniform_crossover (std::vector<Individual>::iterator c1,
                            std::vector<Individual>::iterator c2);
    void one_point_crossover (std::vector<Individual>::iterator c1,
                              std::vector<Individual>::iterator c2);
    void two_points_crossover (std::vector<Individual>::iterator c1,
                               std::vector<Individual>::iterator c2);
    void arithmetic_crossover1 (std::vector<Individual>::iterator c1,
                                std::vector<Individual>::iterator c2);
    void arithmetic_crossover2 (std::vector<Individual>::iterator c1,
                                std::vector<Individual>::iterator c2);
    void guaranteed_avarage_crossover (std::vector<Individual>::iterator c1,
                                       std::vector<Individual>::iterator c2);
    void scale_score ();
    void pre_selection();
    void post_selection();
    realt max_in_window ();
    realt std_dev_based_q();
    void do_rank_scoring(std::vector<Individual> *popp);
    void roulette_wheel_selection (std::vector<int>& next);
    void tournament_selection (std::vector<int>& next);
    void stochastic_remainder_sampling(std::vector<int>& next);
    void deterministic_sampling_selection(std::vector<int>& next);
    std::vector<int>::iterator SRS_and_DS_common (std::vector<int>& next);
    bool termination_criteria_and_print_info (int iter);
    void print_post_fit_info (realt wssr_before);
    void autoplot_in_run();
    void compute_wssr_for_ind (std::vector<Individual>::iterator ind);
};

} // namespace fityk
#endif