예제 #1
0
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);
    }
  }
}
예제 #2
0
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;
}