Xavier Nayrac

Accro au TDD, rubyiste mais pas que, maker, 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