Monte Carlo Integration Library 1.0
High-performance Monte Carlo methods for numerical integration and optimization
GA.hpp
Go to the documentation of this file.
1// GA.hpp
9#pragma once
10#include "optimizer.hpp"
11#include <vector>
12#include <random>
13#include <stdexcept>
14
15namespace mc{
16namespace optim{
17
21 struct GAConfig {
23 size_t population_size = 80;
25 size_t max_generations = 200;
26
28 size_t tournament_k = 3;
29
36
38 size_t elitism_count = 1;
39 };
40
46 class GA : public Optimizer {
47 public:
57
61 explicit GA(const GAConfig& config = GAConfig{});
62
67 void setObjectiveFunction(ObjectiveFunction func) override;
72 void setBounds(const Coordinates& lower, const Coordinates& upper) override;
76 void setMode(OptimizationMode mode) override;
81 void setCallback(StepCallback cb) override;
82
87 Solution optimize() override;
92 void step() override;
96 [[nodiscard]] Solution getBestSolution() const override;
97
101 [[nodiscard]] const std::vector<Individual>& getPopulation() const {
102 return m_population;
103 }
104
105 private:
109 void initialize();
114 void evaluate(Individual& ind);
118 void enforceBounds(Coordinates& x);
119
123 const Individual& tournamentSelect();
127 void crossoverUniform(const Coordinates& p1, const Coordinates& p2,
128 Coordinates& c1, Coordinates& c2);
133 void mutateGaussian(Coordinates& x);
134
138 bool isBetterFitness(Real a, Real b) const;
139
140 GAConfig m_config;
142 ObjectiveFunction m_func;
143
144 Coordinates m_lower_bounds;
145 Coordinates m_upper_bounds;
146
147 std::vector<Individual> m_population;
148 Solution m_global_best;
149
150 std::mt19937 m_rng;
151 bool m_initialized = false;
152
153 StepCallback m_callback;
154 size_t m_generation = 0;
155 };
156
157} //namespace mc
158} //namespace optim
Genetic Algorithm optimizer.
Definition GA.hpp:46
void setMode(OptimizationMode mode) override
Set optimization mode (minimize or maximize).
Definition GA.cpp:43
void setBounds(const Coordinates &lower, const Coordinates &upper) override
Set lower/upper bounds of the search hyper-rectangle.
Definition GA.cpp:34
Solution optimize() override
Run GA for max_generations.
Definition GA.cpp:211
Solution getBestSolution() const override
Get the best solution found so far.
Definition GA.cpp:224
void setCallback(StepCallback cb) override
Register a callback invoked after each generation.
Definition GA.cpp:30
void setObjectiveFunction(ObjectiveFunction func) override
Set the objective function to optimize.
Definition GA.cpp:25
void step() override
Perform one generation: selection, crossover, mutation, evaluation, and serial update of the global b...
Definition GA.cpp:150
const std::vector< Individual > & getPopulation() const
Access the current population.
Definition GA.hpp:101
Abstract base class for all optimization algorithms.
Definition optimizer.hpp:17
std::function< void(const Solution &current_best, size_t iteration)> StepCallback
Callback invoked after each step/generation.
Definition optimizer.hpp:25
OptimizationMode
Optimization goal.
Definition types.hpp:42
std::function< Real(const Coordinates &)> ObjectiveFunction
Objective function signature.
Definition types.hpp:37
std::vector< Real > Coordinates
A point in the N-dimensional search space.
Definition types.hpp:31
double Real
Scalar precision used across optimizers.
Definition types.hpp:26
Abstract optimizer interface for PSO, GA, and future algorithms.
Configuration parameters for GA.
Definition GA.hpp:21
size_t elitism_count
Number of top individuals copied unchanged to next generation.
Definition GA.hpp:38
size_t tournament_k
Tournament size for selection (k >= 2).
Definition GA.hpp:28
Real mutation_rate
Per-gene mutation probability.
Definition GA.hpp:33
size_t population_size
Size of the population.
Definition GA.hpp:23
Real crossover_rate
Probability of performing crossover in reproduction.
Definition GA.hpp:31
Real mutation_sigma
Mutation magnitude (scaled by coordinate span).
Definition GA.hpp:35
size_t max_generations
Number of generations to evolve.
Definition GA.hpp:25
A single population member.
Definition GA.hpp:51
Coordinates genome
Encoded parameters (genome).
Definition GA.hpp:53
Real fitness
Fitness value for this genome.
Definition GA.hpp:55
Represents a candidate solution in the search space.
Definition types.hpp:51