Un algorithme génétique en Julia - partie 10
Voici le nouveau code de l’algorithme:
J’ai simplement ajouter la fonction mutate
dans crossover
:
Et ça fonctionne:
julia> include("main.jl")
julia> pop = create_population(8, 20)
8-element Array{Chromosome,1}:
Chromosome([0,0,0,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,1])
Chromosome([1,0,1,1,0,0,0,0,1,1,0,1,1,0,1,0,1,0,1,1])
Chromosome([1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,0,0,0,1])
Chromosome([1,1,1,1,1,0,0,0,0,0,1,1,0,1,1,0,1,0,0,1])
Chromosome([0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,1,0,1,0])
Chromosome([0,1,0,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1])
Chromosome([1,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,0,0,0])
Chromosome([1,0,0,0,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0])
julia> scores = score(pop)
8-element Array{Int32,1}:
9
11
9
11
8
9
10
6
julia> selection = tournament(scores)
16-element Array{Int32,1}:
7
7
7
7
...
4
1
1
julia> gen2 = reproduction([], pop, selection)
8-element Array{Chromosome,1}:
Chromosome({1,1,1,0,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0})
Chromosome({1,1,1,0,0,0,1,0,0,1,1,0,0,0,1,1,0,0,0,0})
Chromosome({0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,0,1,0,1,1})
Chromosome({1,0,1,0,0,1,0,0,1,1,1,1,0,1,0,0,1,0,1,1})
Chromosome({1,0,1,1,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1})
Chromosome({1,1,1,1,1,1,0,0,0,0,1,1,0,1,1,1,1,0,0,0})
Chromosome({0,1,1,0,0,0,1,0,0,0,1,1,0,1,1,0,1,0,0,1})
Chromosome({0,0,0,1,1,1,0,0,0,1,0,1,1,0,1,1,0,1,0,1})
Mais un truc me dérange toujours, le tableau est modifié après passage
dans mutate
:
julia> c = chromosome(create_genes(10))
chromosome([0,0,0,1,1,1,1,1,0,1])
julia> d = mutate(c)
Chromosome({0,0,0,1,1,1,1,1,0,1})
julia> c.genes
10-element Array{Int32,1}:
...
julia> d.genes
10-element Array{Any,1}:
...
C’est bien ça, le tableau n’est pas du même type. Bon, ça ne dérange pas l’algorithme et c’est l’occasion d’un prochain article sur Julia ;)
À demain.
/ / / / / / / / / /
« Un algorithme génétique en Julia - partie 9 ---//---
Un algorithme génétique en Julia - partie 11 »