La dernière fois on a vu la classe GeneticAlgorithm, qui faisait usage d’une classe IndividualFormatter. Cette classe est le sujet de l’article d’aujourd’hui.

Cette classe, IndividualFormatter, est responsable de la transformation d’un individu de la population en une chaîne de caractères qui véhicule des informations affichables sur cet individu:

class IndividualFormatter

  def self.display(individual:, generation:, items:, capacity:)
    profit, cost = Score.profit_and_cost individual, items
    if cost > capacity
      "<invalid> Gen: #{generation} Profit: #{profit} Cost: #{cost}"
    else
      "VALID     Gen: #{generation} Profit: #{profit} Cost: #{cost}"
    end
  end

  def self.display_best_ever(individual:, items:)
    profit, cost = Score.profit_and_cost individual, items
    "----------------------\n"\
    "Best ever\n"\
    "----------------------\n"\
    "Profit: #{profit}\n"\
    "Cost:   #{cost}\n"\
    "Listing:\n"\
    "#{Individual.listing(chromosome: individual.chromosome, items: items)}"
  end
end

La méthode display est utilisée à chaque génération, pour afficher succintement le meilleur individu trouvé jusqu’ici.

La méthode display_best_ever est elle, utilisée à la fin de l’algorithme, pour afficher la meilleure solution avec plus de détails.

À demain.