| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #ifndef IGL_PSO_H
- #define IGL_PSO_H
- #include "igl_inline.h"
- #include <Eigen/Core>
- #include <functional>
- 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<DerivedLB> & LB,
- const Eigen::MatrixBase<DerivedUB> & 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<DerivedLB> & LB,
- const Eigen::MatrixBase<DerivedUB> & UB,
- const Eigen::DenseBase<DerivedP> & P,
- const int max_iters,
- const int population,
- DerivedX & X);
- }
- #ifndef IGL_STATIC_LIBRARY
- # include "pso.cpp"
- #endif
- #endif
|