Newer
Older

Michal Kravcenko
committed
/**
* DESCRIPTION OF THE FILE
*
* @author Michal Kravčenko
* @date 2.7.18 -
*/
#ifndef INC_4NEURO_PARTICLESWARM_H
#define INC_4NEURO_PARTICLESWARM_H
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <set>
#include <stdexcept>
#include <random>
#include <iterator>
#include <algorithm>

Michal Kravcenko
committed
#include "../Network/NeuralNetwork.h"
#include "../DataSet/DataSet.h"
#include "../ErrorFunction/ErrorFunctions.h"

Michal Kravcenko
committed
class Particle{
private:

Michal Kravcenko
committed
double *coordinate = nullptr;
double *velocity;
double *optimal_coordinate = nullptr;
double optimal_value;
double r1;
double r2;
double r3;
double current_val;

Michal Kravcenko
committed

Michal Kravcenko
committed
double *domain_bounds;
void print_coordinate();
public:
/**
*
* @param f_dim
*/
Particle(ErrorFunction* ef, double *domain_bounds);

Michal Kravcenko
committed
~Particle( );
Martin Beseda
committed
/**
*
* @return
*/
double* get_coordinate();
/**
*
* @return
*/
double get_current_value();

Michal Kravcenko
committed
/**
*
* @return
*/
double get_optimal_value();
/**
*
* @param ref_coordinate
*/
void get_optimal_coordinate(std::vector<double> &ref_coordinate);

Michal Kravcenko
committed
/**
*
* @param w
* @param c1
* @param c2
* @param glob_min_coord
Martin Beseda
committed
* @param penalty_coef

Michal Kravcenko
committed
*/
double change_coordinate(double w, double c1, double c2, std::vector<double> glob_min_coord, std::vector<std::vector<double>> global_min_vec, double penalty_coef=0.25);

Michal Kravcenko
committed
};
class ParticleSwarm {
private:
/**
*
*/
Particle** particle_swarm = nullptr;
/**
*
*/
double (*func)(NeuralNetwork, double*, DataSet);

Michal Kravcenko
committed

Michal Kravcenko
committed
unsigned int n_particles;
unsigned int iter_max;
double c1;
double c2;
double c3;

Michal Kravcenko
committed
double w;
double global_optimal_value;
double *domain_bounds;
Martin Beseda
committed
protected:

Michal Kravcenko
committed
/**
*
* @param coord
* @param val
Martin Beseda
committed
* @return
*/
Particle* determine_optimal_coordinate_and_value(std::vector<double> &coord, double &val);
Martin Beseda
committed
/**
*
* @return
*/
double* get_centroid_coordinates();
/**
*
* @param a
* @param b
* @param n
* @return

Michal Kravcenko
committed
*/
double get_euclidean_distance(double* a, double* b, unsigned int n);

Michal Kravcenko
committed
public:
/**
*

Michal Kravcenko
committed
* @param f_dim
* @param domain_bounds
* @param c1
* @param c2
* @param w
* @param n_particles
* @param iter_max
*/
ParticleSwarm( ErrorFunction* ef, double* domain_bounds, double c1, double c2, double w, unsigned int n_particles, unsigned int iter_max = 1 );
/**
*
*/

Michal Kravcenko
committed
~ParticleSwarm( );
/**
*
Martin Beseda
committed
* @param gamma

Michal Kravcenko
committed
* @param epsilon
Martin Beseda
committed
* @param delta

Michal Kravcenko
committed
*/
Martin Beseda
committed
void optimize( double gamma, double epsilon, double delta=0.7 );

Michal Kravcenko
committed
};
#endif //INC_4NEURO_PARTICLESWARM_H