tvanderpol

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

seanmor5

Author of Genetic Algorithms in Elixir

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

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

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. :smiley:

Where Next?

Popular Pragmatic Bookshelf topics Top

jamis
The following is cross-posted from the original Ray Tracer Challenge forum, from a post by garfieldnate. I’m cross-posting it so that the...
New
Alexandr
Hi everyone! There is an error on the page 71 in the book “Programming machine learning from coding to depp learning” P. Perrotta. You c...
New
herminiotorres
Hi! I know not the intentions behind this narrative when called, on page XI: mount() |> handle_event() |> render() but the correc...
New
AleksandrKudashkin
On the page xv there is an instruction to run bin/setup from the main folder. I downloaded the source code today (12/03/21) and can’t see...
New
New
AndyDavis3416
@noelrappin Running the webpack dev server, I receive the following warning: ERROR in tsconfig.json TS18003: No inputs were found in c...
New
mert
AWDWR 7, page 152, page 153: Hello everyone, I’m a little bit lost on the hotwire part. I didn’t fully understand it. On page 152 @rub...
New
tkhobbes
After some hassle, I was able to finally run bin/setup, now I have started the rails server but I get this error message right when I vis...
New
redconfetti
Docker-Machine became part of the Docker Toolbox, which was deprecated in 2020, long after Docker Desktop supported Docker Engine nativel...
New
dachristenson
@mfazio23 Android Studio will not accept anything I do when trying to use the Transformations class, as described on pp. 140-141. Googl...
New

Other popular topics Top

PragmaticBookshelf
Stop developing web apps with yesterday’s tools. Today, developers are increasingly adopting Clojure as a web-development platform. See f...
New
AstonJ
poll poll Be sure to check out @Dusty’s article posted here: An Introduction to Alternative Keyboard Layouts It’s one of the best write-...
New
New
AstonJ
I ended up cancelling my Moonlander order as I think it’s just going to be a bit too bulky for me. I think the Planck and the Preonic (o...
New
dimitarvp
Small essay with thoughts on macOS vs. Linux: I know @Exadra37 is just waiting around the corner to scream at me “I TOLD YOU SO!!!” but I...
New
AstonJ
Was just curious to see if any were around, found this one: I got 51/100: Not sure if it was meant to buy I am sure at times the b...
New
AnfaengerAlex
Hello, I’m a beginner in Android development and I’m facing an issue with my project setup. In my build.gradle.kts file, I have the foll...
New
PragmaticBookshelf
An illustrated guide to understanding and effectively using regular expressions. Staffan Nöteberg To effectively use regular expressi...
New
PragmaticBookshelf
This book forgoes the abstract and instead provides concrete examples to help you better leverage the unique properties of Elixir, Erlang...
New
PragmaticBookshelf
As digital systems increasingly run the world, mastery of the recurring patterns of software development risk is the key to fast and effe...
New

Sub Categories: