Add number of iterations of the solution as well

This commit is contained in:
Segcolt 2024-10-12 19:42:48 -03:00
parent 859b34308c
commit 70f0125d13
2 changed files with 19 additions and 2 deletions

6
sa.cpp
View File

@ -13,8 +13,11 @@ auto sa::solution::simulated_annealing(int capacity, const std::vector<long long
std::default_random_engine eng(rdevice());
std::uniform_real_distribution<> rand(0, 1);
int iteration = 0;
while (temp > temp_min) {
sa::solution neighbor(prev);
iteration++;
sa::solution neighbor(prev, iteration);
neighbor.setneighbor();
int diff = prev.fitness - neighbor.fitness;
@ -29,5 +32,6 @@ auto sa::solution::simulated_annealing(int capacity, const std::vector<long long
}
}
best.setiterations(iteration);
return best;
}

15
sa.hpp
View File

@ -14,6 +14,8 @@ class solution {
std::default_random_engine gen;
int capacity;
int fitness;
int iterations;
int iteration;
auto calculate_boxes()->int {
int count = 1;
@ -43,9 +45,13 @@ class solution {
public:
solution() = default;
solution(const solution &other, int itr): items(other.items), gen(other.gen),
capacity(other.capacity), fitness(other.fitness),
iteration(itr) {}
solution(const std::vector<long long> &items, int capacity): // Gera a solução inicial
items(items), gen(std::random_device()()), capacity(capacity),
fitness(calculate_boxes()) {}
fitness(calculate_boxes()), iteration(0) {}
void setneighbor() { // Gera um vizinho da solução
std::uniform_int_distribution<> dist(0, items.size() - 1);
@ -68,9 +74,12 @@ class solution {
std::swap(items, other.items);
std::swap(capacity, other.capacity);
std::swap(gen, other.gen);
std::swap(iteration, other.iteration);
}
void print_sol() const {
std::cout << "Iteração da solução: " << iteration << '\n';
std::cout << "Número de iterações calculadas: " << iterations << '\n';
std::cout << "Número de caixas: " << fitness << '\n';
int box_now = 1;
@ -92,6 +101,10 @@ class solution {
std::cout << '\n';
}
void setiterations(int itr) {
iterations = itr;
}
static auto simulated_annealing(int capacity, const std::vector<long long> &items,
double alpha, double temp,
double temp_min)->solution;