2.1 Allgemeine Probleme bei der Erforschung der natürlichen Evolution
3.1 Mechanismen der natürlichen Evolution
3.2.2 Zusammenspiel von Mutation, Selektion, Genvermischung und Isolation
4.4 Mechanismen der Evolution in der Simulation
4.5 Artbildung in der Simulation
4.5.1 Definition Art in der Simulation
4.5.2 Definition für erfolgreiche Artbildung in meiner Simulation
7.1 Technische Daten der Simulation
7.2.2 Objektorientiertes Programmieren (OOP)
Mutation |
Selektion |
Genvermischung |
Isolation |
Ergebnis |
|
---|---|---|---|---|---|
1 |
X |
Alle Tiere der Population sind und bleiben wegen fehlender Mutation genetisch gleich. Durch Isolation werden die Tiere in einzelne Gruppen getrennt, die Population besteht aber weiterhin nur aus Tieren mit denselben Erbinformationen. |
|||
2 |
X |
Entspricht Fall 1.Die Genvermischung hat hier keinen Einfluss, denn aus Vermischung von gleichen Individuen entstehen wiederum gleiche Individuen. |
|||
3 |
X |
X |
Entspricht Fall 1.Die Genvermischung wirkt hier in isolierten Gruppen, hat aber weiterhin keine Auswirkungen, denn aus Vermischung von gleichen Individuen entstehen wiederum gleiche Individuen. |
||
4 |
X |
Alle Tiere der Population sind und bleiben auf Grund fehlender Mutation gleich. Hier wirkt zusätzlich ein Selektionsfaktor. Wenn nun diese Population von gleichen Tieren nicht an den Selektionsfaktor angepasst ist, stirbt sie aus. |
|||
5 |
X |
X |
Derselbe Effekt wie in Fall 4 tritt hier auch in den gebildeten Gruppen auf. Da alle Gruppen auf Grund fehlender Mutation gleich sind, stirbt bei fehlender Anpassung an den Selektionsfaktor wiederum die ganze Population aus. |
||
6 |
X |
X |
Der Effekt aus Fall 4 tritt auch hier auf. Durch Genvermischung wird die Population nicht verändert. Sie stirbt aus, wenn sie nicht an den Selektionsfaktor angepasst ist. |
||
7 |
X |
X |
X |
Entspricht Fall 4.Die Kombination von Isolation und Genvermischung verändert die einzelnen Tiere nicht, sodass sie, wenn sie nicht an den Selektionsfaktor angepasst sind, sterben. Da alle Tiere auf Grund fehlender Mutation gleich sind, betrifft ein solches Aussterben die ganze Population. |
|
8 |
X |
Durch Mutation verändert sich die Population. Jedoch ist diese Veränderung nicht gerichtet, sondern völlig zufällig. |
|||
9 |
X |
X |
Entspricht Fall 8.Die Isolation hat auf die zufällige Veränderung durch Mutation keinen Einfluss. |
||
10 |
X |
X |
Durch die Genvermischung streben alle neuen Individuen dem Durchschnitt der Population zu. Mutationen verändern diesen Durchschnitt jedoch völlig zufällig. |
||
11 |
X |
X |
X |
Innerhalb jeder isolierten Gruppe streben alle neuen Individuen durch Genvermischung den Durchschnitt der Gruppe an. Die einzelnen Durchschnitte der Gruppe verändern sich unabhängig voneinander auf Grund von Mutationen. Jede isolierte Gruppe ist eine einzelne Art. |
|
12 |
X |
X |
Durch Mutation und Selektion entwickeln sich die Individuen so, dass ihre Ausprägungen im Nachteil-Ausprägung-Diagramm in den Tiefpunkten von Selektionsmulden zu liegen kommen. Wenn mehrere Selektionsmulden vorhanden sind, entstehen so mehrere Gruppen. Da die Genvermischung in diesem Fall nicht wirkt, können diese Gruppen als einzelne Arten bezeichnet werden. |
||
13 |
X |
X |
X |
Hier wirkt derselbe Mechanismus wie in Fall 12. Jedoch werden hier nicht einzelne Individuen in Selektionsmulden gedrückt, sondern die einzelnen isolierten Gruppen. |
|
14 |
X |
X |
X |
Durch die Genvermischung streben alle neuen Individuen dem Durchschnitt der Population zu. Dieser Durchschnitt ist aber durch Mutation variabel, dies aber nicht zufällig, sondern durch den vorherrschenden Selektionsdruck gerichtet. |
|
15 |
X |
X |
X |
X |
Innerhalb jeder isolierten Gruppe strebt jedes neue Tier den Durchschnitt der Gruppe an. Dieser Durchschnitt kann sich durch Mutationen verändern. Durch Selektion wirkt diese Veränderung gerichtet. Die einzelnen isolierten Gruppen werden sich also in Selektionsmulden sammeln.Jede dieser isolierten Gruppen ist eine eigene Art. |
Energiestand | Nahrung1Anpassung | Nahrung2Anpassung | Nahrung1Parameter | Nahrung2Parameter | Anpassung | Geschlecht | Alter | StandortX | StandortY | WartenParameter | FortpflanzungParameter | FortpflanzungEigeneArtParameter | StehenBleibenBonus |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
26118 | 2503 | 1980 | 4530 | 4384 | 1 | 0 | 200 | 5 | 7 | 34 | 132 | 2000 | 820 |
36879 | 2472 | 2278 | 3711 | 4885 | 0 | 0 | 192 | 5 | 8 | 26 | 146 | 2000 | 796 |
53762 | 2542 | 321 | 2793 | 43 | 1 | 1 | 184 | 6 | 2 | 69 | 170 | 2000 | 808 |
35532 | 2492 | 1771 | 5178 | 3558 | 1 | 1 | 180 | 5 | 8 | 35 | 147 | 2000 | 808 |
72006 | 3240 | 416 | 3505 | 51 | 1 | 1 | 179 | 4 | 4 | 94 | 207 | 2000 | 1038 |
23460 | 1456 | 1758 | 1315 | 3014 | 1 | 1 | 171 | 2 | 1 | 50 | 146 | 2000 | 560 |
64694 | 596 | 2995 | 73 | 5407 | 1 | 0 | 169 | 1 | 1 | 63 | 156 | 2000 | 1104 |
68229 | 4230 | 538 | 3697 | 64 | 1 | 0 | 156 | 5 | 3 | 54 | 270 | 2000 | 1359 |
32764 | 374 | 1872 | 46 | 3583 | 1 | 1 | 156 | 3 | 1 | 52 | 98 | 2000 | 691 |
54839 | 3854 | 493 | 4108 | 58 | 1 | 0 | 147 | 6 | 6 | 64 | 244 | 2000 | 1242 |
36041 | 2767 | 2161 | 5238 | 4744 | 1 | 1 | 143 | 2 | 5 | 32 | 142 | 2000 | 855 |
28184 | 2511 | 2161 | 5611 | 5077 | 1 | 1 | 133 | 2 | 6 | 32 | 162 | 2000 | 856 |
63035 | 722 | 3627 | 87 | 6229 | 1 | 0 | 126 | 5 | 5 | 48 | 187 | 2000 | 1336 |
59993 | 4401 | 566 | 4204 | 67 | 1 | 0 | 120 | 8 | 2 | 45 | 278 | 2000 | 1422 |
61508 | 807 | 4056 | 98 | 4412 | 1 | 1 | 110 | 5 | 5 | 39 | 208 | 2000 | 1494 |
35051 | 3265 | 405 | 3554 | 54 | 1 | 1 | 104 | 8 | 6 | 60 | 217 | 2000 | 1027 |
30530 | 3540 | 434 | 3928 | 61 | 1 | 1 | 86 | 4 | 4 | 56 | 236 | 2000 | 1094 |
43411 | 4142 | 516 | 4514 | 67 | 1 | 1 | 79 | 7 | 7 | 77 | 272 | 2000 | 1304 |
11998 | 4256 | 541 | 4576 | 66 | 1 | 0 | 46 | 8 | 8 | 74 | 272 | 2000 | 1363 |
12082 | 4436 | 554 | 4874 | 73 | 1 | 1 | 44 | 7 | 7 | 64 | 291 | 2000 | 1399 |
43058.199219 | 2466.432129 | 1788.623169 | 3363.502441 | 3145.060303 | 0.924623 | 0.462312 | 142.869354 | 4.532663 | 4.412060 | 49.763821 | 189.517593 | 2000.000000 | 996.231140 |
"Klasse ist [...] ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und/oder des gemeinsamen Verhaltens von Objekten [...]."
"Ein Objekt ist [...] eine konkrete Ausprägung einer Klasse [...]."
Variablen |
|
Zustand |
Folgende Variablen werden nicht vererbt und sind während dem Leben des Tieres veränderlich: |
Energiestand |
In dieser Variable wird die Menge Energie gespeichert, die das Tier noch besitzt. Wenn der Energiestand negativ wird, stirbt das Tier. |
Alter |
Diese Variable zählt, wie viele Runden das Tier bereits existiert. Wenn sie 200 überschreitet, stirbt das Tier. |
StandortX, StandortY |
"StandortX" und "StandortY" repräsentieren die X- und Y-Koordinate, wo sich das Tier auf dem Spielfeld gerade befindet. |
SchonAktivitaet |
Diese Variable sorgt dafür, dass sich ein Tier in einer Runde nicht mehrmals fortpflanzen kann. Dies wäre möglich, wenn ein anders Tier das Tier als Partner wählte. Dadurch wäre ein Tier im Vorteil, welches die Zeit der anderen Tiere gebrauchen würde, um sich fortzupflanzen und seine eigene Zeit zum Essen nützte. Somit würde sich ein unnatürliches Gleichgewicht bilden, in welchem nur wenige Tiere bereit wären, sich von sich aus fortzupflanzen. Diese Variable unterbindet dies. |
Form |
Folgende Variablen werden vererbt und verändern sich während dem Leben des Tieres nicht: |
Geschlecht |
Dieser zufällig ermittelte Wert entspricht dem Geschlecht in der Natur: Gleichgeschlechtliche Fortpflanzung ist nicht möglich. Für die Artbildung wäre diese Variable eigentlich nicht nötig, ich habe sie aber der Vollständigkeit halber trotzdem implementiert. |
Nahrung1Anpassung, Nahrung2Anpassung |
Je nach NahrungAnpassung kann aus der jeweiligen Nahrung 1 oder Nahrung 2 mehr oder weniger Energie gewonnen werden. Die Anpassung kostet jedoch jede Runde zusätzliche Energie. Es lohnt sich also, sich nur auf eine Nahrung zu spezialisieren. |
Verhalten |
Folgende Variablen werden vererbt und verändern sich während dem Leben eines Tieres nicht (Ausnahme ist angegeben): |
Nahrung1Parameter, Nahrung2Parameter |
Diese Variable gibt an, wie hoch Nahrung 1 oder Nahrung 2 bewertet wird. Ist die Variable höher, ist die Chance grösser, dass das Tier sich entschliesst, sich auf ein Feld mit Nahrung 1 oder Nahrung 2 zu bewegen. |
WartenParameter |
Diese Variable gibt an, wie hoch eine Runde nichts tun bewertet wird. |
FortpflanzungParameter |
Mit dieser Variable wird die Bewertung für die Fortpflanzung mit einem Partner von unterschiedlicher Art angegeben. Ein solcher Fortpflanzungsversuch ist immer erfolglos und "FortpflanzungParameter" sollte deshalb gegen null streben. |
FortpflanzungEigeneArtParameter |
Dieser Wert gilt beim Entscheidungsprozess als Richtwert. Er ist immer 2'000 und steht im Entscheidungsprozess für Fortpflanzung mit einem Partner derselben Art.Ein Richtwert hat sich als nötig erwiesen, da die Entscheidungsparameter sonst dazu tendieren, sehr hoch zu werden. Solch hohe Zahlen sehen unübersichtlich aus und sind mühsam auszuwerten. |
StehenBleibenBonus |
Diese Grösse wird einem Zug, für dessen Ausführung keine Bewegung nötig ist, an Bewertungspunkten gutgeschrieben. |
Methoden |
|
Veränderung |
Mit diesen Methoden können Variable eines Objekts der Klasse "Tier" verändert werden: |
initMitVater:Vater Mutter:Mutter |
Ein neues Tier entsteht. Diese Methode setzt die Variablen des Tieres und vererbt und mutiert die Geninformationen von Vater und Mutter. |
Essen:Energie |
Der Energiestand des Tieres nimmt um den übergebenen Wert "Energie" zu. |
Energieabnahme:Aktivitaet |
Der Energiestand des Tieres nimmt um den übergebenen Wert "Aktivitaet" ab. |
Altern |
Die Variable "Alter" wird um 1 erhöht. |
StandortWechselX:WechselX WechselY:WechselY |
Zu "StandortX" und "StandortY" wird "WechselX" beziehungsweise "WechselY" addiert. |
SchonAktivitaetAendern |
Die Variable "SchonAktivitaet" wird von 0 zu 1 oder von 1 zu 0 gewechselt. |
Abfrage |
Diese Methoden geben jeweils die Variable mit demselben Namen wie die Methode aus: |
Energiestand |
|
Alter |
|
StandortX |
|
StandortY |
|
SchonAktivitaet |
|
Geschlecht |
|
Nahrung1Anpassung |
|
Nahrung2Anpassung |
|
Nahrung1Parameter |
|
Nahrung2Parameter |
|
WartenParameter |
|
FortpflanzungParameter |
|
FortpflanzungEigeneArtParameter |
|
StehenBleibenBonus |
|
Analyse |
|
AnpassungTrifftZu |
Gibt 1 aus, wenn die sich "Nahrung1Parameter" und "Nahrung2Parameter" an "Nahrung1Anpassung" und "Nahrung2Anpassung" angepasst haben. |
Variablen |
|
Art |
Diese Variable gibt an, ob auf diesem Feld Nahrung 1 oder Nahrung 2 zu finden ist, oder ob sich dieses Feld am Rand des Spielfeldes befindet. Ist es am Rand, darf es von den Tieren nicht betreten werden. Dies ist eine einfache Lösung, das Problem zu bewältigen, dass Tiere das Spielfeld zu verlassen versuchen. |
TierID |
Mit dieser Nummer kann das Tier ermittelt werden, welches sich auf dem Feld befindet. |
Beweidung |
Diese Variable stellt die vorhandenen Nahrungsmittelressourcen des Feldes dar. Wenn sie null erreicht hat, kann kein Tier mehr Nahrungsmittel von diesem Feld schöpfen. |
Methoden |
|
Veränderung |
Folgende Methoden verändern Variablen des Objekts der Klasse "Feld": |
initAmRand:AmRand |
Diese Methode belegt die Variablen mit ihren Standardwerten und bestimmt, ob auf dem Feld Nahrung 1 oder Nahrung 2 wächst. Wenn der Übergabeparameter "AmRand" 1 ist, wird das Feld als Randfeld definiert. Diese Methode wird vor dem Beginn der Simulation ausgeführt. |
Nutzung |
"Nutzung" verkleinert die Variable "Beweidung". |
Wachsen |
Jede Runde wächst auf jedem Feld die Vegetation. Die Variable "Beweidung" wird erhöht. |
neuesTier |
Ein neues Tier setzt sich in die Variable "TierID". |
Abfrage |
Diese Methoden geben die angegebenen Variablen aus: |
Beweidung |
Beweidung |
getTier |
TierID |
Art |
Art |
Variablen |
|
Tiere |
In dieser Liste werden die Tiere gespeichert. |
Felder |
In dieser zweidimensionalen Liste werden die Felder des Spielfelds gespeichert. |
prozessLauf |
Diese Variable kann entweder 1 oder 0 repräsentieren. Sie gibt an, ob gerade eine Simulation läuft. |
AnzahlFelderX, AnzahlFelderY |
Hier wird gespeichert, wie weit sich das Spielfeld erstrecken soll. |
ProzessZaehler |
Mit dieser Variable werden die Runden der Simulation gezählt. Die Variable wird jede Runde um eins erhöht. |
Methoden |
|
Steuerung |
Folgende Methoden werden vom Objekt der Klasse "Controller" aufgerufen: |
starten |
Mit dieser Methode wird die Simulation gestartet. Solange nicht "stoppen" ausgeführt wird oder die Population unter 200 Tiere sinkt, ruft diese Methode "ZugController" für jedes Tier auf und lässt danach jedes Feld wachsen. |
stoppen |
Diese Methode unterbricht die Endlosschleife, welche "starten" erzeugt. |
TiereAussetzenSim:Anzahl |
Es werden so viele neue Tiere ausgesetzt, wie dieser Methode über "Anzahl" mitgeteilt wird. |
Prozess |
|
ZugController:ID |
Diese Methode wird pro Runde für jedes Tier einmal ausgeführt. Auf welches Tier sich ein Aufruf bezieht, wird der Methode über "ID" mitgeteilt. "ZugController" zieht dem Tier die Energie ab, die es für seine eigene Aufrechterhaltung (Körper heizen usw.) benötigt. Falls das Tier älter als 200 Jahre ist oder über keine Energiereserven mehr verfügt, wird das Tier der Methode "TierStirbt" übergeben, sonst wird der Entscheidungsprozess des Tieres mit der Methode "EntscheidungTier:gewaehltesTier" eingeleitet. |
Abfrage |
|
AnzahlTiere |
"AnzahlTiere" gibt die Anzahl Tiere aus, welche in der Tierliste enthalten sind. |
TierMitID:ID |
Diese Methode gibt das Objekt der Klasse "Tier" zurück, welches dem Übergabeparameter "ID" zugeordnet ist. |
ProzessZaehler |
"ProzessZaehler" gibt die gleichnamige Variable aus. |
Prozesshilfe |
|
EntscheidungTier:gewaehltesTier |
Diese Methode trifft für das ihr übergebene Tier "gewaehltesTier" die Entscheidung, welcher Spielzug in dieser Runde ausgeführt werden soll. Dabei werden alle Möglichkeiten mit Punktzahlen bewertet. Möglichkeiten mit hohen Punktzahlen haben in der nachfolgenden zufälligen Ermittlung des auszuführenden Zuges die grössere Chance. Wenn ein auszuführender Zug ermittelt ist, wird dieser an "Tier:gewaehltesTier willTun:TatID mitBewegungUmX:VerschiebungX UmY:VerschiebungY" weitergeleitet. |
Tier:gewaehltesTier willTun:TatID mitBewegungUmX:VerschiebungX UmY:VerschiebungY |
Dieser Methode wird ein gewünschter Zug eines Tieres übergeben. Nachdem die Methode prüft, ob der Zug überhaupt möglich ist, wird er ausgeführt. Dabei wird dem Tier auch die benötigte Energie für den Zug abgezogen. |
TierStirbt:TierID |
"TierStirbt:TierID" löscht ein Tier von der Tierliste und meldet dem Feld, auf dem es sich befunden hat, dass sein Tier nun tot ist. |
Variablen |
|
------ |
|
Methoden |
|
Anzeigen |
Diese Methode wird ausgeführt, wenn der Benutzer im Steuerfenster auf "Aktualisieren" klickt. Sie veranlasst das Objekt der Klasse "TableController", die Tierliste zu aktualisieren. |
Start |
Durch Klicken auf "Simulation starten" im Steuerfenster wird diese Methode aufgerufen. Sie gibt dem Objekt der Klasse "Simulation" den Befehl, die Simulation zu starten. |
Stop |
Durch Klicken auf "Simulation anhalten" im Steuerfenster wird die Methode "Stop" aufgerufen. Sie gibt dem Objekt der Klasse "Simulation" den Befehl, die Simulation zu beenden. |
TiereAussetzen |
Wenn der Benutzer im Fenster "Einstellungen" auf Tiere aussetzen klickt, wird dem Objekt der Klasse "Simulation" der Befehl übergeben, so viele Tiere, wie im dazugehörigen Textfeld definiert, auszusetzen. |
Website |
Diese Methode leitet den Benutzer auf die Website http://evolution.naepflin.com. Sie wird ausgeführt, wenn im Menü unter "Hilfe" "Website besuchen" gewählt wird. |
HTMLExport |
Durch den Aufruf dieser Methode durch Klicken auf "Tierliste als HTML-Datei exportieren" wird das Objekt der Klasse "HTMLExport" dazu aufgefordert, die Tierliste zu exportieren. |
Variablen |
|
------ |
|
Methoden |
|
numberOfRowsInTableView:aTableView |
Diese Methode gibt die Anzahl Tiere, also die Anzahl Zeilen der Tierliste aus. |
tableView:aTableView objectValueForTableColumn:aTableColumn row:rowIndex |
Mit dieser Methode kann eine beliebige Variable eines beliebigen Tieres aufgerufen werden. |
tableView:aTableView setObjectValue:anObject forTableColumn:aTableColumn row:rowIndex |
Diese Methode wird aufgerufen, wenn der Benutzer versucht, die Tabelle zu verändern. Es passiert nichts. |
Variablen |
|
------ |
|
Methoden |
|
Exportieren |
Diese einzige Methode der Klasse "HTMLExport" setzt den einzigen Prozess in Gang, für den "HTMLExport" zuständig ist, nämlich den Export der Tierliste auf die Festplatte. |
Energiestand | Nahrung1Anpassung | Nahrung2Anpassung | Geschlecht | Nahrung1Parameter | Nahrung2Parameter | Alter | StandortX | StandortY | WartenParameter | FortpflanzungParameter | FortpflanzungEigeneArtParameter | StehenBleibenBonus |
---|---|---|---|---|---|---|---|---|---|---|---|---|
87238 | 3796 | 3507 | 1 | 9159 | 6254 | 198 | 2 | 6 | 38 | 342 | 2000 | 1510 |
71810 | 3229 | 3022 | 0 | 7713 | 5023 | 193 | 3 | 3 | 39 | 236 | 2000 | 1209 |
67238 | 3433 | 3187 | 0 | 7837 | 5462 | 183 | 5 | 2 | 36 | 296 | 2000 | 1274 |
67048 | 3349 | 3416 | 1 | 8613 | 5817 | 175 | 6 | 3 | 34 | 295 | 2000 | 1390 |
41917 | 2176 | 2173 | 0 | 5158 | 3688 | 165 | 5 | 7 | 51 | 190 | 2000 | 698 |
41691 | 2482 | 2548 | 0 | 5934 | 4561 | 146 | 7 | 7 | 38 | 234 | 2000 | 939 |
55314 | 3764 | 3511 | 1 | 8739 | 6034 | 124 | 5 | 1 | 33 | 337 | 2000 | 939 |
36937 | 3022 | 2877 | 1 | 7548 | 4999 | 107 | 1 | 6 | 59 | 264 | 2000 | 1208 |
29700 | 3162 | 2942 | 1 | 7634 | 4868 | 79 | 8 | 7 | 40 | 290 | 2000 | 1164 |
15875 | 3482 | 3628 | 0 | 7297 | 5756 | 36 | 5 | 8 | 29 | 321 | 2000 | 1544 |
55131.718750 | 3425.502441 | 3261.894531 | 0.537688 | 8377.618164 | 5695.230957 | 144.226135 | 4.708543 | 4.738693 | 42.417084 | 301.361816 | 2000.000000 | 1354.492432 |
Energiestand | Nahrung1Anpassung | Nahrung2Anpassung | Geschlecht | Nahrung1Parameter | Nahrung2Parameter | Alter | StandortX | StandortY | WartenParameter | FortpflanzungParameter | FortpflanzungEigeneArtParameter | StehenBleibenBonus |
---|---|---|---|---|---|---|---|---|---|---|---|---|
87238 | 3796 | 3507 | 1 | 9159 | 6254 | 198 | 2 | 6 | 38 | 342 | 2000 | 1510 |
71810 | 3229 | 3022 | 0 | 7713 | 5023 | 193 | 3 | 3 | 39 | 236 | 2000 | 1209 |
67238 | 3433 | 3187 | 0 | 7837 | 5462 | 183 | 5 | 2 | 36 | 296 | 2000 | 1274 |
67048 | 3349 | 3416 | 1 | 8613 | 5817 | 175 | 6 | 3 | 34 | 295 | 2000 | 1390 |
41917 | 2176 | 2173 | 0 | 5158 | 3688 | 165 | 5 | 7 | 51 | 190 | 2000 | 698 |
41691 | 2482 | 2548 | 0 | 5934 | 4561 | 146 | 7 | 7 | 38 | 234 | 2000 | 939 |
55314 | 3764 | 3511 | 1 | 8739 | 6034 | 124 | 5 | 1 | 33 | 337 | 2000 | 939 |
36937 | 3022 | 2877 | 1 | 7548 | 4999 | 107 | 1 | 6 | 59 | 264 | 2000 | 1208 |
29700 | 3162 | 2942 | 1 | 7634 | 4868 | 79 | 8 | 7 | 40 | 290 | 2000 | 1164 |
15875 | 3482 | 3628 | 0 | 7297 | 5756 | 36 | 5 | 8 | 29 | 321 | 2000 | 1544 |
55131.718750 | 3425.502441 | 3261.894531 | 0.537688 | 8377.618164 | 5695.230957 | 144.226135 | 4.708543 | 4.738693 | 42.417084 | 301.361816 | 2000.000000 | 1354.492432 |
Energiestand | Nahrung1Anpassung | Nahrung2Anpassung | Nahrung1Parameter | Nahrung2Parameter | Anpassung | Geschlecht | Alter | StandortX | StandortY | WartenParameter | FortpflanzungParameter | FortpflanzungEigeneArtParameter | StehenBleibenBonus |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
26118 | 2503 | 1980 | 4530 | 4384 | 1 | 0 | 200 | 5 | 7 | 34 | 132 | 2000 | 820 |
36879 | 2472 | 2278 | 3711 | 4885 | 0 | 0 | 192 | 5 | 8 | 26 | 146 | 2000 | 796 |
53762 | 2542 | 321 | 2793 | 43 | 1 | 1 | 184 | 6 | 2 | 69 | 170 | 2000 | 808 |
35532 | 2492 | 1771 | 5178 | 3558 | 1 | 1 | 180 | 5 | 8 | 35 | 147 | 2000 | 808 |
72006 | 3240 | 416 | 3505 | 51 | 1 | 1 | 179 | 4 | 4 | 94 | 207 | 2000 | 1038 |
23460 | 1456 | 1758 | 1315 | 3014 | 1 | 1 | 171 | 2 | 1 | 50 | 146 | 2000 | 560 |
64694 | 596 | 2995 | 73 | 5407 | 1 | 0 | 169 | 1 | 1 | 63 | 156 | 2000 | 1104 |
68229 | 4230 | 538 | 3697 | 64 | 1 | 0 | 156 | 5 | 3 | 54 | 270 | 2000 | 1359 |
32764 | 374 | 1872 | 46 | 3583 | 1 | 1 | 156 | 3 | 1 | 52 | 98 | 2000 | 691 |
54839 | 3854 | 493 | 4108 | 58 | 1 | 0 | 147 | 6 | 6 | 64 | 244 | 2000 | 1242 |
36041 | 2767 | 2161 | 5238 | 4744 | 1 | 1 | 143 | 2 | 5 | 32 | 142 | 2000 | 855 |
28184 | 2511 | 2161 | 5611 | 5077 | 1 | 1 | 133 | 2 | 6 | 32 | 162 | 2000 | 856 |
63035 | 722 | 3627 | 87 | 6229 | 1 | 0 | 126 | 5 | 5 | 48 | 187 | 2000 | 1336 |
59993 | 4401 | 566 | 4204 | 67 | 1 | 0 | 120 | 8 | 2 | 45 | 278 | 2000 | 1422 |
61508 | 807 | 4056 | 98 | 4412 | 1 | 1 | 110 | 5 | 5 | 39 | 208 | 2000 | 1494 |
35051 | 3265 | 405 | 3554 | 54 | 1 | 1 | 104 | 8 | 6 | 60 | 217 | 2000 | 1027 |
30530 | 3540 | 434 | 3928 | 61 | 1 | 1 | 86 | 4 | 4 | 56 | 236 | 2000 | 1094 |
43411 | 4142 | 516 | 4514 | 67 | 1 | 1 | 79 | 7 | 7 | 77 | 272 | 2000 | 1304 |
11998 | 4256 | 541 | 4576 | 66 | 1 | 0 | 46 | 8 | 8 | 74 | 272 | 2000 | 1363 |
12082 | 4436 | 554 | 4874 | 73 | 1 | 1 | 44 | 7 | 7 | 64 | 291 | 2000 | 1399 |
43058.199219 | 2466.432129 | 1788.623169 | 3363.502441 | 3145.060303 | 0.924623 | 0.462312 | 142.869354 | 4.532663 | 4.412060 | 49.763821 | 189.517593 | 2000.000000 | 996.231140 |
#include <stdio.h> int main(void) { FILE *datei; int a=7777, b=2; int r=0; double c=0; int check=0; printf("Bitte eine ungerade Startzahl eingeben!\n"); scanf("%i",&a); //Startzahl initalisierung c=a%b; if(c!=0) { printf("\nrunning...\n"); datei = fopen ( "primzahlen.txt" , "w+" ); //Datei zum schreiben �ffnen if (datei == NULL ) { /* Da ist wohl ein Fehler aufgetreten! */ printf ("\nDie Datei konnte nicht ge�ffnet werden!\n"); } else { while(r==0) //endlosschleife { check=0; for(b=3;check==0&&b*(b-2)<a/2;) { c=a%b; //Rest der Divison a/b berechnen if(c==0) //Falls Rest gleich 0 check =1 { check=1; } if(check==1)//Falls check gleich 1 n�chste zahl testen { break; } b=b+2; } if(check!=1) //Falls Check!=1 Ist Zahl eine Primzahl wird in Datei geschrieben primzahlen.txt { fprintf(datei,"%i\n",a); } a=a+2; } fclose (datei); } } else { printf("\nKeine geraden Zahlen bitte!\n"); } return 0; }
3.1.1.2 Mutationsraten
Bei Bakterien beträgt die Mutationsrate ca. 1/10.000.000.
Wie ist diese Zahl zu verstehen? Betrachten wir dazu ein bestimmtes Gen, z.B. das X-Gen des Lac-Operons (siehe Genetik Genregulation).
Wenn wir nun eine Milliarde Bakterien der Art Escherichia coli untersuchen, so werden wir bei ca. 100 Individuum eine Mutation in diesem Gen finden.
Sind Mutationen eines Gens (DNA-Mutationen oder Gen-Mutationen als Folge von DNA-Mutationen im Regulatorbereich eines Operons) also sehr unwahrscheinlich?
Erinnern wir uns daran, daß sich E. coli-Zellen unter optimalen Bedinungen alle 20 Minuten teilen. Die Tabelle rechts zeigt die Vermehrung einer Ausgangszelle sowie die Zahl der Zellen mit einem mutierten X-Gen. Bereits nach zwölf Stunden sind in der 36. Generation über 3000 mutierte Zellen anzutreffen. Bei Eukaryoten muß man zwischen somatischen Mutationen und Keimbahnmutationen unterscheiden. Somatische Mutationen betreffen irgendwelche Körperzellen des Individuums und werden nicht auf die nachfolgende Generation übertragen. Für die Evolution spielen solche somatischen Mutationen also keine Rolle. Anders sieht es bei den Keimbahnmutationen aus, also bei Mutationen in den Keimzellen (Ei- und Samenzellen).
Die Mutationsrate beträgt bei Eukaryoten etwa 1/1.000.000, ist also zehnmal höher als mehr Gene haben als Prokaryoten, ist die Wahrscheinlichkeit, eine mutierte Keimzelle anzutreffen, ziemlich hoch. Ein Organismus mit 100.000 Genen hätte bei der Mutationsrate von 1/1.000.000 also 10% mutierte Keimzellen. Man nimmt an, daß beim Menschen ca. 10% bis 40% der Keimzellen mindestens ein mutiertes Gen besitzen.
Bei den Eukaryoten hat man schon vor längerer Zeit festgestellt, daß nicht alle Gene mit der gleichen Rate mutieren. Es gibt stabile und labile Gene. Nicht nur das: auch verschiedene Allele eines Gens können mit unterschiedlicher Rate mutieren. Inzwischen hat man sogar sogenannte Mutatorgene entdeckt, die die Mutationsrate anderer Gene kontrollieren. Also scheinen Mutationen doch nicht so ganz zufällige Ereignisse zu sein, manchmal „helfen“ die Organismen nach und erhöhen gezielt die Mutationsrate bestimmter Gene. In sehr variablen Umwelten mag dies eine gute Überlebensstrategie zu sein.
(C) Ulrich Helmich im Februar 2000
Objekt (objektorientierte Programmierung) aus Wikipedia, der freien Enzyklopädie
Ein Objekt ist in der objektorientierten Programmierung eine konkrete Ausprägung einer Klasse (Man sagt auch Exemplar oder Instanz einer Klasse). Das Objekt definiert sich über seine Identität, seinen Zustand und sein Verhalten (Bonmot: "Ist was, hat was, kann was").
- Jedes Objekt besitzt eine Identität, die es einzigartig in der Menge von Objekten eines Systems macht.
- Der Zustand eines Objekts wird durch die Werte der Attribute seiner Klasse bestimmt.
- Das Verhalten eines Objekts ergibt sich aus den zur Verfügung stehenden Methoden der zugrundeliegenden Klasse.
Man kann sich das Erstellen von Objekten nach einer Klasse vorstellen wie das Fertigen von Autos aus dem Konstruktionsplan eines bestimmten Fahrzeugtyps. Jedes erzeugte Auto für sich genommen hat eine einzigartige Identität, denn alle Autos können unabhängig voneinander betrieben werden. Klassen sind die Konstruktionspläne für Objekte.
In objektorientierten Programmen bilden Objekte die Einheiten der Datenkapselung. Im Normalfall dienen sie dazu, Dinge der realen Welt zu modellieren (Abstraktion).
In den meisten objektorientierten Sprachen werden alle Objekte nach dem Konstruktionsplan von Klassen erzeugt. Durch die Definition einer Klasse sind die Merkmale all derjenigen Objekte festgelegt, die aus dieser einen Klasse hervorgehenkönnen. Objekte, die aus von einer Basisklasse abgeleiteten Klassen erzeugt wurden, können genauso wie Objekte dieser Basisklasse verwendet werden.
In rein objektorientierten Sprachen wie Smalltalk werden, dem Prinzip alles ist ein Objekt folgend, auch elementare Typen wie Ganzzahlen (Integer) durch Objekte repräsentiert. Auch Klassen selbst sind hier Objekte, die wiederum Ausprägungen von Metaklassen sind. Viele Sprachen, unter anderem C++ und Java folgen allerdings nicht der reinen Lehre der Objektorientierung; daher sind dort elementare Typen keine vollwertigen Objekte, sondern müssen auf Methoden und Struktur komplett verzichten.
In einigen objektorientierten Programmiersprachen wie zum Beispiel JavaScript,NewtonScript und Self wird auf die Deklaration von Klassen gänzlich verzichtet. Statt dessen werden bestehende Objekte, so genannte Prototypen abgeleitet. Die Attribute und Methoden des Prototypen kommen immer dann zum Einsatz, wenn sie nicht im abgeleiteten Objekt explizit überschrieben wurden. Dies ist vor allem für dieEntwicklung kleinerer Programme von Vorteil, da es einfacher und zeitsparend ist.
Weblinks
Prototypen in der Objektorientierten Programmierung (englisch) (http://lieber.www.media.mit.edu/people/lieber/Lieberary/OOP/Delegation/Delegation.html)
Von "http://de.wikipedia.org/wiki/Objekt_%28objektorientierte_Programmierung%29" Eingeordnet unter: Objektorientierte Programmierung
Klasse (objektorientierte Programmierung) aus Wikipedia, der freien Enzyklopädie
Klasse ist in der objektorientierten Programmierung ein abstrakter Oberbegriff für die Beschreibung der gemeinsamen Struktur und/oder des gemeinsamen Verhaltens von Objekten (Klassifizierung). Sie dient dazu, Dinge (Objekte) derrealen Welt zu abstrahieren. Im Zusammenspiel mit anderen Klassen ermöglichen sie die Modellierung eines abgegrenzten Systems der realen Welt( siehe Objektorientiertes Design).
Die Struktur einer Klasse bilden die Attribute (auch Eigenschaften), das Verhalten die Methoden (auch Operation, Funktion, Prozedur) der Klasse.
Aus Klassen erzeugte Objekte werden als Exemplare oder Instanzen der Klasse bezeichnet.
In manchen Programmiersprachen gibt es zu jeder Klasse ein bestimmtesObjekt (Klassenobjekt), das dazu da ist, die Klasse zur Laufzeit zu repräsentieren; dieses Klassenobjekt ist dann auch zuständig für die Erzeugung von Objekten der Klasse und den Aufruf der korrekten Methode.
Klassen können von anderen Klassen abgeleitet werden (Vererbung). Dabei erbt die Klasse die Datenstruktur ( Attribute) und die Methoden von der vererbenden Klasse (Basisklasse). Die abgeleitete Klasse (Subklasse) kann Methoden der Basisklasse überschreiben (sofern diese es erlaubt; die Möglichkeit, dies zuverbieten, hängt von der Programmiersprache ab), d.h. die Methode neu implementieren, und eigene Methoden und Daten (Attribute) hinzufügen. EinObjekt der abgeleiteten Klasse kann überall verwendet werden, wo ein Objekt der Basisklasse erwartet wird; überschriebene Methoden werden dann auf derabgeleiteten Klasse ausgeführt (Polymorphie).
Klassen werden in der Regel in Form von Klassenbibliothekenzusammengefasst, die häufig thematisch organisiert sind. So können Anwender einer objektorientierten Programmiersprache Klassenbibliothekenerwerben, die den Zugriff auf Datenbanken ermöglichen.
Beispiele
Angenommen es wird eine Klasse für eine Tabelle einer einfachen Datenbankentworfen. Ein Objekt ist dann ein einzelner Datensatz ( = Zeile ) in dieser Tabelle.
Ein Klasse Bankkonto könnte beispielsweise mit folgenden Eigenschaftendefiniert werden:
- hat eine Kontonummer (Attribut)
- hat einen Kontoinhaber (Referenz auf einen Kunden)
- hat eine Liste von Buchungen (Liste von Referenzen auf Buchungen)
- hat einen Saldo (Attribut)
- kann eine Einzahlung durchführen (Methode)
- kann eine Auszahlung durchführen (Methode)
Jede Kontobewegung würde dann einem Methodenaufruf entsprechen und der Liste der Buchungen ein Element hinzufügen sowie den Saldo modifizieren.
Um eine Klasse "Schueler" zu erzeugen, kann man verschiedene Eigenschaftendefinieren: Name, Vorname, Geburtstag, Geschlecht, Adresse. Ein spezieller Schüler ist dann ein Objekt dieser Klasse, wenn für ihn eine Instanz erzeugt wurde und wenn seine Daten in die Instanzattribute eingetragen sind.
Programmbeispiel
Das folgende Beispiel ist in C++ geschrieben:
[...]
Dieses Programm definiert eine Klasse Basisklasse und eine davon abgeleitete Klasse abgeleitete_Klasse.
Die Basisklasse hat eine Methode namens machwas(), die Basisklasse::machwas ausgibt (dafür ist die Zeile mit std::cout zuständig). virtual bedeutet in C++ "kann überschrieben werden". Das macht die abgeleitete Klasse dann auch, sie definiert die Methode um, so dass sie abgeleitete_Klasse::machwas ausgibt.
Anschließend folgt die Definition einer eigenständigen Funktion mach_was_mit(...) , die ein Objekt der Basisklasse als Argument bekommt. Auf diesem Objekt wird die Methode machwas() gerufen.
(objekt1) als auch der abgeleiteten Klasse (objekt2) definiert, und dann mach_was_mit(...) zuerst mit einem Objekt der Basisklasse, dann mit einem Objekt der abgeleiteten Klasse aufruft.
Wird dieses Programm kompiliert und ausgeführt, so gibt es [...] aus, obwohl die Funktion mach_was_mit(...) nur für ein Basisklassenobjekt als Argument definiert ist (in der Tat hätte die abgeleitete Klasse sogar in einer später dazu gefügten Quelldatei geschrieben werden können, nachdem die Funktion mach_was_mit(...) schon lange fertig kompiliert war). Dieses Verhalten nennt man Polymorphie.
Einige Programmiersprachen mit Klassen
- SmalltalkPython
- Java
- Objective C
- Object Pascal, Delphi
- C#
- C++
- Objective CAML
Von "http://de.wikipedia.org/wiki/Klasse_%28objektorientierte_Programmierung%29"
Eingeordnet unter: Objektorientierte Programmierung Basisklasse::machwas abgeleitete_Klasse::machwas