tvanderpol
Genetic Algorithms in Elixir: Ch 3 chromosome metadata not maintained (~p 144)
After creating the Chromosome type and updating the one_max script, the size attribute isn’t carried through. I realised that in both crossover() and mutation() the new Chromosome instance isn’t being populated by the relevant parent / existing chromosome. I updated the crossover code to
{c1, c2} = {
%Chromosome{p1 | genes: h1 ++ t2},
%Chromosome{p2 | genes: h2 ++ t1}
}
and similar for mutation:
%Chromosome{chromosome | genes: Enum.shuffle(chromosome.genes)}
That sorted it out.
Unrelated I’m pretty sure there were some typos in the area where we updated all the framework code to carry the Problem definition through (initialise’s arguments were missing something, from memory) but I didn’t take notes.
Cheers,
Thomas
Marked As Solved
seanmor5
Thanks for pointing this out. I’ll go back through and ensure the metadata is retained correctly throughout implementations. I hope these mistakes aren’t detracting from your experience with the book! I appreciate the help in making the book better for everybody.
Also Liked
patrickdm
I’ve also stumped upon the missing size when I tried to use it in crossover/2 as p1.size instead of recalculating length(p1.genes) at each iteration. I took a while to figure out it was not retained after initializing the chromosome’s population.
About the chromosome update you mention, we can discuss if you really want the age to increase after a crossover (when you get a kind of new chromosome) or if we should consider a new generation only after a mutation. But I think this are not so relevant aspects in respect of the main code’s objective.
Similar consideration goes for the silly optimization I made in evaluate/3, when I opted to use the precalculated fitness for the last sorting step:
...
|> Enum.sort_by(& &1.fitness, &>=/2)
tvanderpol
To be honest my Elixir is pretty rusty so having to do a bit of debugging and making sure the code is doing what I think it’s doing is added value for me right now. 
Popular Pragmatic Bookshelf topics
Other popular topics
Categories:
Sub Categories:
Popular Portals
- /elixir
- /rust
- /ruby
- /wasm
- /erlang
- /phoenix
- /keyboards
- /python
- /js
- /rails
- /security
- /go
- /swift
- /vim
- /clojure
- /emacs
- /haskell
- /java
- /svelte
- /onivim
- /typescript
- /kotlin
- /crystal
- /c-plus-plus
- /tailwind
- /react
- /gleam
- /ocaml
- /flutter
- /elm
- /vscode
- /ash
- /html
- /opensuse
- /centos
- /php
- /zig
- /deepseek
- /scala
- /lisp
- /textmate
- /sublime-text
- /react-native
- /nixos
- /debian
- /agda
- /kubuntu
- /arch-linux
- /deno
- /django
- /revery
- /ubuntu
- /manjaro
- /nodejs
- /spring
- /diversity
- /lua
- /julia
- /c
- /slackware







