2024-07-20 Giovanny Covarrubias Pazaran * [r1] Initial release: brining a simple genetic algorithm for complex problems. 2024-08-20 Giovanny Covarrubias Pazaran * [r2] Improve to have a single fitness function across traits. More efficient matrix operations. Additional examples for how to do regression and add contraints. 2024-09-25 Giovanny Covarrubias Pazaran * [r2] Added additional arguments for stopping criteria and to keepBest to trace the path to the best solution. * [r2] Added mutRate and nChr arguments to control the mutation rate and recombination rate. 2024-10-15 Giovanny Covarrubias Pazaran * [r3] Now the traits with zero variance also work without errors * [r3] We print in the console the generation, number of removed solutions/individuals based on constraints, total number of individuals left and genetic variance * [r3] Now we allow to set different number of chromosomes which allows for a greater recombination rate by avoiding the LD and interference of having too many QTLs in the same chromosome 2025-01-18 Giovanny Covarrubias Pazaran * [r4] We set the OMP_THREAD_LIMITS to 2 with the .onLoad function to avoid CRAN checks to reject for using more than 2 cores during the vignette building step 2025-04-18 Giovanny Covarrubias Pazaran * [r5] Now the returning object from the evolafit function is an extended class of the 'Pop-class' object from AlphaSimR, an S4 object. * [r5] We changed the name of the argument to make the use of fitness functions more straightforward. * [r5] We added the fixQTLperInd argument to allow users to fix the number of activated QTLs for regression optimization problems * [r5] A fitness function named regFun has been added for regression problems. * [r5] A fitness function named inbFun has been added for problems where only the group relationship will be used as selection criteria. * [r5] The function to import haplotypes now accepts sparse matrices, especially useful for problems with many QTLs * [r5] Now we have added the Ne argument for the user to decide how many initial solutions are used as founder population * [r5] Now the bestSol() function returns n solutions. ## TO DO + Rename score by fitness in the score table + Double check that mutation goes both directions, maybe an additional argument. + Not only allow the posibility of mutation in the genome, but also in the addtive effects (mutRateTrait)