Nature

Deze pagina is nog slechts een opzetje, en bevat nog geen interessante applets.

Op deze pagina wil ik met een aantal applets het functioneren van de natuurlijke basis van het programma tonen.
Die volgt zoveel mogelijk de natuurlijke opbouw van de genetische machinerie:

  • Een DNA-streng is opgebouwd uit vier basen, ACTG.
    (Adenine, Cytocine, Thymine en Guanine).
  • DNA (de dubbele helix, een chromosoom), wordt weergegeven als enkele string.
    (Variaties in ploïdie* worden meegenomen, maar zijn in de simulatie niet zo belangrijk. Wel om mutaties te demonsteren.)
  • Meerdere chromosomen naast elkaar zijn mogelijk, ze vormen samen het genoom (genotype).
  • De basen coderen in tripletten voor aminozuren, er zijn ook start- en stopcodons
  • Aminozuren vormen samen een eiwit (proteïne)
  • Eiwitten vormen samen een proteïne-pool (de verzameling eiwitten)
  • Op basis van de proteïne-pool wordt uiteindelijk het fenotype van een organisme bepaald
Overigens doen we niet aan meercelligheid, net zo min als aan een ecosysteem (verschillende soorten populaties bij elkaar).

Los van deze natuurlijke datastructuren zal ook de levenscyclus moeten worden geprogrammeerd.

  • Organismen vormen een populatie, generaties volgen elkaar op.
  • Organismen doen het al dan niet goed op basis van hun fenotype in wisselwerking met hun omgeving (fitness)
  • Als ze overleven planten ze zich voort. Hun DNA muteert, ze wisselen het uit (recombinatie/crossing over)
Tot hier zou je kunnen zeggen dat elk GA het zelfde zou kunnen zijn
(los van keuzes zoals imitatie van de natuur belangrijker vinden dan efficiëntie).

Maar op basis van het genotype moet uiteindelijk het fenotype worden bepaald: hoe worden de eiwitten vertaald in concrete eigenschappen?
Het zou daarbij mooi zijn als de codering zoveel mogelijk is losgekoppeld van het uiteindelijke fenotype of de toepassing.

Ook zal de selectie moeten worden geprogrammeerd: waar wordt op geselecteerd, en in wat voor omgeving?
Dit zal allemaal iets vrijer moeten zijn qua afspiegeling van de natuur. Zie daarvoor de volgende pagina's.

*Mensen zijn bijvoorbeeld diploïd: van elk chromosoom hebben we er twee.

TODO
(.............)

Stand van zaken
Los van de GUI ben ik ver gevorderd met Nature, Compete en Convert (de genetische machinerie, levenscyclus, competitie/selectie en omzetten van proteïne-pool naar array).
Ik hik aan tegen het ontbreken van een SAX- (of desnoods DOM-) xml-parser voor Scala.js.
(In het origineel maak ik intensief gebruik van xml-schema.)
Misschien kan ik gebruik maken van de native Javascript xml-parser of fastparse, of moet ik uitwijken naar JSON.

Update 2019:
Ik heb nu een goed werkende parser die functioneert onder Scala.js.
(Een regex-parser die ik heb geport uit Python, met ook een veel prettiger interface dan de xerces-SAX-parser waar ik onder Java mee werkte.)

Stukken van Nature en het selectiemechanisme werken nu, de conversie van DNA via eiwitten naar double-array (en terug, dat kan de natuur niet!), de alignment bij crossing-over, etc.
Ik worstel nu met de generatie van XML op basis van XML-schema (XSD).
Het project vordert gestaag, de echte bottlenecks lijken overwonnen. Maar ik merk dat ik veel gemotiveerder werk aan projecten die nieuw zijn, dan aan een project dat ik al eens gemaakt heb, waar niemand op zit te wachten en waar ik voornamelijk op de taal ben gefocust.

En dat alleen maar om te demonstreren dat evolutie werkt,
een feit waar iedereen natuurlijk al lang van overtuigd is.
Dit is het voorlopige einde van de Genetics-draad
Wordt vervolgd