Skip to content
Snippets Groups Projects
Commit 764be714 authored by Erik Strand's avatar Erik Strand
Browse files

Teach nm to build its own simplex

parent a90557a0
Branches
Tags
No related merge requests found
...@@ -28,6 +28,8 @@ public: ...@@ -28,6 +28,8 @@ public:
MatrixDN const& simplex_vertices() const { return simplex_vertices_; } MatrixDN const& simplex_vertices() const { return simplex_vertices_; }
VectorN const& simplex_values() const { return simplex_values_; } VectorN const& simplex_values() const { return simplex_values_; }
// Constructs a simplex from an initial point by offset all coordinate values.
VectorD optimize(Objective& objective, VectorD const& initial_point, Scalar offset = 1);
// Each row of simplex is a vertex. // Each row of simplex is a vertex.
VectorD optimize(Objective& objective, MatrixDN const& simplex); VectorD optimize(Objective& objective, MatrixDN const& simplex);
...@@ -60,6 +62,23 @@ private: ...@@ -60,6 +62,23 @@ private:
static constexpr Scalar tiny_ = 1e-10; static constexpr Scalar tiny_ = 1e-10;
}; };
//..................................................................................................
template <typename Objective, int32_t D>
auto NelderMead<Objective, D>::optimize(
Objective& objective,
VectorD const& initial_point,
Scalar offset
) -> VectorD {
MatrixDN simplex;
simplex.resize(initial_point.size(), initial_point.size() + 1);
simplex.col(0) = initial_point;
for (uint32_t i = 0; i < initial_point.size(); ++i) {
simplex.col(i + 1) = initial_point;
simplex(i, i + 1) += offset;
}
return optimize(objective, simplex);
}
//.................................................................................................. //..................................................................................................
template <typename Objective, int32_t D> template <typename Objective, int32_t D>
auto NelderMead<Objective, D>::optimize(Objective& objective, MatrixDN const& simplex) -> VectorD { auto NelderMead<Objective, D>::optimize(Objective& objective, MatrixDN const& simplex) -> VectorD {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment