00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __EVOLUTIONARYALGORITHM_H__
00018 #define __EVOLUTIONARYALGORITHM_H__
00019
00020
00021 #include "training_algorithm.h"
00022 #include "../performance_functional/performance_functional.h"
00023
00024 namespace OpenNN
00025 {
00026
00030
00031 class EvolutionaryAlgorithm : public TrainingAlgorithm
00032 {
00033
00034 public:
00035
00036
00037
00039
00040 enum FitnessAssignmentMethod{LinearRanking};
00041
00043
00044 enum SelectionMethod{RouletteWheel, StochasticUniversalSampling};
00045
00047
00048 enum RecombinationMethod{Line, Intermediate};
00049
00051
00052 enum MutationMethod{Normal, Uniform};
00053
00054
00055
00056 explicit EvolutionaryAlgorithm(void);
00057
00058
00059
00060 explicit EvolutionaryAlgorithm(PerformanceFunctional*);
00061
00062
00063
00064 explicit EvolutionaryAlgorithm(TiXmlElement*);
00065
00066
00067
00068
00069 virtual ~EvolutionaryAlgorithm(void);
00070
00071
00072
00076
00077 struct EvolutionaryAlgorithmResults : public TrainingAlgorithm::Results
00078 {
00079
00080
00082
00083 Vector< Matrix<double> > population_history;
00084
00086
00087 Vector< Vector<double> > best_individual_history;
00088
00090
00091 Vector<double> mean_norm_history;
00092
00094
00095 Vector<double> standard_deviation_norm_history;
00096
00098
00099 Vector<double> best_norm_history;
00100
00102
00103 Vector< Vector<double> > evaluation_history;
00104
00106
00107 Vector<double> mean_evaluation_history;
00108
00110
00111 Vector<double> standard_deviation_evaluation_history;
00112
00114
00115 Vector<double> best_evaluation_history;
00116
00118
00119 Vector<double> generalization_evaluation_history;
00120
00122
00123 Vector<double> mean_generalization_evaluation_history;
00124
00126
00127 Vector<double> standard_deviation_generalization_evaluation_history;
00128
00130
00131 Vector<double> best_generalization_evaluation_history;
00132
00134
00135 Vector<double> elapsed_time_history;
00136
00137
00138
00140
00141 double final_mean_norm;
00142
00144
00145 double final_standard_deviation_norm;
00146
00148
00149 double final_best_norm;
00150
00152
00153 double final_mean_performance;
00154
00156
00157 double final_standard_deviation_performance;
00158
00160
00161 double final_best_performance;
00162
00164
00165 double elapsed_time;
00166
00167 void resize_training_history(const unsigned int&);
00168 std::string to_string(void) const;
00169 };
00170
00171
00172
00173
00174
00175
00176
00177
00178 const double& get_warning_parameters_norm(void) const;
00179
00180 const double& get_error_parameters_norm(void) const;
00181
00182
00183
00184 const double& get_minimum_parameters_increment_norm(void) const;
00185
00186 const double& get_minimum_performance_increase(void) const;
00187 const double& get_performance_goal(void) const;
00188 const unsigned int& get_maximum_generalization_evaluation_decreases(void) const;
00189
00190 const unsigned int& get_maximum_generations_number(void) const;
00191 const double& get_maximum_time(void) const;
00192
00193
00194
00195 const bool& get_reserve_parameters_history(void) const;
00196 const bool& get_reserve_parameters_norm_history(void) const;
00197
00198 const bool& get_reserve_evaluation_history(void) const;
00199 const bool& get_reserve_generalization_evaluation_history(void) const;
00200
00201 const bool& get_reserve_elapsed_time_history(void) const;
00202
00203
00204
00205 const unsigned int& get_display_period(void) const;
00206
00207
00208
00209 unsigned int get_population_size(void) const;
00210
00211 const Matrix<double>& get_population(void) const;
00212
00213
00214
00215 const FitnessAssignmentMethod& get_fitness_assignment_method(void) const;
00216 std::string write_fitness_assignment_method(void) const;
00217
00218 const SelectionMethod& get_selection_method(void) const;
00219 std::string write_selection_method(void) const;
00220
00221 const RecombinationMethod& get_recombination_method(void) const;
00222 std::string write_recombination_method(void) const;
00223
00224 const MutationMethod& get_mutation_method(void) const;
00225 std::string write_mutation_method(void) const;
00226
00227
00228
00229 const Vector<double>& get_performance(void) const;
00230 const Vector<double>& get_fitness(void) const;
00231 const Vector<bool>& get_selection(void) const;
00232
00233 const bool& get_elitism(void) const;
00234 const double& get_selective_pressure(void) const;
00235
00236 const double& get_recombination_size(void) const;
00237 const double& get_mutation_rate(void) const;
00238 const double& get_mutation_range(void) const;
00239 const double& get_mean_performance_goal(void) const;
00240 const double& get_standard_deviation_performance_goal(void) const;
00241
00242 const bool& get_reserve_population_history(void) const;
00243 const bool& get_reserve_best_individual_history(void) const;
00244 const bool& get_reserve_mean_norm_history(void) const;
00245 const bool& get_reserve_standard_deviation_norm_history(void) const;
00246 const bool& get_reserve_best_norm_history(void) const;
00247
00248 const bool& get_reserve_mean_evaluation_history(void) const;
00249 const bool& get_reserve_standard_deviation_evaluation_history(void) const;
00250 const bool& get_reserve_best_evaluation_history(void) const;
00251
00252
00253
00254 void set(void);
00255 void set(PerformanceFunctional*);
00256
00257 void set_default(void);
00258
00259 void set_fitness_assignment_method(const FitnessAssignmentMethod&);
00260 void set_fitness_assignment_method(const std::string&);
00261
00262 void set_selection_method(const SelectionMethod&);
00263 void set_selection_method(const std::string&);
00264
00265 void set_recombination_method(const RecombinationMethod&);
00266 void set_recombination_method(const std::string&);
00267
00268 void set_mutation_method(const MutationMethod&);
00269 void set_mutation_method(const std::string&);
00270
00271 void set_population_size(const unsigned int&);
00272
00273 void set_population(const Matrix<double>&);
00274
00275 void set_performance(const Vector<double>&);
00276 void set_fitness(const Vector<double>&);
00277 void set_selection(const Vector<bool>&);
00278
00279 void set_elitism(const bool&);
00280 void set_selective_pressure(const double&);
00281 void set_recombination_size(const double&);
00282
00283 void set_mutation_rate(const double&);
00284 void set_mutation_range(const double&);
00285
00286 void set_maximum_generations_number(const unsigned int&);
00287 void set_mean_performance_goal(const double&);
00288 void set_standard_deviation_performance_goal(const double&);
00289
00290 void set_reserve_population_history(const bool&);
00291
00292 void set_reserve_best_individual_history(const bool&);
00293
00294 void set_reserve_mean_norm_history(const bool&);
00295 void set_reserve_standard_deviation_norm_history(const bool&);
00296 void set_reserve_best_norm_history(const bool&);
00297
00298 void set_reserve_mean_evaluation_history(const bool&);
00299 void set_reserve_standard_deviation_evaluation_history(const bool&);
00300 void set_reserve_best_evaluation_history(const bool&);
00301
00302 void set_reserve_all_training_history(const bool&);
00303
00304
00305
00306 void set_warning_parameters_norm(const double&);
00307
00308 void set_error_parameters_norm(const double&);
00309
00310
00311
00312 void set_minimum_parameters_increment_norm(const double&);
00313
00314 void set_minimum_performance_increase(const double&);
00315 void set_performance_goal(const double&);
00316 void set_maximum_generalization_evaluation_decreases(const unsigned int&);
00317
00318 void set_maximum_time(const double&);
00319
00320
00321
00322 void set_reserve_parameters_history(const bool&);
00323 void set_reserve_parameters_norm_history(const bool&);
00324
00325 void set_reserve_evaluation_history(const bool&);
00326 void set_reserve_generalization_evaluation_history(const bool&);
00327
00328 void set_reserve_elapsed_time_history(const bool&);
00329
00330
00331
00332 void set_display_period(const unsigned int&);
00333
00334
00335
00336 Vector<double> get_individual(const unsigned int&) const;
00337 void set_individual(const unsigned int&, const Vector<double>&);
00338
00339 double calculate_mean_performance(void) const;
00340 double calculate_standard_deviation_performance(void) const;
00341
00342
00343
00344 void initialize_population(const double&);
00345
00346 void initialize_population_uniform(void);
00347 void initialize_population_uniform(const double&, const double&);
00348 void initialize_population_uniform(const Vector<double>&, const Vector<double>&);
00349
00350 void initialize_population_normal(void);
00351 void initialize_population_normal(const double&, const double&);
00352 void initialize_population_normal(const Vector<double>&, const Vector<double>&);
00353
00354
00355
00356 Vector<double> calculate_population_norm(void) const;
00357
00358
00359
00360 void perform_fitness_assignment(void);
00361 void perform_selection(void);
00362 void perform_recombination(void);
00363 void perform_mutation(void);
00364
00365 void evolve_population(void);
00366
00367 void evaluate_population(void);
00368
00369
00370
00371 void perform_linear_ranking_fitness_assignment(void);
00372
00373
00374
00375 void perform_roulette_wheel_selection(void);
00376 void perform_stochastic_universal_sampling_selection(void);
00377
00378
00379
00380 void perform_intermediate_recombination(void);
00381 void perform_line_recombination(void);
00382
00383
00384
00385 void perform_normal_mutation(void);
00386 void perform_uniform_mutation(void);
00387
00388
00389
00390 EvolutionaryAlgorithmResults* perform_training(void);
00391
00392 std::string write_training_algorithm_type(void) const;
00393
00394
00395
00396 TiXmlElement* to_XML(void) const;
00397 void from_XML(TiXmlElement*);
00398
00399
00400 private:
00401
00402
00403
00405
00406 FitnessAssignmentMethod fitness_assignment_method;
00407
00409
00410 SelectionMethod selection_method;
00411
00413
00414 RecombinationMethod recombination_method;
00415
00417
00418 MutationMethod mutation_method;
00419
00420
00421
00423
00424 Matrix<double> population;
00425
00427
00428 Vector<double> performance;
00429
00431
00432 Vector<double> fitness;
00433
00435
00436 Vector<bool> selection;
00437
00438
00439
00440 bool elitism;
00441
00444
00445 double selective_pressure;
00446
00449
00450 double recombination_size;
00451
00454
00455 double mutation_rate;
00456
00459
00460 double mutation_range;
00461
00462 double mean_performance_goal;
00463
00464 double standard_deviation_performance_goal;
00465
00467
00468 unsigned int maximum_generations_number;
00469
00473
00474 unsigned int maximum_generalization_evaluation_decreases;
00475
00476
00477 bool reserve_population_history;
00478
00481
00482 bool reserve_best_individual_history;
00483
00485
00486 bool reserve_mean_norm_history;
00487
00489
00490 bool reserve_standard_deviation_norm_history;
00491
00493
00494 bool reserve_best_norm_history;
00495
00497
00498 bool reserve_mean_evaluation_history;
00499
00501
00502 bool reserve_standard_deviation_evaluation_history;
00503
00505
00506 bool reserve_best_evaluation_history;
00507
00509
00510 bool reserve_parameters_history;
00511
00513
00514 bool reserve_parameters_norm_history;
00515
00517
00518 bool reserve_evaluation_history;
00519
00520
00522
00523 bool reserve_elapsed_time_history;
00524
00526
00527 bool reserve_generalization_evaluation_history;
00528
00529
00530
00531
00532
00533
00534 double calculate_random_uniform(const double&, const double&) const;
00535 double calculate_random_normal(const double&, const double&) const;
00536
00537
00539
00540 double warning_parameters_norm;
00541
00543
00544 double error_parameters_norm;
00545
00546
00547
00548
00550
00551 double minimum_parameters_increment_norm;
00552
00554
00555 double minimum_performance_increase;
00556
00558
00559 double performance_goal;
00560
00562
00563 double maximum_time;
00564
00566
00567 unsigned int display_period;
00568
00569 };
00570
00571 }
00572
00573 #endif
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592