Un algorithme génétique en Julia - partie 12
Avec ce que j’ai compris au dernier épisode
à propos des types, je peux améliorer la fonction mutate:
function mutate(ch)
  mutator(g) = if rand(1:10) == 1
    g == 1 ? 0 : 1
  else
    g
  end
  Chromosome([ mutator(x)::Int for x in ch.genes ])
endMaintenant les gènes des chromosomes restent toujours des tableaux de Int:
julia> include("main.jl")
mutate (generic function with 1 method)
julia> pop = create_population(8, 20)
8-element Array{Chromosome,1}:
 Chromosome([0,0,0,0,1,0,0,0,1,0,0,1,1,1,0,1,0,1,1,1])
 Chromosome([1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1])
 Chromosome([1,1,1,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0])
 Chromosome([0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,0,0,0,1,1])
 Chromosome([0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,0,0,0,1,1])
 Chromosome([0,0,0,1,0,1,1,1,0,0,1,0,1,0,0,0,0,1,0,0])
 Chromosome([0,1,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1])
 Chromosome([0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1])
julia> scores = score(pop)
8-element Array{Int32,1}:
  9
  9
 10
  8
 10
  7
  8
  6
julia> selection = tournament(scores)
16-element Array{Int32,1}:
 7
 2
 7
 5
 2
 7
 3
 7
 2
 2
 1
 3
 6
 5
 2
 3
julia> gen2 = reproduction([], pop, selection)
8-element Array{Chromosome,1}:
 Chromosome([1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1])
 Chromosome([0,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,0,1,1,1])
 Chromosome([1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,0,0,1,1,1])
 Chromosome([0,0,1,0,1,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1])
 Chromosome([1,1,1,0,1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0])
 Chromosome([0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,0])
 Chromosome([0,0,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,1])
 Chromosome([1,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,1,1,1,0])
À demain.
/ / / / / / / / / /
  
    
      « Un algorithme génétique en Julia - partie 11 ---//---
    
    
      Un algorithme génétique en Julia - partie 13 »