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 5

| Comments

Niveau : intermédiaire

Aujourd’hui je cherche à faire une fonction crossover, pour effectuer un croisement entre deux chromosomes.

Soit les deux chromosomes suivants:

julia> a = [1, 2, 3, 4, 5]

julia> b = [6, 7, 8, 9, 0]

Pour obtenir la taille d’un tableau:

julia> length(a)
5

Pour obtenir le point de croisement, on tire au hasard:

julia> cut_point = rand(1:length(a))
4

Le nouveau chromosome sera composé du début du premier, jusqu’au point de croisement:

julia> cut_point = 3
3
julia> a[1:cut_point]
3-element Array{Int32,1}:
 1
 2
 3

Puis de la fin du second chromosome:

julia> a[cut_point + 1:end]
2-element Array{Int32,1}:
 4
 5

Si on rassemble tout ça dans un tableau, on obtient notre nouveau chromosome:

julia> [ a[1:cut_point], b[cut_point + 1:end] ]
5-element Array{Int32,1}:
 1
 2
 3
 9
 0

Il ne reste plus qu’à en faire une fonction:

1
2
3
4
function crossover(chromosome1, chromosome2)
  cut_point = rand(1:length(chromosome1))
  [ chromosome1[1:cut_point], chromosome2[cut_point + 1:end] ]
end

À demain.

Articles connexes

Commentaires