Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Un algorithme génétique en Julia - partie 17

| Comments

Niveau : intermédiaire

Aujourd’hui j’ai envie de faire une version récursive de la fonction run. Voici la version actuelle:

1
2
3
4
5
6
7
8
9
10
function run(population_size, genes_size, generations, fight_rate)
  current = create_population(population_size, genes_size)
  for i in 1:generations
    scores = score(current)
    best = maximum(scores)
    println("Generation $i Best $best")
    selection = tournament(scores, fight_rate)
    current = reproduction([], current, selection, population_size)
  end
end

Et en voici une version récursive (avec un helper):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function run(population_size, genes_size, generations, fight_rate)
  current = create_population(population_size, genes_size)
  run_helper(current, population_size, fight_rate, generations)
end

function run_helper(current, population_size, fight_rate, generations,
                    generation = 1)
  scores = score(current)
  best = maximum(scores)
  println("Generation $generation Best $best")
  if generation < generations
    selection = tournament(scores, fight_rate)
    current = reproduction([], current, selection, population_size)
    run_helper(current, population_size, fight_rate, generations, generation + 1)
  end
end

Alors je me doute que je suis sûrement assez maladroit avec Julia, que j’apprend, et avec le style récursif, qui ne coule pas de source chez moi, mais j’ai quand même l’impression que ça n’apporte rien du tout au programme !

Pour l’instant, je pense que je vais me limiter souvent à des boucles for ;)

À demain.

Articles connexes

Commentaires