void ACSAnt::offline_pheromone_update(OptimizationProblem &op, PheromoneMatrix &pheromones, double weight) { for(unsigned int i=0;i<tour->size();i++) { double pheromone = op.pheromone_update((*tour)[i], tour->get_length()); if(i==0) { pheromones.add(pheromones.size()-1, (*tour)[i], weight * pheromones.get_evaporation_rate() * pheromone); } else { pheromones.add((*tour)[i-1], (*tour)[i], weight * pheromones.get_evaporation_rate() * pheromone); } } }
double compute_average_pheromone_update(OptimizationProblem &op) { SimpleAnt ant(op.get_max_tour_size()); PheromoneMatrix matrix(op.number_of_vertices(), 0.0, 1.0); ant.construct_rational_solution(op, matrix, 0, 1); std::vector<unsigned int> tour = ant.get_vertices(); double tour_length = op.eval_tour(tour); double pheromone_sum = 0.0; for(unsigned int i=0;i<tour.size();i++) { pheromone_sum += op.pheromone_update(tour[i], tour_length); } double pheromone_avg = pheromone_sum / tour.size(); return pheromone_avg; }