Skip to content
Snippets Groups Projects
ParticleSwarm.h 3.03 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;
    
    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;
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        /**
         *
         */
        void print_coordinate();
    
    
        Particle(ErrorFunction* ef, double *domain_bounds);
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        std::vector<double>* get_coordinate();
    
        /**
         *
         * @return
         */
        double get_current_value();
    
    
        /**
         *
         * @return
         */
        double get_optimal_value();
    
        /**
         *
         * @param ref_coordinate
         */
    
        void get_optimal_coordinate(std::vector<double> &ref_coordinate);
    
    Michal Kravcenko's avatar
    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'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;
    
    
        Particle* determine_optimal_coordinate_and_value(std::vector<double> &coord, double &val);
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        std::vector<double>* get_centroid_coordinates();
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        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
         */
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        ParticleSwarm( ErrorFunction* ef, double* domain_bounds, double c1, double c2, double w, size_t n_particles, size_t iter_max = 1 );
    
        void optimize( double gamma, double epsilon, double delta=0.7 );
    
    Michal Kravcenko's avatar
    Michal Kravcenko committed
        /**
         *
         * @return
         */
        std::vector<double>* get_solution();