diff --git a/sa.cpp b/sa.cpp index 4e8721e..f449813 100644 --- a/sa.cpp +++ b/sa.cpp @@ -13,8 +13,11 @@ auto sa::solution::simulated_annealing(int capacity, const std::vector 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::vectorint { 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 &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 &items, double alpha, double temp, double temp_min)->solution;