Aan de slag met Scala.js

De links op deze pagina hebben nog weinig met genetica te maken. Voor een GA is het hoogstens grappig algoritmen als Boyer-Moore en Poisson te gebruiken, maar niet essentieel.

Eerst moest ik vertrouwd worden met Scala.js, in ieder geval tot op het niveau van een bruikbaar alternatief voor een Java-applet. Daarbij moest ik ook een manier vinden om de GUI (grafische gebruikers interface) op te bouwen.
Uiteindelijk heb ik gekozen voor webix. Scala.js is een volwassen techniek, de combinatie met webix ben ik verder nog niet tegengekomen.

Wat wel van belang is, is allerlei soorten webix-controls en de communicatie tussen die controls en Scala.js onder de knie te krijgen.
Ook de conversie van Java naar Scala Is niet triviaal. Er is gebruik gemaakt van een on-line Java to Scala converter, maar dan begint het pas.

FBG

M'n startproject in Scala.js is een Force-Based-Graph.
Ik had het al in Java, het oorspronkelijke voorbeeld was een Flash-programmaatje. Het was een hele klus het om te werken naar Scala, maar leuk te zien dat de code er eleganter van werd.

Force Based Graph

Boyer-Moore

Dat werkte. De communicatie Scala-JavaScript is nog niet helemaal compleet.
De volgende Scala.js-applet, die het Boyer-Moore zoekalgoritme weergeeft, roept ook native JS-code aan. Daarmee is de communicatie geen probleem meer. Alleen het Canvas is nog niet ingebed in webix, misschien dat dat lukt bij Poisson.

Het BM-algoritme had ik al eens geïmplementeerd, maar er bleek een veelzijdiger applet van te circuleren die ik daarna heb gebruikt en nu omgezet naar Scala.

Boyer Moore

Poisson

De poissonverdeling is een statistische verdeling voor zeldzame gebeurtenissen, zoals het aantal dakpannen dat je op je hoofd krijgt in een storm, of zoals het vòòrkomen van mutaties in DNA.

Poisson

Overigens is dit algoritme overbodig voor een GA: als je DNA met een bepaalde waarschijnlijkheid laat muteren gaat dat gewoon volgens deze verdeling. Los daarvan is het selectieproces tamelijk ongevoelig voor dit soort details.
In het programma is één instelling de mutatiefrequentie*, en met dit algoritme krijg je de bijbehorende kans op mutaties. De natuur heeft echter weinig boodschap aan exacte freqenties.

SillyWalks

SillyWalks

KMeans

KMeans


*Eigenlijk zijn het er meer, voor verschillende soorten mutaties

Hier eindigen de inleidende tests.
"Nature" moet een begin maken met het GA-programma