-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPso.hpp
67 lines (59 loc) · 1.31 KB
/
Pso.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once
#include <fstream>
#include "Parameters.hpp"
#include "Particle.hpp"
#include "MathVector.hpp"
struct Result
{
int iterations;
bool success;
Particle::ParticlePtr best;
Result(): iterations(0), success(false) {};
};
std::ostream &operator<<(std::ostream &out, Result r);
struct PSO
{
double (*func)(MathVector);
DimensionLimits dimensionLimits;
Parameters parameters;
Particle::Particles population;
int pop_size;
int dimension;
std::ofstream file;
PSO(double (*f)(MathVector), DimensionLimits dims,
Parameters params): func(f), dimensionLimits(dims),
parameters(params)
{
dimension = dims.min.size();
pop_size = parameters.population;
if(parameters.file != "")
{
file.open(parameters.file);
headerToFile();
}
generatePopulation();
if(parameters.gbest)
addGbestNeighbours();
else if (parameters.lbest > 0)
addLbestNeighbours();
else if (parameters.dynamic)
addSampleNeighbours();
};
~PSO()
{
if (parameters.file != "")
{
footerToFile();
file.close();
}
}
void generatePopulation();
void addSampleNeighbours();
void addLbestNeighbours();
void addGbestNeighbours();
Particle::ParticlePtr getBestParticle();
void headerToFile();
void footerToFile();
void recordState(Result);
Result fmin();
};