Skip to content
Snippets Groups Projects
ParticleSwarm.h 2.85 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * 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>
    
    #include "../DataSet/DataSet.h"
    #include "../ErrorFunction/ErrorFunctions.h"
    
        size_t coordinate_dim;
    
        double *coordinate = nullptr;
        double *velocity;
    
        double *optimal_coordinate = nullptr;
        double optimal_value;
    
        double r1;
        double r2;
    
        ErrorFunction* ef;
    
        Particle(ErrorFunction* ef, double *domain_bounds);
    
        /**
         *
         * @return
         */
        double get_current_value();
    
    
        /**
         *
         * @return
         */
        double get_optimal_value();
    
        /**
         *
         * @param ref_coordinate
         */
    
        void get_optimal_coordinate(std::vector<double> &ref_coordinate);
    
        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);
    
        double (*func)(NeuralNetwork, double*, DataSet);
    
        size_t func_dim;
    
        Particle* determine_optimal_coordinate_and_value(std::vector<double> &coord, double &val);
    
    
        /**
         *
         * @return
         */
        double* get_centroid_coordinates();
    
        /**
         *
         * @param a
         * @param b
         * @param n
         * @return
    
    David Vojtek's avatar
    David Vojtek committed
        double get_euclidean_distance(double* a, double* b, unsigned int n);
    
         * @param ef
    
         * @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 );
    
        /**
         *
         */
    
        void optimize( double gamma, double epsilon, double delta=0.7 );