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 7

| Comments

Niveau : intermédiaire

Dans le dernier article sur Julia, j’avais eu un problème avec les tableaux. En effet, leur comportement n’est pas celui que j’attendais:

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

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

julia> append!(a, b)
4-element Array{Int32,1}:
 1
 2
 3
 4

Alors que j’attendais plutôt ceci : [ [1, 2], [3, 4] ].

Pour régler ça, on doit pouvoir utiliser les tableaux multi-dimensionnels, que Julia à tendance à nommer des «matrices». Vu mon niveau en math, ça ne m’a pas vraiment attiré ;)

J’ai préféré regarder du coté des types. Pour l’instant, je comprends les types comme des structures dans le genre de C, c’est-à-dire un ensemble de donnés regroupées au sein d’une même référence.

J’ai donc besoin d’un type, que j’appelerais Chromosome, qui va contenir le tableau des gènes:

1
2
3
type Chromosome
  genes
end

On l’utilise comme ceci:

julia> Chromosome([1, 2, 3])
Chromosome([1,2,3])

Je vais devoir modifier un peu les fonctions définies jusqu’ici pour qu’elle fonctionnent avec des Chromosomes. Par exemple, pour créer la population:

1
2
3
4
5
create_chromosome(size) = rand(0:1, size)

function create_population(size, chromosome_size)
  [ Chromosome(create_chromosome(chromosome_size)) for _ in 1:size ]
end

Ce qui donne:

julia> pop = create_population(8, 20)
8-element Array{Chromosome,1}:
 Chromosome([0,1,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0])
 Chromosome([1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,1,0,1])
 Chromosome([1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,1,1,1,0,1])
 Chromosome([1,1,1,1,1,0,0,0,0,1,0,1,1,1,1,1,0,0,0,1])
 Chromosome([0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,1])
 Chromosome([1,0,1,1,0,0,0,1,1,0,1,0,1,1,1,1,0,0,0,1])
 Chromosome([1,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0])
 Chromosome([1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,1,1,1,1,0])

À demain.

Articles connexes

Commentaires