/
jobo_individuals.cpp
41 lines (37 loc) · 984 Bytes
/
jobo_individuals.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "jobo_individuals.h"
#include <cassert>
#include <iostream>
#include <stdexcept>
#include <algorithm>
#include <vector>
#include "jobo_individual.h"
std::vector<double> jobo::calc_fitnesses(const individuals& population) noexcept
{
std::vector<double> fitnesses;
fitnesses.reserve(population.size());
std::transform(
std::begin(population),
std::end(population),
std::back_inserter(fitnesses),
[](const individual& i) { return calc_fitness(i); }
);
assert(fitnesses.size() == population.size());
return fitnesses;
}
bool jobo::is_viable(const individuals& population)
{
const auto fitnesses = calc_fitnesses(population);
return std::count_if(
std::begin(fitnesses),
std::end(fitnesses),
[](const double f) { return f > 0.0; }
) >= 2;
}
std::ostream& jobo::operator<<(std::ostream& os, const individuals& individuals) noexcept
{
for (const auto& individual: individuals)
{
os << individual << '\n';
}
return os;
}