(Ich will dies und das tun...)Evolutionssimulation
Übersicht

![]() |
MikeDeeBetreff: (Ich will dies und das tun...)Evolutionssimulation |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollt schon länger eine Evolutionssimulation machen, aber ich komm mit dem programmieren nicht wirklich schnell vorran und bevor die Idee weg ist Poste ich sie. (und vieleicht hat jemand Lust es zu machen^^)
was noch nicht fertig gedacht ist, ist die Pflanze, mit der finde ich keine zufriedenstellende Lösung Die Simulation startet mit einer Einheit und mehreren Pflanzen. Die Einheit(Tierisch): Jede Einheit hat drei Eigenschaften, Nahrung, Geschwindigkeit, Leben. Und eine Spezialeigenschaft, Energie. Die Eigenschaften haben einen Wert, der bei 1 anfängt und nach oben hin offen ist. Die Spezialeigenschaft, Energie, hat zwei Werte: max-E und aktuelle-E. Die max-E ist die Summe der drei Eigenschaften, wodurch der niedrigste Wert bei drei liegt. Die aktuelle-E berechnet sich aus verschiedenen Faktoren, die später erklärt werden. Die Eigenschaften: Geschwindigkeit: Bestimmt wie weit die Einheit pro Runde kommt. 1 Geschwindigkeit = 1 Schritt, Raster, cm, Pixel oder ähnliches Nahrung: Bestimmt ob die Einheit Fleisch- oder Pflanzenfresser ist. Nahrung < 50 = Pflanzenfresser Nahrung > 50 = Fleischfresser. Man könnte aber auch eine Grenze auf 10 setzen und bei 5 ist der Übergang oder den Wert als Prozentzahl machen, 1 = mit 1% Wahrscheinlichkeit frisst es Fleisch, 73 = mit 73% Wahrscheinlichkeit frisst es Fleisch, usw. Oder man setzt eine Grenze auf 15, bis 5 frisst es Pflanzen, von 6 bis 10 frisst es Pflanzenfresser und von 11 bis 15 frisst es Fleischfresser. Also 100% ist es noch nicht geklärt. Leben: Rein Theoretisch hätte die Geschwindigkeit oder ein nach oben offenes Nahrung den gleichen Effekt, Praktisch wollte ich aber nicht das immer das schnellste oder ein Fleischfresser besser dran ist als die anderen. Energie: Wenn die Einheit etwas frisst steigt die aktuelle-E um eins, wenn sie „angebissen“ wird oder keine Nahrung findet sinkt die aktuelle-E um eins. Wenn die aktuelle-E bei 0 ist stirbt die Einheit, wenn die aktuelle-E gleich der max-E ist teilt sich die Einheit. Bei der neuen Einheit, aus der Teilung ist ein zufälliger Wert höher bzw. niedriger als beim Original. Berechnung der aktuellen Energie: Bei der Teilung bekommt die Original Einheit seine alte aktuelle Energie, die neue Einheit bekommt den Energie Überschuss. (Alte Einheit 1/3, neue Einheit 2/4. Alte Einheit 2/4 neue Einheit 2/5 oder 2/3) (aktuelle-E2/4max-E) Der Simulationsablauf: Die Simulation läuft in Runden ab, welches grob gesagt in 4 Schritten abläuft: Umgebung kontrollieren, Bewegung, Energie berechnen, Aktion Runden Beispiel: (Als Beispiel wird eine Einfach Einheit mit 1/3 Energie genommen. Runde 1 Schritt 1: Die Einheit kontrolliert die Umgebung auf Nahrung und Feinde und sucht sich eine Laufrichtung aus. Schritt 2a Einheit bewegt sich zu einer Nahrungsquelle. Schritt 2b Einheit flieht vor einem Fleischfresser und wird erwischt. Schritt 2c Einheit flieht vor einem Fleischfresser und wird nicht erwischt. Schritt 2d Einheit findet nichts und geht in eine zufällige Richtung. Schritt 3a Einheit bekommt einen Energiepunkt (2/3) Schritt 3b Einheit verliert einen Energiepunkt (0/3) Schritt 3c Einheit verliert einen Energiepunkt (0/3) Schritt 3d Einheit verliert einen Energiepunkt (0/3) Schritt 4a Einheit macht die nächste Runde Schritt 4b Einheit stirbt Schritt 4c Einheit stirbt Schritt 4d Einheit stirbt Schritt 1.1 Die Einheit (wenn sie noch lebt^^) kontrolliert die Umgebung auf Nahrung und Feinde und sucht sich eine Laufrichtung aus. Schritt 2.1a wie 2a - 3a (3/3) Schritt 2.1b wie 2b - 3b (1/3) Schritt 2.1c wie 2c – 3c (1/3) Schritt 2.1d wie 2d – 3d (1/3) Schritt 4.1a Einheit teilt sich, die Energie der alten Einheit geht wieder auf 1/3, bei der neuen Einheit steigt ein Wert und die Energie geht auf 2/4 (neue Einheit(aktuelle-E)=alte Einheit(max-E – aktuelle-E)) Schritt 4.1b Einheit macht die nächste Runde Schritt 4.1c Einheit macht die nächste Runde Schritt 4.1d Einheit macht die nächste Runde |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm netter Ansatz, hab ebenfalls bereits mehre Konzepte zu diesem Thema ausgearbeitet.
Schwachpunkt der ganzen Sache ist aber die Frage welchen Sinn man letzlich aus dieser Konzeptierung ableiten soll.... Prinzipiell ist Evolution das weitergeben von gemachter Erfahrung,genetische Mutation und Verkümmerung bzw. Ausbildung neuer Körperextreme oder Organen, bzw. Umbildung und Erweiterung von Körperextremen zur Anpassung an die Umgebung. Wenn ich dein Beispiel richtig interpretgiert habe, würde bei fortlaufender Evolution keinesfalls eine wirklich effektive Evolution sondern eine rollenspielähnliche Auswertung bereits vorhandener Werte vollzogen werden.Sicher ist das nicht schlecht, daher aber meine Bedenken über den Sinn der ganzen Sache. Ich denke es muss zumindest zu einer gewissen sinngebenden Evolution führen.Das drumherum finde ich persönlich sinngebend, nur halt die Evolution selbst macht für mich keinen Sinn...Ich hatte einen imo sinnvolleren Ansatz mal so formuliert: [...](Anmerkung: Aktionen sollen übrigens per Belohnungs- und Bestrafungspunkte(die Glückshormone simulieren sollen) ausgewertet und katalogiert werden.) Bei der Fortpflanzung bekommt das entstandene Kind die Erinnerungen von Mutter und Vater übergeben.Überschneidet sich eine Erfahrung von Mutter und Vater(weil sie identische Situationen beschreibt) werden die dafür erhaltenen Belohnungs und Bestrafungspunkte zusammenaddiert.So kann Erfahrung durch Vererbung verbessert werden. Nehmen wir an, beide Elternteile haben gemerkt, dass es mehr Belohnungspunkte gibt wenn man bei großem Hunger isst.(Die wohl am häufigsten gemachte Erfahrung) .Das Kind wird somit von anfang an eher den Drang haben bei großem Hunger zu essen als andere Dinge zu machen. [...] Der Sinn dabei ist, durch Evolution die Anpassung der Einheit zu verbessern.Dabei gehe ich davon aus, das Instinkt ein Resultat aus genetischer Information ist, die direkt oder indirekt dem Erben übergeben wird.Der so ausgestattete Erbe hat einen deutlichen Vorteil gegenüber der Elterngeneration. Über viele Generationen hinweg erweitert sich dadurch Wissen und Anpassungsfähigkeit der Einheit. Das vielleicht nur mal so als kleine Anregung^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mir halt gedacht das es diese Energiepunkte gibt, wenn es frisst bekommt es welche, wenn nicht verliert es welche. (max Energie = teilung und 0 Energie = tot)
Dadurch können sich individuen die Nahrung finden sich vermehren und welche die keine Finden Sterben Ausserdem habe ich mir auch gedacht das sich kleine Individuen 1/3 Energie bei genug Nahrung zwar schnell und oft vermehren, aber bei Nahrungsknappheit aussterben. Größere Individuen 30/50 brauchen zwar länger sich zu vermehren, überleben aber auch besser eine Nahrungsknappheit, wodurch sie unter umständen bis zum nächsten Nahrungsüberfluss überleben. und 3. wollte ich ein möglichst einfaches System (der Text ist zwar lang, aber trotzdem ist das Konzept recht einfach) mein nächsten Post kann ich warscheinlich erst nächsten Do. machen cu MikeDee |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm keine schlechte Idee!Hatte ich gar net bedacht....^^"
Allerdings würde sich die Evolution ja dann auf diese Tatsache beschränken oder?Sollte man zum Beispiel andere Lebewesen ins Ökosystem bringen, z.B. Fressfeinde oder sogar agressive Lebensformen die deine Einheit angreifen würden dann nicht erkannt und instinktiell, gemieden oder bekämpft werden oder? MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ganz verstehe ich jetzt den Letzten satz nicht...
aber ich glaube das sich Pflanzenfresser-Fleischfresser schonoch einpendeln, zumal es ja auch den Nahrungswert gibt, und wenn der sich als erfolgreich bewärt wird es Fleischfresser geben, wenn nicht, dann eben nicht^^ p.s. ich weiß, es ist kein Do. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
MikeDee hat Folgendes geschrieben: So ganz verstehe ich jetzt den Letzten satz nicht...
aber ich glaube das sich Pflanzenfresser-Fleischfresser schonoch einpendeln, zumal es ja auch den Nahrungswert gibt, und wenn der sich als erfolgreich bewärt wird es Fleischfresser geben, wenn nicht, dann eben nicht^^ p.s. ich weiß, es ist kein Do. Naja ich hatte mir dabei gedacht, dass es irgendwie für die Einheit die Möglichkeit geben muss, dass sie auf Lebensformen und Einwirkungen in der Umgebung reagieren muss und lernen muss welche Gefahren es meiden und welche Feinde es besiegen kann und vor welchem er lieber wegrennen sollte.... Tiere wissen im Vergleich zum Menschen genau was sie essen können und was nicht, sie wissen welche Tierrasse Feind und wer Freund ist und welche Wesen es gewachsen ist und bei welchem es um sein Leben rennen muss... Evtl. versteh ich nur deinen Ansatz nicht ganz XD Ich dachte mir, dass durch die übergebene Gene diese Informationen an den Erben weitergegeben wird. Haben wir z.B. einen Fleischfresser der die Einheit bedroht in der Nähe merkt die Elterngeneration, dass dieser Fleischfresser eine Bedrohung ist(was sie durch die Erkenntnis gewonnen hat, dass sie durch ihre Anwesenheit Energie verloren hat) und gibt diese Information an die nächste Generation weiter. Diese macht dann evtl. ähnliche Erfahrungen und gibt beide Erfahrungen an seine Kinder weiter. Am Ende entsteht dann eine instinktgesteuerte Abneigung gegen oben genannten Fleischfresser, was die Einheit dann ab einem bestimmten Zeitpunkt dazu bringt den Fleischfresser immer zu meiden. Ich verfolge dabei den Ansatz eines lernfähigen Individuums welches das Ziel verfolgt sich so gut wie möglich in die Umwelt einzufügen und zu überleben. Evtl. unterscheiden sich nur unsere Wirkungsabsichten, in dieser Sache... MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso, ja des hab ich mir ganz einfach ausgedacht. Fleischfresser hab ja einfach einfach einen höheren Nahrungswert und alles was einen höheren Wert (z.b. um 5 höher als der eigene) hat ist ein Feind, alles was einen Niedrigeren Wert (z.b. um 5 niedriger als der eigene) hat ist was zum essen (ausser es ist Pflanzenfresser^^).
Der Fleischfresser kann sich also nur damit Helfen, das es langsamere Tiere findet als es selbst ist. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
Conways Spiel des Lebens | ||
Play Satyr! |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke nicht, dass das Game of Life wirklich das is, was mike und skabus wollen ![]() Ich hab was in die richtung (evolutionssimulation) programmiert. ist zwar weniger ki-lastig (keine vererbung von was ist feind, was ist freund) hat dafür aber evolutuon basierend auf einem genom. das ganze spielt auf Zellebene -> es gibt tierische Zellen / Pflanzenzellen / Viren Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2
SetBuffer BackBuffer() SeedRnd MilliSecs() Type cell Field nr, x#, y#, pic, health#, maxhealth, genom$, nutrition, speed#, photosynth, breedtime, breed#, lifetime, lifespan, kill#, tarnr, startrace Field vircommand, virgenom$[10], infected, activatetime, isfood, generation End Type Dim startgenom$(5) Dim stats(5) Dim stats2#(5) Dim seq_pos$(4,1) Dim current_cell_pic(4,1) Dim chars$(15) Dim saves$(10) Dim saverace(10) Dim savepics(10) For i = 0 To 15 chars$(i) = hex2(i) Next Global maxcells = 200 Global mh1 Const health$ ="001" Const nutrition$ ="002" Const speed$ ="003" Const c_r$ ="004" ;Farbe Const c_g$ ="005" ;Farbe Const c_b$ ="006" ;Farbe seq_pos$(1,0) ="007" seq_pos$(2,0) ="008" seq_pos$(3,0) ="009" seq_pos$(4,0) ="00A" seq_pos$(1,1) ="00B" seq_pos$(2,1) ="00C" seq_pos$(3,1) ="00D" seq_pos$(4,1) ="00E" Const virgenom$ ="F" Const breedtime$ ="010" Const lifespan$ ="011" Const photosynth$ ="012" Const vircommand$ ="013" Const immune$ ="123" Global cells=0 startgenom$(5) = "0013FF0026660030200040FF00500000600000700100801400901400B00100C00100D01401300604FFFF010001011600012015000000000000000000000000000000" startgenom$(4) = "0013FF0026660030200040FF0050FF00600000700100801400901400B00100C00100D01401300604F001010001011600012015000000000000000000000000000000" startgenom$(3) = "0013FF0026660030200040FF0050FF00600000700100801400901400B00100C00100D01401300404FFFF02F3FF06F3FF000000000000000000000000000000000000" startgenom$(2) = "0010280026660030200040FF0050FF00600000700100801400901400B00100C00100D014013001000000000000000000000000000000000000000000000000000000" startgenom$(1) = "0010600020010030200040FF0050FF00600000700100801400901400A00100B00100C00100D01400E0140100C8011600012006000000000000000000000000000000" startgenom$(0) = "001050002FFF0030200040FF00500000600000700100801400900100A01400B00100C00100D01400E0140100C8011600012006000000000000000000000000000000" For i = 0 To 5 savepics(i) = create_save_pic(startgenom$(i)) saves(i+1) = startgenom(i) saverace(i+1) = i Next refreshcells() light = 1 Global foodnr = -1 Global gamespeed = 3 While Not KeyHit(1) Cls mh1 = MouseHit(1) If KeyHit(57) Then refreshcells() If KeyHit(28) Then light = 1-light If KeyHit(60) Then dfood = 1-dfood If KeyHit(61) Then dlight = 1-dlight If dlight Then dltimer = dltimer + 1*gamespeed If dltimer > 300 Then light = 1-light:dltimer = 0 If dfood Then dftimer = dftimer + 1*gamespeed If dftimer > 200 Then dftimer = 0:spawn_food() If light Then ClsColor 50, 50, 50 If light=0 Then ClsColor 0,0,0 For c.cell = Each cell If fast=0 Or (fast=1 And flipframe=1) Then DrawImage c\pic, c\x, c\y If c\isfood = 0 Then If c\nutrition = 1 Then dir = Rand(360) distmax = 200 tarnr = 0 tarx = 0 tary = 0 found = 0 For t.cell = Each cell If t\nutrition = 0 And t\nutrition <> 3 Then found = found + 1 If dist(t\x, t\y, c\x, c\y) < distmax Then distmax=dist(t\x, t\y, c\x, c\y) tarnr=t\nr tarx = t\x tary = t\y EndIf EndIf If found >= stats(4) Then Exit Next If tarnr <> 0 Then dir = ATan2(tary-c\y, tarx-c\x)+180 EndIf c\health = c\health - 1*c\speed/32*gamespeed If light Then If c\health<c\maxhealth Then c\health# = c\health# + c\photosynth/2*gamespeed c\breed = c\breed + .9*gamespeed EndIf ElseIf c\nutrition = 0 c\health = c\health-.01*c\speed/32*gamespeed If c\health > c\maxhealth/2 Then c\breed=c\breed+1.8*gamespeed ok = 0 For t.cell = Each cell If t\nr = c\tarnr Then ok = 1 Next ok=0 If ok = 0 Then tardist = 10000 c\tarnr = 0 For t.cell = Each cell If t\nutrition <> 0 And t\nutrition <> 2 Then If tardist > dist(t\x, t\y, c\x, c\y) Then tardist = dist(t\x, t\y, c\x, c\y):c\tarnr = t\nr EndIf Next EndIf For t.cell = Each cell If t\nr = c\tarnr Then dir = ATan2(t\y-c\y, t\x-c\x) If dist(t\x, t\y, c\x, c\y) < 20 And c\health<c\maxhealth-20 Then c\health=c\health+t\health:t\health=0:t\kill=2 EndIf Next If c\tarnr = 0 Then dir = Rand(360) If c\health > c\maxhealth-20 Then dir = Rand(360) ElseIf c\nutrition = 2 ok = 0 For t.cell = Each cell If t\nr = c\tarnr Then ok = 1 Next ok=0 If ok = 0 Then tardist = 10000 c\tarnr = 0 For t.cell = Each cell If t\nutrition <> 2 And t\infected=0 Then If tardist > dist(t\x, t\y, c\x, c\y) Then tardist = dist(t\x, t\y, c\x, c\y):c\tarnr = t\nr EndIf Next EndIf For t.cell = Each cell If t\nr = c\tarnr Then dir = ATan2(t\y-c\y, t\x-c\x) If dist(t\x, t\y, c\x, c\y) < 20 Then For i = 1 To Len(t\genom$)/4 If readblock$(t\genom$, i) = immune$ Then c\health = 0 Next If c\health = 0 Then For i = 1 To Len(c\genom$)/4 If readblock$(c\genom$, i) = immune$ Then c\health = c\maxhealth Next EndIf If c\health*2>t\health Or (t\nutrition=1 And c\health*4>t\health) Then c\kill = 2 execute = c\vircommand execute = execute Mod 4 If execute = 2 Then t\genom$ = c\genom$ For i = 1 To Len(t\genom$)/4 If readblock$(t\genom$, i) = vircommand$ Then t\genom$ = replace_block$(t\genom$, i+1, "022") t\vircommand = 34 t\startrace = c\startrace c\health=0 EndIf Next EndIf If execute = 1 Then t\genom$ = c\genom$ For i = 1 To Len(t\genom$)/4 If readblock$(t\genom$, i) = vircommand$ Then t\genom$ = replace_block$(t\genom$, i+1, "011") t\vircommand = 17 t\startrace = c\startrace c\health=0 EndIf Next EndIf execute = c\vircommand execute = execute Mod 8 If execute/4 >= 1 Then blocks = Len(t\genom$)/3 For i = 1 To blocks Step 2 rb$ = readblock$(c\genom$, i) If Right(rb$, 1) = virgenom$ Then t\genom = replace_block$(t\genom$, unhex(Left(rb$, 2)), readblock$(c\genom$, i+1)) EndIf Next EndIf t\infected=1 Else t\health = t\health - c\health c\health = -1 EndIf EndIf EndIf Next If c\tarnr = 0 Then dir = Rand(360) Else dir = Rand(360) c\health = c\health - 1*c\speed/32 EndIf If c\health > c\maxhealth Then c\health = c\maxhealth If c\breed > c\breedtime Then c\health = c\maxhealth/3 c\breed = 0 new_cell(c\genom$, c\x+Rand(-10,10), c\y+Rand(-10,10), c\startrace, c\generation) EndIf If c\infected Then execute = c\vircommand Mod 64 If execute/32>=1 Then c\health = c\health - 19 new_cell(c\genom$, c\x+Rand(-10,10), c\y+Rand(-10,10), 2, c\generation) Else execute = execute Mod 32 If execute/16>=1 Then If c\health > 150 Then new_cell(c\genom$, c\x+Rand(-10,10), c\y+Rand(-10,10), 2, c\generation):c\health = c\health-100 EndIf EndIf EndIf c\x = c\x + (Cos(dir)*c\speed/100)*gamespeed c\y = c\y + (Sin(dir)*c\speed/100)*gamespeed c\lifetime = c\lifetime+1*gamespeed h = ImageHeight(c\pic)/2 If c\x > 800 Then c\x = 800 If c\y > 600 Then c\y = 600 If c\x < 0 Then c\x = 0 If c\y < 80+h Then c\y = 80+h If c\nutrition <> 2 Then If c\lifetime > c\lifespan Then c\kill=c\kill+.1*gamespeed If c\health < 20 Then c\kill=c\kill+2 Else If c\health <0 Then c\kill = 2 EndIf EndIf If c\health <0 Then c\kill = 2 If c\kill>1 Then FreeImage(c\pic):Delete c.cell Next rechoose = rechoose - 1 If rechoose = 1 Then key=usekey:ext=0:Goto chooseagain For key = 1 To 10 If KeyHit(key+1) Then If KeyDown(29) Or KeyDown(157) Then ext = 0 While Not MouseHit(2) .chooseagain If savepics(key) Then FreeImage savepics(key) savepics(key) = create_save_pic(saves$(key)) mh1 = MouseHit(1) Color 255, 255, 255 part1g$ = "" part2g$ = "" For i = 1 To 22 part1g$ = part1g$+" "+readblock(saves$(key), i) Next part1g$ = Right(part1g$, Len(part1g$)-1) For i = 23 To 44 part2g$ = part2g$+" "+readblock(saves$(key), i) Next part2g$ = Right(part2g$, Len(part2g$)-1) For i = 2 To 20 Step 2 Line 94+32*i, 40, 94+32*i, 55 Next For i = 2 To 20 Step 2 Line 94+32*i, 55, 94+32*i, 70 Next Text 34, 40, " Genom: "+part1g$ Text 34, 55, " "+part2g$ part1o$ = "" part2o$ = "" For i = 1 To 22 part1o$ = part1o$+" "+readblock(startgenom$(saverace(key)), i) Next part1o$ = Right(part1o$, Len(part1o$)-1) For i = 23 To 44 part2o$ = part2o$+" "+readblock(startgenom$(saverace(key)), i) Next part2o$ = Right(part2o$, Len(part2o$)-1) For i = 2 To 20 Step 2 Line 94+32*i, 10, 94+32*i, 25 Next For i = 2 To 20 Step 2 Line 94+32*i, 25, 94+32*i, 39 Next Text 10, 10, "Startgenom:"+part1o$ Text 10, 25, " "+part2o$ Text 10, 70, "Mutationen: "+count_mutations(saves$(key), startgenom$(saverace(key))) Line 99, 39, 793, 39 Line 0, 70, 800, 70 Color 0, 255, 0 Text 10, 10, " "+compare$(part1o$, part1g$) Text 10, 25, " "+compare$(part2o$, part2g$) Color 255, 0, 0 Text 10, 40, " "+compare$(part1g$, part1o$) Text 10, 55, " "+compare$(part2g$, part2o$) DrawImage savepics(key), 20, 50 If mh1=1 Then If MouseY()>40 And MouseY()<70 Then If MouseX()>98 And MouseX()<98+(Len(part1g$)*8) Then For i = 1 To Len(part1g$) If MouseX()>98+i*8 Then xpos = i Next xpos2# = xpos xpos2# = xpos2#/4 xpos = Floor(xpos2#)+1 If MouseY()<55 Then saves$(key) = modify_block(no_spaces(saves$(key)), xpos) Else saves$(key) = modify_block(no_spaces(saves$(key)), 22+xpos) EndIf usekey = key rechoose = 3 ext = 1 EndIf EndIf EndIf If ext Then Exit If KeyHit(1) Then End Flip Wend Else new_cell(saves(key), MouseX(), MouseY(), saverace(key)) EndIf EndIf Next If MouseHit(2) Then chosen = 0 For c.cell = Each cell h = ImageHeight(c\pic)/2 w = ImageWidth(c\pic)/2 If MouseX() > c\x-w And MouseX() < c\x+w Then If MouseY() > c\y-h And MouseY() < c\y+h Then FreeImage(c\pic) Delete c.cell chosen = 1 EndIf EndIf If chosen Then Exit Next FlushMouse EndIf If mh1 Or statsin Then If fast=0 Or (fast=1 And flipframe=1) Then chosen = 0 For c.cell = Each cell h = ImageHeight(c\pic)/2 w = ImageWidth(c\pic)/2 If MouseX() > c\x-w And MouseX() < c\x+w Then If MouseY() > c\y-h And MouseY() < c\y+h Then If c\genom<>"" Then chosen = c\nr EndIf EndIf If chosen Then Exit Next If chosen Then While Not MouseHit(2) For c.cell = Each cell If chosen = c\nr Then Color 255, 255, 255 part1g$ = "" part2g$ = "" For i = 1 To 22 part1g$ = part1g$+" "+readblock(c\genom$, i) Next part1g$ = Right(part1g$, Len(part1g$)-1) For i = 23 To 44 part2g$ = part2g$+" "+readblock(c\genom$, i) Next part2g$ = Right(part2g$, Len(part2g$)-1) For i = 2 To 20 Step 2 Line 94+32*i, 40, 94+32*i, 55 Next For i = 2 To 20 Step 2 Line 94+32*i, 55, 94+32*i, 70 Next Text 34, 40, " Genom: "+part1g$ Text 34, 55, " "+part2g$ part1o$ = "" part2o$ = "" For i = 1 To 22 part1o$ = part1o$+" "+readblock(startgenom$(c\startrace), i) Next part1o$ = Right(part1o$, Len(part1o$)-1) For i = 23 To 44 part2o$ = part2o$+" "+readblock(startgenom$(c\startrace), i) Next part2o$ = Right(part2o$, Len(part2o$)-1) For i = 2 To 20 Step 2 Line 94+32*i, 10, 94+32*i, 25 Next For i = 2 To 20 Step 2 Line 94+32*i, 25, 94+32*i, 39 Next Text 10, 10, "Startgenom:"+part1o$ Text 10, 25, " "+part2o$ Text 10, 70, "Mutationen: "+count_mutations(c\genom$, startgenom$(c\startrace)) Line 99, 39, 793, 39 Line 0, 70, 800, 70 Color 0, 255, 0 Text 10, 10, " "+compare$(part1o$, part1g$) Text 10, 25, " "+compare$(part2o$, part2g$) Color 255, 0, 0 Text 10, 40, " "+compare$(part1g$, part1o$) Text 10, 55, " "+compare$(part2g$, part2o$) DrawImage c\pic, 20, 50 For i = 1 To 10 If KeyHit(i+1) Then saves$(i)=c\genom$:saverace(i)=c\startrace Next Delay 100 Color 255, 255, 0 If KeyHit(1) Then End Flip EndIf Next Wend EndIf If statsin=1 Then fast=1 statsin=0 Else statsin=1 EndIf EndIf If fast=0 Or (fast=1 And flipframe=1) Then cell_stats() Color 255, 255, 255 Text 10, 10, "Zellen: "+(stats(1)+stats(5))+"/"+maxcells Text 10, 25, "Beste HP: "+stats2(1) Text 10, 40, "Beste MaxHP: "+stats(2) Text 10, 55, "Max Mutationen: "+stats(3) Text 220, 25, "tier. Zellen: "+stats(4) Text 220, 40, "pflanzl. Zellen:"+(stats(1)-stats(4)) Text 220, 55, "Viren: "+stats(5) Text 430, 10, "Max Generation: "+stats(6) Text 430, 25, "Geschwindigkeit:"+gamespeed If fast Then Text 760, 10, ">>" Line 0, 70, 800, 70 For i = 1 To 10 If saves(i) <> "" Then Rect 200+i*20, -1, 11, 21, 0 Text 201+i*20, 3, i EndIf Next If mh1 Then If MouseY()>10 And MouseY()<20 If MouseX()>144+Len(Str(stats(1)))*8 And MouseX()<144+Len(Str(stats(1)))*8+Len(Str(maxcells))*8 maxcells=input2("Maximale Zellenanzahl:") EndIf EndIf EndIf Color 255, 255, 0 EndIf flipframe = 1-flipframe If fast=0 Then Flip If flipframe=0 And fast=1 Then Flip ;If KeyHit(32) Then fast = 1-fast If KeyHit(32) Then gamespeed = gamespeed+1 If KeyHit(31) Then gamespeed = gamespeed-1 If statsin Then fast=0 If KeyHit(59) Then For c.cell = Each cell FreeImage c\pic Delete c.cell Next EndIf Delay 3 Wend End Function input2$(capt$="", opt=0, minlen=0, maxlen=0) ;opt=0: alles, opt=1: int, minlen/maxlen: länge des inputs, 0 für unbegrenzt FlushKeys Color 128, 128, 128 Rect 250, 200, 300, 200 Color 0, 0, 0 Text 400, 250, capt$, 1, 1 Color 0, 0, 0 Rect 300, 300, 200, 16 Color 255, 255, 255 Locate 302, 302 While done=0 done = 0 out$ = Input() If Len(out$)<minlen Or (Len(out$)>maxlen And maxlen<>0) Then new_block$ = "" Color 0, 0, 0 Text 400, 330, "Falsche Länge.", 1, 1 If minlen = 0 Then Text 400, 345, "(höchstens bis "+maxlen+" Zeichen)", 1, 1 EndIf If maxlen = 0 Text 400, 345, "(mindestens "+minlen+" Zeichen)", 1, 1 EndIf If minlen<>0 And maxlen<>0 Then Text 400, 345, "(nur "+minlen+" bis "+maxlen+" Zeichen erlaubt)", 1, 1 EndIf Color 0, 0, 0 Rect 300, 300, 200, 16 Color 255, 255, 255 Locate 302, 302 ElseIf opt =1 Then out2 = out$ If Str(out2) = out$ Then done = 1 Else new_block$ = "" Color 0, 0, 0 Text 400, 330, "Falsche Zeichen.", 1, 1 Text 400, 345, "(nur Ziffern erlaubt)", 1, 1 Color 0, 0, 0 Rect 300, 300, 200, 16 Color 255, 255, 255 Locate 302, 302 EndIf Else done = 1 EndIf Wend FlushKeys FlushMouse Return out$ End Function Function modify_block$(genom$, nr) FlushKeys block$ = readblock$(genom$, nr) Color 128, 128, 128 Rect 250, 200, 300, 200 Color 0, 0, 0 Text 400, 250, block$, 1, 1 Color 0, 0, 0 Rect 300, 300, 200, 16 Color 255, 255, 255 Locate 302, 302 While Len(new_block$)<>3 new_block$ = Upper(Input()) ok = 0 new_block$ = LSet(new_block$, 3) new_block$ = Replace(new_block$, " ", "0") For x = 1 To 3 For y = 0 To 15 ok = ok+(chars$(y)=Mid(new_block$, x, 1)) Next Next If ok<>3 Then new_block$ = "" Color 0, 0, 0 Text 400, 330, "Falsche Zeichen", 1, 1 Text 400, 345, "(nur Hexadezimalzahlen erlaubt)", 1, 1 Color 0, 0, 0 Rect 300, 300, 200, 16 Color 255, 255, 255 Locate 302, 302 EndIf Wend times = Len(genom$)/3 For i = 1 To times If nr<>i Then out$ = out$ + readblock$(genom$, i) Else out$ = out$ + new_block EndIf Next FlushKeys FlushMouse Return out$ End Function Function replace_block$(genom$, nr, repl$) times = Len(genom$)/3 For i = 1 To times If nr<>i Then out$ = out$ + readblock$(genom$, i) Else out$ = out$ + repl$ EndIf Next Return out$ End Function Function no_spaces$(in$) Return Replace(in$, " ", "") End Function Function compare$(genom1$, genom2$) length = Len(genom1$) If length<Len(genom2$) Then length=Len(genom2):genom1$=LSet(genom1$, length) Else genom2$=LSet(genom2$, length) EndIf For i = 1 To length comp1$ = Mid(genom1$, i, 1) comp2$ = Mid(genom2$, i, 1) If comp1$ = comp2$ Then out$=out$+" " Else out$=out$+comp1$ EndIf Next Return out End Function Function count_mutations(genom1$, genom2$) length = Len(genom1$) If length<Len(genom2$) Then length=Len(genom2):genom1$=LSet(genom1$, length) Else genom2$=LSet(genom2$, length) EndIf For i = 1 To length comp1$ = Mid(genom1$, i, 1) comp2$ = Mid(genom2$, i, 1) If comp1$ <> comp2$ Then mutations = mutations+1 EndIf Next Return mutations End Function Function cell_stats() Dim stats(6) Dim stats2(6) For c.cell = Each cell If c\isfood = 0 Then If c\nutrition <> 2 Then stats(1)=stats(1)+1 Else stats(5)=stats(5)+1 EndIf If c\health>stats2(1) Then stats2(1)=c\health If c\maxhealth>stats(2) Then stats(2)=c\maxhealth mutations = count_mutations(c\genom$, startgenom$(c\startrace)) If mutations>stats(3) Then stats(3)=mutations If c\nutrition=0 Then stats(4) = stats(4) + 1 If c\generation>stats(6) Then stats(6)=c\generation EndIf Next End Function Function dist(x1, y1, x2, y2) distance = (x1-x2)^2+(y1-y2)^2 distance = distance^.5 Return distance End Function Function refreshcells() For c.cell = Each cell FreeImage(c\pic) Delete c.cell Next For x = 200 To 600 Step 100 For y = 100 To 500 Step 100 If Rand(1,10) = 10 Then new_cell(startgenom$(0), x, y, 0) ElseIf Rand(1,20) = 1 Then new_cell(startgenom$(2), x, y, 2) Else new_cell(startgenom$(1), x, y, 1) EndIf Next Next End Function Function hex2$(in) out$ = Hex(in) For i = 1 To 8 If Left(out$, 1) = "0" Then out$ = Right(out$, Len(out$)-1) Next If out$="" Then out$="0" Return out$ End Function Function spawn_food() c.cell = New cell c\nr = -foodnr foodnr = foodnr-1 c\x = Rand(0, 800) c\y = Rand(0, 800) c\pic = CreateImage(20, 20) Color 255, 255, 255 SetBuffer ImageBuffer(c\pic) Oval 0, 0, 20, 20, 1 MidHandle c\pic SetBuffer BackBuffer() c\health = 5000 c\maxhealth = 5000 c\nutrition = 1 c\speed = 0 c\lifespan = 100000 c\infected = 1 c\photosynth = 1 c\breedtime = 1000000 c\isfood = 1 h = ImageHeight(c\pic)/2 If c\x > 800 Then c\x = 800 If c\y > 600 Then c\y = 600 If c\x < 0 Then c\x = 0 If c\y < 80+h Then c\y = 80+h End Function Function new_cell(genom$, x, y, race=100, generation=-1) If stats(1)+stats(5)<maxcells Then stats(1) = stats(1) +1 mutate_rate = Rand(-12, 3) cells = cells+1 genom$ = mutate$(genom$, mutate_rate) c.cell = New cell c\nr = cells c\x = x c\y = y c\genom$ = genom$ nut = 0 vgenom = 0 blocks = Len(genom$)/3 Dim current_cell_pic(4,1) For i = 1 To blocks Step 2 b$ = readblock$(genom$, i) If Left(b$,1) = "0" Then If b$ = health$ Then c\health$ = unhex(readblock(genom$, i+1)) Mod 1024 c\maxhealth$ = c\health*3 EndIf If b$ = nutrition$ Then c\nutrition = unhex(readblock(genom$, i+1)) nut = 1 virnut = 0 For v = 1 To 3 virnut = virnut+(Mid(readblock(genom$,i+1), v,1) = "6") Next If c\nutrition > 2047 Then c\nutrition = 0 Else c\nutrition = 1 EndIf If virnut>1 Then c\nutrition = 2 EndIf If b$ = speed$ Then c\speed$ = unhex(readblock(genom$, i+1)) Mod 512 EndIf If b$ = c_r$ Then rc = unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = c_g$ Then gc = unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = c_b$ Then bc = unhex(readblock(genom$, i+1)) Mod 256 EndIf For d=1 To 4 For v=0 To 1 If b = seq_pos$(d,v) Then current_cell_pic(d, v) = unhex(readblock(genom$, i+1)) Mod 64 End If Next Next If b$ = photosynth$ Then c\photosynth = unhex(readblock(genom$, i+1)) Mod 16 EndIf If b$ = breedtime$ Then c\breedtime = 300+unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = lifespan$ Then c\lifespan = unhex(readblock(genom$, i+1)) EndIf If b$ = vircommand$ Then c\vircommand = unhex(readblock(genom$, i+1)) EndIf If b$ = virgenom$ Then c\virgenom$[vgenom] = unhex(readblock(genom$, i+1)) vgenom=vgenom+1 EndIf End If Next If c\nutrition = 1 Then c\speed = c\speed/2 If nut = 0 Then c\nutrition = 3 If race = 100 Then c\startrace = c\nutrition Else c\startrace = race EndIf size = 0 For v = 0 To 1 For i = 0 To 4 size = size+current_cell_pic(i, v) Next If size = 0 Then current_cell_pic(1, v)=1 Next If c\breedtime = 0 And c\nutrition <> 2 Then Delete c.cell:Return If c\nutrition = 2 Then c\activatetime = Rand(1, 50000) c\pic = create_vir_pic(rc, gc, bc) Else c\pic = create_cell_pic(rc, gc, bc) EndIf c\generation = generation+1 EndIf End Function Function create_save_pic(genom$) c.cell = New cell c\nr = cells c\x = x c\y = y c\genom$ = genom$ nut = 0 vgenom = 0 blocks = Len(genom$)/3 Dim current_cell_pic(4,1) For i = 1 To blocks Step 2 b$ = readblock$(genom$, i) If Left(b$,1) = "0" Then If b$ = health$ Then c\health$ = unhex(readblock(genom$, i+1)) Mod 1024 c\maxhealth$ = c\health*3 EndIf If b$ = nutrition$ Then c\nutrition = unhex(readblock(genom$, i+1)) nut = 1 virnut = 0 For v = 1 To 3 virnut = virnut+(Mid(readblock(genom$,i+1), v,1) = "6") Next If c\nutrition > 2047 Then c\nutrition = 0 Else c\nutrition = 1 EndIf If virnut>1 Then c\nutrition = 2 EndIf If b$ = speed$ Then c\speed$ = unhex(readblock(genom$, i+1)) Mod 512 EndIf If b$ = c_r$ Then rc = unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = c_g$ Then gc = unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = c_b$ Then bc = unhex(readblock(genom$, i+1)) Mod 256 EndIf For d=1 To 4 For v=0 To 1 If b = seq_pos$(d,v) Then current_cell_pic(d, v) = unhex(readblock(genom$, i+1)) Mod 64 End If Next Next If b$ = photosynth$ Then c\photosynth = unhex(readblock(genom$, i+1)) Mod 16 EndIf If b$ = breedtime$ Then c\breedtime = 300+unhex(readblock(genom$, i+1)) Mod 256 EndIf If b$ = lifespan$ Then c\lifespan = unhex(readblock(genom$, i+1)) EndIf If b$ = vircommand$ Then c\vircommand = unhex(readblock(genom$, i+1)) EndIf If b$ = virgenom$ Then c\virgenom$[vgenom] = unhex(readblock(genom$, i+1)) vgenom=vgenom+1 EndIf End If Next If c\nutrition = 1 Then c\speed = c\speed/2 If nut = 0 Then c\nutrition = 3 If race = 100 Then c\startrace = c\nutrition Else c\startrace = race EndIf size = 0 For v = 0 To 1 For i = 0 To 4 size = size+current_cell_pic(i, v) Next If size = 0 Then current_cell_pic(1, v)=1 Next If c\breedtime = 0 And c\nutrition <> 2 Then Delete c.cell:Return If c\nutrition = 2 Then c\activatetime = Rand(1, 50000) c\pic = create_vir_pic(rc, gc, bc) Else c\pic = create_cell_pic(rc, gc, bc) EndIf sp = c\pic Delete c.cell Return sp End Function Function create_cell_pic(r, g, b) If r = 0 Then r = 20 If g = 0 Then g = 20 If b = 0 Then b = 20 Color r, g, b While xmax+ymax < 40 ct = ct+1 xmax = 0 ymax = 0 For i = 1 To 4 If current_cell_pic(i,1) > xmax Then xmax = current_cell_pic(i,1) If current_cell_pic(i,0) > ymax Then ymax = current_cell_pic(i,0) Next If xmax+ymax < 40 Then For i = 1 To 4 current_cell_pic(i,0) = current_cell_pic(i,0)*2 current_cell_pic(i,1) = current_cell_pic(i,1)*2 Next EndIf If xmax = 0 Then For i = 1 To 4 current_cell_pic(i,0) = 1 Next EndIf If ymax = 0 Then For i = 1 To 4 current_cell_pic(i,1) = 1 Next EndIf If ct = 100 Then Exit Wend pic = CreateImage(ymax+1, xmax+1) SetBuffer ImageBuffer(pic) For i = 1 To 4 nx = i+1 If nx>4 Then nx = 1 Line current_cell_pic(i, 0), current_cell_pic(i, 1), current_cell_pic(nx, 0), current_cell_pic(nx, 1) Next SetBuffer BackBuffer() MidHandle pic Return pic End Function Function create_vir_pic(r, g, b) If r = 0 Then r = 20 If g = 0 Then g = 20 If b = 0 Then b = 20 Color r, g, b xmax = 0 ymax = 0 For i = 1 To 3 For v = 0 To 1 current_cell_pic(i,v) = current_cell_pic(i,v)/4 Next Next For i = 1 To 3 If current_cell_pic(i,0) > xmax Then xmax = current_cell_pic(i,1) If current_cell_pic(i,1) > ymax Then ymax = current_cell_pic(i,0) Next pic = CreateImage(ymax+1, xmax+1) SetBuffer ImageBuffer(pic) For i = 1 To 3 nx = i+1 If nx>3 Then nx = 1 Line current_cell_pic(i, 0), current_cell_pic(i, 1), current_cell_pic(nx, 0), current_cell_pic(nx, 1) Next SetBuffer BackBuffer() MidHandle pic Return pic End Function Function mutate$(genom$, rate) If rate>0 Then For i = 1 To rate If Rand(1,8) = 8 Then sp = Rand(1, Len(genom$)-1) genom$ = cutout_sequence$(genom$, sp, sp) Else sp = Rand(1, Len(genom$)-1) genom$ = replace_sequence$(genom$, sp, sp) EndIf Next EndIf Return genom$ End Function Function readblock$(genom$, block) Return Mid(genom$, block*3-2, 3) End Function Function replace_sequence$(genom$, start, ende) genom_end$ = Right(genom$, Len(genom)-ende) genom$ = Left(genom$, start-1) If ende-start+1>0 Then For i = 1 To ende-start+1 genom$ = genom$+chars$(Rand(0,15)) Next EndIf genom$ = genom$+genom_end$ Return genom$ End Function Function cutout_sequence$(genom$, start, ende) genom_end$ = Right(genom$, Len(genom)-ende) genom$ = Left(genom$, start-1)+genom_end$ For i = 1 To ende-start+1 genom$ = genom$+"0" Next Return genom$ End Function Function unhex(in$) For i = 1 To Len(in$) out = out+unhex_1(in$, i)*16^(Len(in$)-i) Next Return out End Function Function unhex_1(in$, pos) in$ = Mid(in$, pos, 1) For i = 0 To 15 If chars$(i) = in$ Then Return i Next End Function Steuerung: F1: Killt alles F2: spawnt periodisch futter. gut um evolution bei tierischen zellen zu beobachten. F3: schaltet periodisch das licht an/aus. gut um evolution bei pflanzenzellen zu beobachten. 1-9: spawnt die auf der jeweiligen taste gespeicherte zelle linksklick: wählt eine zelle aus und zeigt ihr genom an 1-9 während eine zelle ausgewählt ist: speichert die ausgewählte zelle auf der jeweiligen taste strg+1-9: zeigt das genom der auf der jeweiligen taste gespeicherten zelle an. klick auf einen genomteil um diesen zu modifizieren. die bedeutungen der jeweiligen genomsegmente kann ich auf wunsch posten. rechtsklick auf eine zelle: löscht diese Leer: spawnt 25 zellen |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
maximilian |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ich denke nicht, dass das Game of Life wirklich das is, was mike und skabus wollen Wink
Aber genau sowas sollten sie machen. Evolution ist sehr "lowlevel". Am besten wäre es, ein einfaches Teilsystem zu entwickeln, in dem es Dinge geben kann, ähnlich wie unsere bekannte DNA. Mit dem Ansatz wie oben beschrieben kann man sich richtigen Evolutionsprozessen nichtmal annähren. |
||
Variety is the spice of life. One day ignore people, next day annoy them. |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
LordChaos hat Folgendes geschrieben: Zitat:
Ich denke nicht, dass das Game of Life wirklich das is, was mike und skabus wollen Wink
Aber genau sowas sollten sie machen. Evolution ist sehr "lowlevel". Am besten wäre es, ein einfaches Teilsystem zu entwickeln, in dem es Dinge geben kann, ähnlich wie unsere bekannte DNA. Mit dem Ansatz wie oben beschrieben kann man sich richtigen Evolutionsprozessen nichtmal annähren. Etwas genauer vielleicht? Weenn du sachkundige Ahnung von diesem Thema hast wäre ich dir sehr verbunden wenn du uns mit deinem Wissen beehren würdest... Ansonsten ist die Aussage ziemlich für den Garten... MfG Ska @DAK: Sehr interessante Arbeit, vielen Dank^^ |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
LordChaos hat Folgendes geschrieben: Zitat:
Ich denke nicht, dass das Game of Life wirklich das is, was mike und skabus wollen Wink
Aber genau sowas sollten sie machen. Evolution ist sehr "lowlevel". Am besten wäre es, ein einfaches Teilsystem zu entwickeln, in dem es Dinge geben kann, ähnlich wie unsere bekannte DNA. Mit dem Ansatz wie oben beschrieben kann man sich richtigen Evolutionsprozessen nichtmal annähren. Game of Life ist doch noch weiter von einem "Evolutionsprozess" entfernt, da spielt nichtmal der Zufall eine Rolle und ich sehe auch nicht wo was ähnliches wie eine DNA sein soll. Ausserdem hat GoL die angewohnheit das es endlich ist. |
||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was meinst du mit GoL ist endlich?
Ich hab mal den spaßigen Beweis gesehen, dass aus einer endlichen Startmenge an Punkten, unendlich viele Punkte erzeugt werden können. Nämlich mit diesen lustigen Kanonen, die immer wieder Gleiter abschießen. ![]() (Wikipedia) Unten rechts das Gebilde ist der Fresser, den muss man sich wegdenken. Dann würden diese Gleiter unendlich weiterfliegen. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
MikeDee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist für mich endlich, wenn es entweder aufhört oder sich die letzten Schritte immer wiederholen. Unendlich hat eben kein Ende, etwas das sich wiederholt hört auf und fängt wieder von neuem an. | ||
Nicht wenige benutzen die Anonymität des Internets um berühmt zu werden. |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man davon ausgeht, dass das spielfeld unendlich groß ist, ist die Simulation auch unendlich. Schliesslich verschwinden die Glider nie, aber neue werden ständig erstellt
Man kann auch, in dem man glider geschick kollidieren lässt, neue Gliderkanonen erzeugen. Also wäre ein unendliches wachstum ohne wiederholungen mit dem GoL möglich. ich hatte da mal spaßenshalber eine kleine simulation in b+ geschrieben. http://phpprogger.ph.funpic.de/uploads/SDL.zip |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
MikeDee hat Folgendes geschrieben: Game of Life ist doch noch weiter von einem "Evolutionsprozess" entfernt, da spielt nichtmal der Zufall eine Rolle und ich sehe auch nicht wo was ähnliches wie eine DNA sein soll. Ausserdem hat GoL die angewohnheit das es endlich ist. Mal abgesehen, dass das GoL eine sehr interessante Sache ist, frage ich mich was es tatsächlich mit Systematiken von Evolution zu tun haben soll... Sicher gibt es einige hochinteressante Ansätze, aber das GoL geht von Regeln aus die nicht naturgebundener Gesetze entspringt.Eher wirkt es, als würde man mehr oder weniger willkürlich ein paar Regeln definiert haben, die zu wirklich unglaublichen Gebilden und interessantem Verhalten führt. Aber im Bezug auf Evolution hat es zwei entscheidene Nachteile: 1.)Es wird davon ausgegangen, dass Zellen immer die exakt gleiche Beschaffenheit hat und als 1:1-Kopie bei der Wiedergeburt erstellt wird.Frage die daraus resultiert: Ist das Evolution?Sind Zellen immer grundsätzlich eine 1:1-Kopie ihrer Elterngeneration?Ich denke nicht.Sonst gäbe es keine evolutionsbedingten sich spezialisierende Zellen, sondern im Grunde nur DIE eine exakt gleiche Zelle. 2.) Es geht überhaupt nicht auf die Umwelt ein.Die Zellen wirken eher wie Viren die sich auf einem idealen Nährboden bewegt. Mit ist bewusst, dass der Herr Conway nicht darauf abzielte als er es entwarf, aber der oben genannte Bezug ist mir nicht ganz klar... Smiley: Ist gut geworden.Perfekt um ein wenig den Sinn und die Wirkungsweise hinter Conways GoL zu verstehen.Danke dafür^^ MFG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 2.) Es geht überhaupt nicht auf die Umwelt ein.Die Zellen wirken eher wie Viren die sich auf einem idealen Nährboden bewegt.
Ein Virus braucht keinen Nährboden, es hat keinen eigenen Stoffwechsel. Du meinst sicher ein Bakterium. GoL hat nichts mit Evolution zu tun, denn wie schon festgestellt wurde gibt es keine Veränderung der Kopien. Wenn man das wollte müsste man die Regeln in der Kopie selbst speichern und durch zufällige Mutation oder Rekombination neue Regeln zulassen- was de facto den Eigenschaften der DNA entspräche. Wenn also zB die Zahl der Nachbarn für Reproduktion und die Zahl für Verhungern im Bakterium gespeichert ist und sich bei Reproduktion ändern kann, so kann man neue Species erschaffen die mit der ursprünglichen in Wettbewerb treten. Dann wird es interessant. Allerdings ist ein System wie bei GoL recht unausgewogen da es durch seine Simplizität schnell an die Grenzen zu bringen ist. Eine Amöbe die sich durch ihre eigene Anwesenheit reproduzieren kann und die so genügsam mit Futter umgeht dass sie auch nicht verhungert wenn alle Felder um sie besetzt sind wird sich recht früh ausbilden und innerhalb kürzester Zeit alles domninieren. Von daher wäre es interessant die Rahmenbedingungen zu verkomplizieren, bzw. für jede Variable verbindliche Minima und Maxima festzulegen - eventuell auch in Abhängigkeit voneinander. So dass zB eine sich rasch reproduzierende Amöbe automatisch mehr Futterbedarf hat als eine weniger rasch expandierende Species. Oder dass eine Amöbe nur dann reproduzieren kann wenn auch genug Futter in den Feldern um sie frei ist. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group