Evolving a population#

Solving an optimization problem using an optimization algorithm is, in pagmo, described as evolving a population. In the scientific literature, an interesting discussion has developed over the past decades on whether evolution is or not a form of optimization. In pagmo we take the opposite standpoint and we regard optimization, of all types, as a form of evolution. Regardless on whether you will be using an SQP, an interior point optimizer or an evolutionary strategy solver, in pagmo you will always have to call a method called evolve() to improve over your initial solutions, i.e., your population.

After following the installation guide, you will be able to compile and run C++ pagmo programs. The following example shows the use with no multithreading of an algorithmic evolution:

 1#include <iostream>
 3#include <pagmo/algorithm.hpp>
 4#include <pagmo/algorithms/nsga2.hpp>
 5#include <pagmo/population.hpp>
 6#include <pagmo/problem.hpp>
 7#include <pagmo/problems/dtlz.hpp>
 9using namespace pagmo;
11int main()
13    // 1 - Instantiate a pagmo problem constructing it from a UDP
14    // (user defined problem).
15    problem prob{dtlz(1, 10, 2)};
17    // 2 - Instantiate a pagmo algorithm
18    algorithm algo{nsga2(100)};
20    // 3 - Instantiate a population
21    population pop{prob, 24};
23    // 4 - Evolve the population
24    pop = algo.evolve(pop);
26    // 5 - Output the population
27    std::cout << "The population: \n" << pop;

Place it into a nsga2.cpp text file and compile it (for example) with:

$ g++ -O2 -DNDEBUG -std=c++17 nsga2.cpp -ltbb -lboost_serialization