#ifndef IGL_PSO_H #define IGL_PSO_H #include "igl_inline.h" #include #include namespace igl { /// Global optimization with the particle swarm algorithm. /// /// Solve the problem: /// /// minimize f(x) /// subject to lb ≤ x ≤ ub /// /// by particle swarm optimization (PSO). /// /// @param[in] f function that evaluates the objective for a given "particle" location /// @param[in] LB #X vector of lower bounds /// @param[in] UB #X vector of upper bounds /// @param[in] max_iters maximum number of iterations /// @param[in] population number of particles in swarm /// @param[out] X best particle seen so far /// @return objective corresponding to best particle seen so far template < typename Scalar, typename DerivedX, typename DerivedLB, typename DerivedUB> IGL_INLINE Scalar pso( const std::function< Scalar (DerivedX &) > f, const Eigen::MatrixBase & LB, const Eigen::MatrixBase & UB, const int max_iters, const int population, DerivedX & X); /// \overload /// @param[out] P whether each DOF is periodic /// /// \bug `P` appears to be unused template < typename Scalar, typename DerivedX, typename DerivedLB, typename DerivedUB, typename DerivedP> IGL_INLINE Scalar pso( const std::function< Scalar (DerivedX &) > f, const Eigen::MatrixBase & LB, const Eigen::MatrixBase & UB, const Eigen::DenseBase & P, const int max_iters, const int population, DerivedX & X); } #ifndef IGL_STATIC_LIBRARY # include "pso.cpp" #endif #endif