Ultra 0.9.4
Loading...
Searching...
No Matches
rastrigin.cc

Mathematical optimization (Differential Evolution).

/*
* \file
* \remark This file is part of ULTRA.
*
* \copyright Copyright (C) 2024 EOS di Manlio Morini.
*
* \license
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/
*
* \see https://github.com/morinim/ultra/wiki/rastrigin_tutorial
*/
/* CHANGES IN THIS FILE MUST BE APPLIED TO THE LINKED WIKI PAGE */
#include "kernel/ultra.h"
#include <numbers>
double neg_rastrigin(const ultra::de::individual &x)
{
using std::numbers::pi;
constexpr double A = 10.0;
const double rastrigin =
A * x.parameters()
+ std::accumulate(x.begin(), x.end(), 0.0,
[=](double sum, double xi)
{
return sum + xi*xi - A*std::cos(2*pi*xi);
});
return -rastrigin;
}
int main()
{
using namespace ultra;
log::reporting_level = log::lINFO;
const unsigned dimensions(5); // 5D - Rastrigin function
de::problem prob(dimensions, {-5.12, 5.12});
prob.params.population.individuals = 50;
prob.params.evolution.generations = 1000;
de::search search(prob, neg_rastrigin);
const auto res(search.run());
const auto solution(res.best_individual());
const auto value(res.best_measurements().fitness);
std::cout << "Minimum found: " << *value << '\n';
std::cout << "Coordinates: [ ";
for (auto xi : solution)
std::cout << xi << ' ';
std::cout << "]\n";
}
search_stats< individual_t, fitness_t > run(unsigned=1, const model_measurements< fitness_t > &={})
Definition search.h:230
Definition de/individual.h:36
Definition de/problem.h:29
Definition de/search.h:28
Definition search.h:122
std::size_t parameters() const noexcept
Definition vector_individual.h:173
const_iterator begin() const noexcept
Definition vector_individual.h:65
const_iterator end() const noexcept
Definition vector_individual.h:75
std::size_t individuals
Definition parameters.h:54