Tråd: Hello World.
View Single Post
Sitat av |d13m0b Vis innlegg
Credits til slashdot for å komme på denne oppgaven. Svært interessant. Jeg bidrar selv med et innslag i dette. Min versjon er et Hello World program som utvikler en streng til å si "Hello World". Basert på darvinisme.

Starter med en populasjon (2048 stykker) av tilfeldige strenger. Deretter går jeg igjennom hele populasjonen, og beregner hvilke av disse strengene som er nærmest en "target streng (Hello world!)".

Jeg tar så vare på 10% av populasjonen, det er disse som er best egnet til å føre sine "gener" videre til neste generasjon. 90% av populasjonen blir tatt knekken på, og den resterende 10% bruker jeg til å produsere nye strenger. Dette gjøres ved paring av strengene. Ta to strenger, finn et punkt som kalles crossover, og bytt om på verdiene så en ny streng dannes. Har også tatt i betraktning mutasjon. Det er 25% sjangse for at en paring skal resultere i en 1 byte mutasjon.

Bruteforce with a twist.

Og joda, jeg skreiv dette i C++ da jeg i den siste måneden har holdt meg til ANSI C99, så tenkte det kunne være et friskt pust. Det er lenge siden jeg har skrevet C++, så det er sikkert en hel del optimaliseringer som kan gjøres her, men det har ikke vært det som har vært mitt mål her. Ei heller leselighet.

Jeg avviker dog litt fra reglene slashdot har stipulert, men hey! Må nesten det for å vise at evolusjonens gang fører til et resultat jeg ønsker. Det som er interessant med slikt, er at jeg ikke forteller direkte hva som er korrekt måte å gå fram, men at jeg har en funksjon som forteller hvor godt egnet en streng er, og så har jeg et predefinert mål. Måten å komme seg til målet, "finner den ut selv".

Utput:

Kode

Generation 0 Best cromosome with fitness 165, Urgtm4g\dS]8
Generation 1 Best cromosome with fitness 146, iYjfp,?jpZd@
Generation 2 Best cromosome with fitness 107, CidFj!_xgke1
Generation 3 Best cromosome with fitness 102, EhRpl0cdyuh%
Generation 4 Best cromosome with fitness 92, ;blfv Dml`d9
Generation 5 Best cromosome with fitness 63, @dkbo!aboek#
Generation 6 Best cromosome with fitness 59, Egovu&Imxof#
Generation 7 Best cromosome with fitness 50, Lloto!Qypic&
Generation 8 Best cromosome with fitness 48, Ciifv!Ntpmf
Generation 9 Best cromosome with fitness 42, LahdoSeroe$
Generation 10 Best cromosome with fitness 38, Calmr#Ntpmf
Generation 11 Best cromosome with fitness 34, Idktm Seroe$
Generation 12 Best cromosome with fitness 27, Hdflp#Umrk]%
Generation 13 Best cromosome with fitness 20, Idkmq#Xjpke"
Generation 14 Best cromosome with fitness 20, Idkmq#Xjpke"
Generation 15 Best cromosome with fitness 17, Hhlmr Tmpke"
Generation 16 Best cromosome with fitness 14, Idklp Tmpke"
Generation 17 Best cromosome with fitness 12, Hdllp Umrmf
Generation 18 Best cromosome with fitness 11, Hdllp Xmrk`"
Generation 19 Best cromosome with fitness 10, Hdllo#Umrkd"
Generation 20 Best cromosome with fitness 10, HdllpUmrme"
Generation 21 Best cromosome with fitness 9, Hdllo Umrkf"
Generation 22 Best cromosome with fitness 8, Hdllp Umrkd"
Generation 23 Best cromosome with fitness 7, Hdllo Xmrkd#
Generation 24 Best cromosome with fitness 5, Hdllp Xorkd"
Generation 25 Best cromosome with fitness 5, Hdllp Xorkd"
Generation 26 Best cromosome with fitness 5, Hdllp Xorkd"
Generation 27 Best cromosome with fitness 5, Hdllo Xorme"
Generation 28 Best cromosome with fitness 4, Hdllo Xorkd"
Generation 29 Best cromosome with fitness 4, Hdllo Xorkd"
Generation 30 Best cromosome with fitness 4, Hdllo Xorkd"
Generation 31 Best cromosome with fitness 3, Hdllo Workd"
Generation 32 Best cromosome with fitness 3, Hello Xorkd"
Generation 33 Best cromosome with fitness 3, Hello Xorkd"
Generation 34 Best cromosome with fitness 3, Hdllo Xorkd!
Generation 35 Best cromosome with fitness 2, Hello Xorkd!
Generation 36 Best cromosome with fitness 2, Hello Xorld"
Generation 37 Best cromosome with fitness 1, Hello World"
Generation 38 Best cromosome with fitness 1, Hello World"
Generation 39 Best cromosome with fitness 1, Hello World"
Generation 40 Best cromosome with fitness 1, Hello Workd!
Generation 41 Best cromosome with fitness 0, Hello World!
Kildekode: http://helloworldc.pastebin.com/f59b45c15

Edit: Det staves forøvrig Chromosome, ikke cromosome. :/
Vis hele sitatet...
Hehe, har du brukt "The Blind Watchmaker" som inspirasjonskilde her? En stund siden sist jeg leste boka, men jeg kan sverge på at at han fikk laget et lignende program når han ville teste Infinite Monkey-theorem. Tror forresten hans program ble skrevet i BASIC.