Skip to content
Snippets Groups Projects
ParticleSwarm.h 3.45 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 "../Network/NeuralNetwork.h"
    #include "../DataSet/DataSet.h"
    #include "../ErrorFunction/ErrorFunctions.h"
    
        size_t coordinate_dim;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        std::vector<double> *coordinate = nullptr;
        std::vector<double> *velocity = nullptr;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        std::vector<double> *optimal_coordinate = nullptr;
    
        ErrorFunction* ef;
    
        void randomize_coordinates();
    
        void randomize_velocity();
    
        void randomize_parameters();
    
        LIB4NEURO_API Particle(ErrorFunction* ef, double *domain_bounds);
        LIB4NEURO_API ~Particle( );
    
        LIB4NEURO_API std::vector<double>* get_coordinate();
    
        LIB4NEURO_API void get_optimal_coordinate(std::vector<double> &ref_coordinate);
    
        LIB4NEURO_API 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's avatar
    Michal Kravcenko committed
        ErrorFunction* f;
    
        size_t func_dim;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        size_t n_particles;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        size_t iter_max;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        std::vector<double> *p_min_glob = nullptr;
    
    
        LIB4NEURO_API Particle* determine_optimal_coordinate_and_value(std::vector<double> &coord, double &val);
    
        LIB4NEURO_API std::vector<double>* get_centroid_coordinates();
    
        LIB4NEURO_API double get_euclidean_distance(std::vector<double>* a, std::vector<double>* b);
    
         * @param ef
    
         * @param f_dim
         * @param domain_bounds
         * @param c1
         * @param c2
         * @param w
         * @param n_particles
         * @param iter_max
         */
    
        LIB4NEURO_API ParticleSwarm( ErrorFunction* ef, std::vector<double> *domain_bounds, double c1 = 1.711897, double c2 = 1.711897, double w = 0.711897, size_t n_particles = 50, size_t iter_max = 1000 );
    
        LIB4NEURO_API void optimize( double gamma, double epsilon, double delta=0.7 );
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        /**
         *
         * @return
         */
    
        LIB4NEURO_API std::vector<double>* get_solution();