Monte Carlo Integration Library 1.0
High-performance Monte Carlo methods for numerical integration and optimization
PSO.hpp
Go to the documentation of this file.
1
10#pragma once
11#include "optimizer.hpp"
12#include <vector>
13#include <random>
14
15namespace mc{
16namespace optim{
17
21 struct PSOConfig {
23 size_t population_size = 50;
25 size_t max_iterations = 100;
26
33 };
34
40 class PSO : public Optimizer {
41 public:
58
62 explicit PSO(const PSOConfig& config = PSOConfig{});
63
68 void setObjectiveFunction(ObjectiveFunction func) override;
73 void setBounds(const Coordinates& lower, const Coordinates& upper) override;
77 void setMode(OptimizationMode mode) override;
82 void setCallback(StepCallback cb) override;
83
88 Solution optimize() override;
93 void step() override;
97 [[nodiscard]] Solution getBestSolution() const override;
98
102 [[nodiscard]] const std::vector<Particle>& getParticles() const {
103 return m_swarm;
104 }
105
106 private:
110 void initialize();
114 void enforceBounds(Particle& p);
115
116 PSOConfig m_config;
118 ObjectiveFunction m_func;
119
120 Coordinates m_lower_bounds;
121 Coordinates m_upper_bounds;
122
123 std::vector<Particle> m_swarm;
124 Solution m_global_best;
125
126 bool m_initialized = false;
127
132 size_t m_current_iter = 0;
133
134 StepCallback m_callback;
135 };
136} //namespace mc
137} //namespace optim
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
Particle Swarm Optimization algorithm.
Definition PSO.hpp:40
Solution optimize() override
Execute the optimization loop for max_iterations.
Definition PSO.cpp:167
const std::vector< Particle > & getParticles() const
Access the current swarm state (particles).
Definition PSO.hpp:102
void setBounds(const Coordinates &lower, const Coordinates &upper) override
Set lower/upper bounds of the search hyper-rectangle.
Definition PSO.cpp:32
void setCallback(StepCallback cb) override
Register a callback invoked after each step().
Definition PSO.cpp:28
void setObjectiveFunction(ObjectiveFunction func) override
Set the objective function to optimize.
Definition PSO.cpp:23
Solution getBestSolution() const override
Get the best solution found so far.
Definition PSO.cpp:178
void step() override
Perform one PSO iteration: update velocity/position, evaluate, update personal and global bests.
Definition PSO.cpp:93
void setMode(OptimizationMode mode) override
Set optimization mode (minimize or maximize).
Definition PSO.cpp:41
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 PSO.
Definition PSO.hpp:21
size_t population_size
Number of particles in the swarm.
Definition PSO.hpp:23
Real social_coeff
Social coefficient (c2): scales attraction to global best.
Definition PSO.hpp:32
Real cognitive_coeff
Cognitive coefficient (c1): scales attraction to particle best.
Definition PSO.hpp:30
Real inertia_weight
Inertia weight (w): scales previous velocity.
Definition PSO.hpp:28
size_t max_iterations
Number of iterations to run the optimizer.
Definition PSO.hpp:25
A single particle in the swarm.
Definition PSO.hpp:45
Real current_value
Objective value at the current position.
Definition PSO.hpp:56
Real best_value
Best objective value found by this particle.
Definition PSO.hpp:54
Coordinates velocity
Current velocity vector.
Definition PSO.hpp:49
Coordinates best_position
Best position found by this particle.
Definition PSO.hpp:52
Coordinates position
Current position in the search space.
Definition PSO.hpp:47
Represents a candidate solution in the search space.
Definition types.hpp:51