Vorbei an WorldBuilding wir spielen gerne mit Science-Fiction-Themen, darunter "Was wäre, wenn es mehr als zwei Geschlechter gäbe" (Beispiele Hier . Hier . Hier ). Alles gute saubere Spaß und, dachte ich, eine Chance für mich, meine Tabellenkalkulationsfähigkeiten zu verbessern (ich benutze Excel 2003).
Ich baute eine Kalkulationstabelle für ein Monte-Carlo-Modell mit drei Geschlechtern unter Verwendung von X- und Y-Chromosomen: M Ale (JJ), F weiblich (XX) und H Hermaphrodit (XY), gewöhnliche Mendelsche Erbschaft. Somit M-F wird immer H produzieren, M-H produziert 50% M und 50% H, F-H ähnlich und H-H produziert 25% M, 25% F und 50% H.
Ich habe 200 Einwohner gezüchtet und habe 256 Generationen gezüchtet. Außer eine Sache . Ich hatte erwartet, dass sich die Bevölkerung bei 50% H und 25% von M und F stabilisieren würde, aber ich bekomme konstant 54% H und nur 23% M und F Bei LibreOffice ist es weder vom Geschlecht der "Puffer" - Eltern (siehe unten) noch von der ursprünglichen Verteilung betroffen.
Die Tabelle ist verfügbar Hier (meine persönliche Website, natürlich übliche Haftungsausschlüsse) und ich habe es unten dokumentiert. Es sieht so aus, als ob meine zufälligen Funktionen funktionieren IF(RAND()>0.5
und CHOOSE(INT(4*RAND()+1)
Ich bekomme nicht wie vorgesehen 50% und 25% zurück, aber ich weiß nicht, wie ich das direkt testen kann. Mache ich etwas falsch?
Code-Details
Ich verschlüssele M
Ale als 1
. F
emale as 2
und H
Hermaphrodit als 4
so dass ich einfach die beiden eltern hinzufügen kann. Die meisten Zellen (B6: IV205) berechnen die nächste Generation und enthalten (dies ist Zelle B6):
=CHOOSE (A5+A7, // sum of parents
-99, // 1 can't happen
A6, // 2 = MM = don't breed, copy old
4, // 3 = MF -> H
A6, // 4 = FF = don't breed, copy old
IF(RAND()>0.5,1,4), // 5 = MH -> M or H
IF(RAND()>0.5,2,4), // 6 = FH -> F or H
-99, // 7 can't happen
CHOOSE(INT(4*RAND()+1),1,2,4,4) // 8 = HH -> M or F or H or H
)
Die erste Reihe von Sheet1 zeigt eine Generationszählung, die zweite, dritte und vierte Anzahl der "Geschlechter" in dieser Generation (dividiert durch 2, um einen Prozentsatz der Bevölkerung von 200 zu ergeben). Die Zeilen 5 und 206 stellen einen (Puffer-) Parent für die Zeilen 6 und 205 bereit. In Spalte A wird basierend auf dem Wert in A2 eine Grundgesamtheit erstellt.
Ich benutze bedingte Formatierungen, um Männer als blau, Frauen als rosa und Hermaphroditen als grün zu färben; Mit 25% Zoom und einer Spaltenbreite von 3 kann ich den gesamten Bereich auf meinem Monitor sehen. Auf Sheet2 zeichne ich die Populationen mit den Zeilen 2-3-4 von Sheet1 auf.
Details aller Zellen in Sheet1:
A1 "gen1"
B1:IV1 ="g"&COLUMN() // column title
A2 50% // initial hermaphrodite percentage
B2:IV2 =COUNTIF(B6:B205,"=4")/2 // hermaphrodite percentage
A3 ="M:"&COUNTIF(A6:A205,"=1")/2
B3:IV3 =COUNTIF(B6:B205,"=1")/2 // male percentage
A4 ="F:"&COUNTIF(A6:A205,"=2")/2
B4:IV4 =COUNTIF(B6:B205,"=2")/2 // female percentage
A5 4 // lower buffer parent
B5:IV5 =A5 // echo buffer
A6:A205 =IF(RAND()>$A$2,IF(RAND()>0.5,1,2),4) // initial population
B6:IV205 =CHOOSE(A5+A7,-99,A6,4,A6,IF(RAND()>0.5,1,4),IF(RAND()>0.5,2,4),-99,CHOOSE(INT(4*RAND()+1),1,2,4,4))
A206 4 // upper buffer parent
B206:IV206 =A206 // echo buffer
Natürlich bin ich für Ratschläge zu allen Aspekten meiner bereit Opus .
quelle
CHOOSE(INT(4*RAND()+1),1,2,4,4)
gibt mir 25-25-50% im Generation aber nicht in der Bevölkerung; Ihre Formulierung vonCHOOSE(INT(3*RAND()+1),1,2,4)
gibt mir 33-33-33% in der Generation und (entgegen meiner Erwartung) 25-25-50% in der Bevölkerung. Jetzt muss ich mich mit dieser Differenzierung der Bevölkerungsgeneration beschäftigen und herausfinden, was passiert. Ich habe deine Antwort als richtig markiert: Es ist kein Excel-Fehler, sondern ein NL_Derek-Fehler ;-)