SedSat3 1.1.6
Sediment Source Apportionment Tool - Advanced statistical methods for environmental pollution research
Loading...
Searching...
No Matches
GA.h
Go to the documentation of this file.
1#ifndef CGACLASS
2#define CGACLASS
3#pragma once
4
5#include "Individual.h"
6#include "GADistribution.h"
7#include "math.h"
8#include <string>
9#include <vector>
10#include <map>
11
12#ifndef mac_version
13#endif
14
15// Forward declaration for GUI support
16class ProgressWindow;
17
27{
35
45 int maxpop = 2;
46
52 int nParam;
53
60
65
74 int nGen;
75
86
94
103 bool sens_out = false;
104
115 bool RCGA = false;
116
126
135 bool Steepest_Descent = false;
136
145 double N;
146
156 double pcross = 1;
157
167 double pmute = 0.02;
168
177 double exponentcoeff = 1;
178
187 double shakescale = 0.05;
188
197 double shakescalered = 0.75;
198
209};
210
219{
226
232 std::string pathname;
233
239 std::string getfromfilename;
240
249 std::string outputfilename;
250};
251
348template<class T>
349class CGA
350{
351public:
359
367
375
383
391 std::vector<double> calc_output_percentiles;
392
399 std::vector<std::vector<double>> initial_pop;
400
407 std::vector<double> final_params;
408
415 std::vector<int> params;
416
423 std::vector<int> loged;
424
430 std::vector<int> to_ts;
431
437 std::vector<double> fixedinputvale;
438
445 std::vector<double> minval;
446
453 std::vector<double> maxval;
454
460 std::vector<bool> apply_to_all;
461
467 std::vector<std::vector<int>> outcompare;
468
475 std::vector<CIndividual> Ind;
476
483 std::vector<CIndividual> Ind_old;
484
491 std::vector<std::string> paramname;
492
499 std::vector<T> Models;
500
507
514
521 CGA();
522
528 virtual ~CGA();
529
536 CGA(const CGA &C);
537
545 CGA operator=(CGA &C);
546
555 CGA(std::string filename, const T& model);
556
563 CGA(T* model);
564
578 void initialize();
579
588 double getfromoutput(std::string filename);
589
597 void getinifromoutput(std::string filename);
598
606 void getinitialpop(std::string filename);
607
629 int optimize();
630
640 bool SetProperty(const std::string &varname, const std::string &value);
641
649 bool SetProperties(const std::map<std::string,std::string> &arguments);
650
666 void InitiatePopulation();
667
673 std::string last_error;
674
675#ifdef Q_GUI_SUPPORT
687 rtw = _rtw;
688 }
689#endif
690
691private:
701 void Setminmax(int a, double minrange, double maxrange, int prec);
702
710
719 void crossover();
720
727 double avgfitness();
728
738 void mutate(double mu);
739
749 void assignfitnesses();
750
757 int maxfitness();
758
766 double variancefitness();
767
775 double stdfitness();
776
783 double avg_actual_fitness();
784
794 void write_to_detailed_GA(std::string s);
795
805 void setnumpop(int n);
806
814 double avg_inv_actual_fitness();
815
825 int optimize(int nGens, char DefOutPutFileName[]);
826
836 void setnparams(int n);
837
845
854 void assignrank();
855
868 void assignfitness_rank(double N);
869
879 void shake();
880
890 void crossoverRC();
891
898 void getfromfile(char filename[]);
899
909 void fillfitdist();
910
919 double assignfitnesses(std::vector<double> inp);
920
931 double Gradient_Descent(std::vector<double> inp);
932
939 int getparamno(int i, int ts);
940
946 int get_act_paramno(int i);
947
953 int get_time_series(int i);
954
962 double evaluateforward();
963
971 double evaluateforward_mixed(std::vector<double> v);
972
980
987
994
995#ifdef Q_GUI_SUPPORT
1003#endif
1004};
1005
1006#include "GA.hpp"
1007
1008#endif // CGACLASS
Genetic Algorithm optimizer for global parameter estimation.
Definition GA.h:350
double MaxFitness
Maximum fitness value in current population.
Definition GA.h:366
void fillfitdist()
Fill fitness distribution for roulette wheel selection.
Definition GA.cpp:754
bool SetProperty(const std::string &varname, const std::string &value)
Set GA property from string key-value pair.
Definition GA.hpp:524
std::vector< std::vector< int > > outcompare
Output comparison indices (legacy, may be unused)
Definition GA.h:467
std::vector< int > params
Parameter indices being optimized.
Definition GA.h:415
int maxfitness()
Find index of individual with maximum fitness.
Definition GA.cpp:670
T * Model
Pointer to the model being optimized.
Definition GA.h:513
void assignrank()
Assign ranks to individuals based on fitness.
Definition GA.cpp:728
int get_time_series(int i)
Get time series index for parameter.
Definition GA.cpp:638
double avg_actual_fitness()
Calculate average of actual (untransformed) fitness values.
Definition GA.cpp:707
void SetRunTimeWindow(ProgressWindow *_rtw)
Set progress window for GUI updates.
Definition GA.h:686
int optimize(int nGens, char DefOutPutFileName[])
Optimize for specified number of generations.
CGA(std::string filename, const T &model)
Constructor from configuration file and model.
std::vector< double > minval
Lower bounds for each parameter.
Definition GA.h:445
bool SetProperties(const std::map< std::string, std::string > &arguments)
Set multiple GA properties from map.
Definition GA.hpp:549
GA_Tweaking_parameters GA_params
GA algorithm configuration parameters.
Definition GA.h:374
std::vector< double > final_params
Final optimized parameter values.
Definition GA.h:407
void shake()
Apply shake/perturbation to population.
Definition GA.cpp:654
virtual ~CGA()
Destructor.
Definition GA.cpp:203
std::vector< CIndividual > Ind
Current population of individuals.
Definition GA.h:475
std::vector< int > to_ts
Time series index for each parameter (if applicable)
Definition GA.h:430
double sumfitness
Sum of all fitness values in current population.
Definition GA.h:358
GADistribution fitdist
Fitness distribution for parent selection.
Definition GA.h:986
CGA operator=(CGA &C)
Assignment operator.
Definition GA.cpp:186
std::vector< double > calc_output_percentiles
Percentiles to calculate for output distributions.
Definition GA.h:391
void setnumpop(int n)
Set population size.
Definition GA.cpp:142
double evaluateforward()
Evaluate model forward (compute predictions)
Definition GA.cpp:775
std::vector< std::string > paramname
Names of parameters being optimized.
Definition GA.h:491
void Setminmax(int a, double minrange, double maxrange, int prec)
Set parameter bounds and precision.
Definition GA.cpp:229
double avg_inv_actual_fitness()
Calculate average of inverse actual fitness.
Definition GA.cpp:717
void crossoverRC()
Real-coded crossover operation.
Definition GA.cpp:351
CGA()
Default constructor.
Definition GA.cpp:12
std::vector< T > Models
Copies of model for parallel fitness evaluation.
Definition GA.h:499
void assignfitnesses()
Evaluate fitness for all individuals in population.
Definition GA.cpp:241
void setnparams(int n)
Set number of parameters.
Definition GA.cpp:129
std::string last_error
Last error message from GA execution.
Definition GA.h:673
int current_generation
Current generation counter.
Definition GA.h:979
int optimize()
Main optimization loop.
Definition GA.cpp:394
T Model_out
Output model configured with best parameters.
Definition GA.h:506
std::vector< double > fixedinputvale
Fixed values for non-optimized parameters.
Definition GA.h:437
void getinifromoutput(std::string filename)
Initialize population from previous output file.
Definition GA.cpp:794
double stdfitness()
Calculate standard deviation of population fitness.
Definition GA.cpp:696
double evaluateforward_mixed(std::vector< double > v)
Evaluate model with mixed parameters.
int getparamno(int i, int ts)
Get parameter index for variable and time series.
Definition GA.cpp:625
void fitnessdistini()
Initialize fitness distribution for selection.
void mutate(double mu)
Apply mutation to population.
Definition GA.cpp:662
double Gradient_Descent(std::vector< double > inp)
Perform gradient descent local search.
std::vector< CIndividual > Ind_old
Previous generation's population.
Definition GA.h:483
void initialize()
Initialize GA structures and allocate memory.
Definition GA.cpp:209
void crossover()
Perform crossover operation on population.
Definition GA.cpp:322
std::vector< bool > apply_to_all
Flags indicating if parameter applies to all entities.
Definition GA.h:460
void getfromfile(char filename[])
Read population from file.
int numberOfThreads
Number of threads for parallel fitness evaluation.
Definition GA.h:993
std::vector< std::vector< double > > initial_pop
Initial population loaded from file.
Definition GA.h:399
std::vector< double > maxval
Upper bounds for each parameter.
Definition GA.h:453
double variancefitness()
Calculate variance of population fitness.
Definition GA.cpp:685
std::vector< int > loged
Flags indicating if parameters are log-transformed.
Definition GA.h:423
ProgressWindow * rtw
Pointer to progress window for GUI updates.
Definition GA.h:1002
int get_act_paramno(int i)
Get active parameter number.
double getfromoutput(std::string filename)
Read best solution from previous output file.
Definition GA.cpp:598
void write_to_detailed_GA(std::string s)
Write detailed GA information to file.
Definition GA.cpp:383
void InitiatePopulation()
Create initial population.
Definition GA.hpp:165
void assignfitness_rank(double N)
Assign fitness using rank-based scheme.
Definition GA.cpp:743
void getinitialpop(std::string filename)
Read initial population from file.
Definition GA.cpp:820
double avgfitness()
Calculate average fitness of population.
Definition GA.cpp:374
void assignfixedvalues()
Assign fixed values to non-optimized parameters.
_filenames filenames
File paths for GA input/output.
Definition GA.h:382
Configuration parameters for Genetic Algorithm optimization.
Definition GA.h:27
int nGen
Number of generations to evolve.
Definition GA.h:74
bool RCGA
Use Real-Coded Genetic Algorithm.
Definition GA.h:115
char fitnesstype
Fitness function type identifier.
Definition GA.h:208
double shakescalered
Reduction factor for shake scale over generations.
Definition GA.h:197
int maxpop
Maximum population size (number of individuals)
Definition GA.h:45
int no_bins
Number of bins for fitness distribution.
Definition GA.h:93
int num_enh
Current enhancement iteration counter.
Definition GA.h:64
double pmute
Mutation probability per gene.
Definition GA.h:167
double shakescale
Scale factor for shake/perturbation operation.
Definition GA.h:187
bool sens_out
Output sensitivity analysis results.
Definition GA.h:103
int cross_over_type
Crossover operator type.
Definition GA.h:85
int totnumparams
Total number of parameters in the optimization problem.
Definition GA.h:34
int numenhancements
Number of enhancement iterations.
Definition GA.h:59
double N
Selection pressure parameter for rank-based selection.
Definition GA.h:145
bool Steepest_Descent
Apply steepest descent local search.
Definition GA.h:135
double exponentcoeff
Exponent coefficient for fitness scaling.
Definition GA.h:177
bool readfromgafile
Read initial population from file.
Definition GA.h:125
int nParam
Number of parameters (may be subset of totnumparams)
Definition GA.h:52
double pcross
Crossover probability.
Definition GA.h:156
File paths for Genetic Algorithm input/output operations.
Definition GA.h:219
std::string getfromfilename
Path to file for reading previous GA results.
Definition GA.h:239
std::string outputfilename
Path to main output file for GA results.
Definition GA.h:249
std::string initialpopfilemame
Path to file containing initial population.
Definition GA.h:225
std::string pathname
Directory path for output files.
Definition GA.h:232