Schurken und Engel, Teil 2

Ich bin gestern nochmal der Sache mit den Schurken und Engeln von neulich nachgegangen, denn auch wenn die grundsätzliche Schlussfolgerung – wenn du Chefposten kompetetiv verteilst, kriegst du ziemlich wahrscheinlich Schurken als Chefs – robust ist und ja schon aus der dort gemachten qualitativen Abschätzung folgt, so gibt es natürlich doch jede Menge interessante offene Fragen: Setzen sich Schurken drastischer durch wenn die Engeligkeit steiler verteilt ist? Wie sehr wirkt sich der Vorteil für die Schurken wirklich aus, vor allem, wenn sie auch nur eine endliche Lebensdauer haben? Wie ändern sich die Ergebnisse, wenn Leute zweite und dritte Chancen bekommen, mal wie ein richtiger Schurke Karriere zu machen? Wie verändert sich das Bild, wenn mensch mehr Hierarchiestufen hinzufügt?

Weil das alte Modell mit der einen Kohorte, die bei jedem Schritt um den Faktor 2 eindampft, für solche Fragen zu schlicht ist, muss ein neues her. Es hat den Nachteil, dass es viel mehr Code braucht als das alte – es hat aber der Vorteil, dass es im Prinzip beliebig lang laufen kann und über einen weiten Bereich von Parametern hinweg stationär werden dürfte, sich also der Zustand nach einer Weile (der „Relaxationszeit“) nicht mehr ändern sollte – natürlich vom Rauschen durch die diskrete Simulation abgesehen. Wem also das alte Modell zu schlicht und langweilig ist: Hier ist sunde2.py.

Das Neue

Wie sieht das Modell aus? Nun, wir haben jetzt simultan einen ganzen Haufen N von Hierarchiestufen, die auch immer alle besetzt sind; derzeit habe ich konstant N = 50. Von Stufe zu Stufe ändert sich jetzt die Population nicht mehr je um einen Faktor zwei, sondern so, dass die unterste Stufe 16-mal mehr Aktoren hat als die oberste und die Besetzungszahl dazwischen exponentiell geht. Diese Schicht-Statistik sollte keinen großen Einfluss auf die Ergebnisse haben, hält aber einerseits die Zahl der zu simulierenden Aktoren auch bei tiefen Hierarchien im Rahmen, ohne andererseits auf den oberen Ebenen die ganze Zeit mit allzu kleinen Zahlen kämpfen zu müssen.

Aktoren haben jetzt auch ein Alter; sie sterben (meist) nach LN Runden; L kann interpretiert werden als die Zahl der Versuche pro Wettbewerb, die ein Aktor im Mittel hat, wenn er ganz nach oben will. Im Code heißt das lifetime_factor (hier: Lebenzeit-Faktor), und ich nehme den meist als 2 („vita brevis“).

Es gibt eine Ausnahme auf der strikten Lebenszeitbegrenzung: Wenn ein Level sich schon um mehr als die Hälfte geleert hat, überleben die, die noch drin sind, auch wenn sie eigentlich schon sterben müssten. An sich ist diese künstliche Lebensverlängerung nur ein technischer Trick, damit mir der Kram mit ungünstigen Parametern und bei der Relaxation nicht auf interessante Weise um die Ohren fliegt; es kann nämlich durchaus sein, dass die oberen Ebenen „verhungern“, weil Aktoren schneller sterben als befördert werden. Er hat aber den interessanten Nebeneffekt, dass speziell in Modellen mit kleinem L wie in der Realität die Lebenserwartung der höheren Klassen höher ist als die der unteren.

Um die Gesamtzahl der Aktoren konstant zu halten, werden in jeder Runde so viele Aktoren geboren wie gestorben sind, und zwar alle in die niedrigste Schicht.

Das enspricht natürlich überhaupt nicht der Realität – schon die Zahlen zur Bildungsbeteiligung gegen Ende des Posts Immerhin gegen Ende zeigen ja, dass viele Menschen mitnichten bei Null anfangen in ihrem gesellschaftlichen Aufstieg. Insofern hätte mensch darüber nachdenken können, bestehende Aktoren irgendwie fortzupflanzen. Das aber hätte eine Theorie zum Erbgang von Schurkigkeit gebraucht (die auch dann nicht einfach ist, wenn mensch wie ich da wenig oder keine biologische Komponenten vermutet) und darüber hinaus den Einbau von Abstiegen in der Hierarchie erfordert.

Die zusätzliche Komplexität davon wäre jetzt nicht dramatisch gewesen, aber das kontrafaktische „alle fangen bei Null an“ residiert als „Chancengleichheit“ auch im Kern der modernen Wettbewerbsreligion. Für ein Modell – das ohnehin in einer eher lockeren Beziehung zur Wirklichkeit steht – ist sie daher genau richtig. Sollten übrigens in der Realität Kinder von eher schurkigen Menschen auch tendenziell eher schurkig werden, würde das die Anreicherung von Schurkigkeit gegenüber dem chancengleichen Modell nur verstärken.

Das Alte

Der Rest ist wie beim einfachen Modell: da es gibt den Schurken-Vorteil, die Wahrscheinlichkeit, dass ein Aktor, der gerade schurkig ist, gegen einen, der gerade engelig ist, gewinnt. Dieser rogue_advantage ist bei mir in der Regel 0.66.

Der letzte Parameter ist die Verteilung der Schurkigkeit (also der Wahrscheinlichkeit, dass sich ein Aktor in einem Wettbewerb als Schurke verhält). Dazu habe ich wie zuvor eine Gleichverteilung, Exponentialverteilungen der Schurkigkeit mit verschidenen λ (also: gegenüber der Gleichverteilung sind mehr Aktoren Engel, wobei die allerdings alle Schurkeigkeiten über 1 auf 1 beschnitten werden; für kleine λ wird das also schwer zu interpretieren) und Normalverteilungen reingebaut, dieses Mal aber viel expliziter als im einfachen Modell des letzten Posts.

Ich hatte eigentlich vor, den Kram immer laufen zu lassen, bis er „stationär“ würde, also sagen wir, bis der Schurkigkeits-Gradient in den mittleren Schichten sich von Runde zu Runde nicht mehr wesentlich ändert. Stellt sich aber raus: durch die relativ überschaubaren Aktor-Zahlen und die Dynamik der Gesellschaft, in der ja per Design viel Aufstieg stattfindet, rauschen die Metriken, die ich da probiert habe, zu stark, um guten Gewissens sagen zu können, jetzt sei das Ding relaxiert (im Code: DiffingWatcher).

Was passiert?

Stattdessen lasse ich die Modelle jetzt erstmal laufen, bis die (gleichverteilte) Anfangspopulation weitgehend ausgestorben ist (nämlich NL Runden) und ziehe dann nochmal für NL Runden Statistiken, vor allem die mittlere Schurkigkeit in Abhängigkeit von der Hierarchieebene. Die kann ich dann übereinanderplotten, wobei ich die Zeit durch den Grauwert einfließen lasse (spätere, wahrscheinlich etwas relaxiertere, Zustände sind dunkler):

Dabei ist auf der Abszisse die mittlere Hierarchieebene, auf der Ordinate die mittlere Schurkigkeit auf der entsprechenden Ebene; die Zeit ist, wie gesagt, durch den Grauwert der Punkte angedeutet und sorgt für die Streuung.

Am auffälligsten ist wohl, dass Schurkigkeit auf den letzten paar Stufen am drastischsten ansteigt. Das hätte ich in dem Ausmaß nicht erwartet und deckt sich jedenfalls nach meiner Erfahrung nicht mit irgendwelchen Realitäten (in denen die Schurkigkeit schon auf nur moderat schwindelerregenden Ebenen rapide wächst). Ich komme gegen Ende nochmal etwas quantitativer auf die Steilheit des Anstiegs zurück.

Hier, wie auch sonst, sind die Modelle bezeichnet durch einen String – sunde2.py verwendet ihn als Dateinamen –, der aus einer Bezeichnung der Verteilung (hier Exponential mit λ=4), der Zahl der Level N, dem Schurken-Vorteil und dem Lebenszeit-Faktor L besteht.

Eine andere Art, diese Daten anzusehen, die insbesondere etwas mehr von der Dynamik erahnen lässt, ist eine Heatmap der Schurkigkeit; hier laufen die Hierarchieebenen auf der Ordinate, die Zeit auf der Abszisse; aus Bequemlichkeitsgründen hat hier die höchste Ebene mal die Bezeichnung 0 (so ist das übrigens auch im Programm gemacht, in den anderen Grafiken ist dagegen Ebene 50 das Nüßlein-Territorium):

In-joke: Regenbogen-Palette. Ich habe gerade frei, ich darf das.

Hier lässt sich ganz gut erkennen, dass der Kram nach einer maximalen Lebensdauer (da fängt die Grafik an) weitgehend relaxiert ist, und wieder, dass die letzten paar Hierarchieebenen die dramatischsten Schurken-Konzentrationen aufweisen. Die schrägen Strukturen, die überall sichtbar sind, sind zufällige Schurken-Konzentrationen auf der Karriereleiter. Intuitiv wäre wohl zu erwarten, dass sich Engel in Haifischbecken eher noch schwerer tun und so Schurkigkeitszonen selbstverstärkend sein könnten. Insofern ist die relativ geringe Streifigkeit der Grafik – die sagt, dass das wenigstens im Modell nicht so ist – erstmal eher beruhigend.

Umgekehrt bilde mich mir ein, dass im unteren Bereich der Grafik einige blauere (also: engeligere) Strukturen deutlich flacher als 45 Grad laufen: Das könnten Engel-Konzentrationen sein, die gemeinsam langsamer die Karriereleiter besteigen. Fänd ich putzig (wenns die Karriereleiter denn schon gibt), kann aber auch nur überinterpretiertes Rauschen sein.

Und noch eine Auswertung von diesem spezifischen Modell: Alter über Hierarchieebene, was angesichts des aktuellen Alte-weiße-Männer-Diskurses vielleicht interessant sein mag:

Diese Abbildung funktioniert so wie die der mittleren Schurkigkeit, nur ist auf der Ordinate jetzt das Alter statt der Schurkigkeit. In dem Modell leben Aktoren ja zwei Mal die Zahl der Hierarchieebenen Runden, hier also 100 Runden. Die Aktoren ganz unten sind erkennbar deutlich jünger als der Schnitt (der bei 50 liegt), ganz oben sammeln sich alte Aktoren. Klingt speziell in dieser Ausprägung, in der oben wirklich nur Aktoren kurz vom Exitus sind, irgendwie nach später Sowjetunion, und klar ist das Modell viel zu einfach, um etwas wie die City of London zu erklären.

Note to self: Beim nächsten Mal sollte ich mal sehen, wie sich das mittlere Alter von Schuken und Engeln in den unteren Schichten so verhält.

Mal systematisch

Weil Simulationen dieser Art schrecklich viele Parameter haben, ist das eigentlich Interessante, den Einfluss der Parameter auf die Ergebnisse zu untersuchen. Dazu habe ich mir mal ein paar Modelle herausgesucht, die verschiedene Parameter variieren (in der run_many-Funktion von sunde2); Ausgangspunkt sind dabei 50 Ebenen mit einem Lebenszeit-Faktor von zwei und einem Schurkenvorteil von 0.66. Das kombiniere ich mit:

  • einer Gleichverteilung von Schurkigkeiten
  • einer Exponentialverteilung mit λ = 2
  • einer Exponentialverteilung mit λ = 4
  • einer Exponentialverteilung mit λ = 4, aber einem Schurkenvorteil von 0.75
  • einer Exponentialverteilung mit λ = 4, aber einem Lebenszeit-Faktor von 4
  • einer Normalverteilung um 0.75 und einer Breite von 0.15 (womit es fast keine schlimmen Schurken gibt: Schurkigkeit 1 ist ein 5-σ-Effekt, was Mathejargon ist für: Gibts praktisch nicht).

Wenn ich jetzt wieder die Schurkigkeit über der Hierarchieebene plotte und dabei als Fehlerbalken die Standardabweichungen über die oben gezeigten Punktwolken male, kommt sowas raus:

Daraus lassen sich jetzt viele Dinge lesen.

Auffallend ist zunächst die (graue) Gleichverteilung. Sie liegt mit der Schurkigkeit durchweg weit oben, was schlicht daran liegt, dass auch ihre mittlere Schurkigkeit sehr hoch ist: im Mittel verhalten sich in so einer Gesellschaft die Aktoren in jedem zweiten Fall schurkig – in irgendwelchen Realitäten würde das fast sicher nicht funktionieren. Immerhin: in den unteren Schichten ist die Schurkigkeit auch bei der Gleichverteilung immer noch abgereichert, ihr Mittelwert liegt also deutlich unter 0.5.

Spannender sind die vier Modelle mit Exponentialverteilungen. Erstmal hat die gelbliche Kurve λ = 2 (das Beispiel oben war λ = 4); das bewirkt, dass es viel mehr ziemlich schurkige Aktoren gibt – selbst in der untersten Schicht ist die mittlere Schurkigkeit fast 0.4. Weil eine Exponentialverteilung mit λ = 2 einen Haufen Masse oberhalb von 1 hat und das Programm diese zu Aktoren mit Engeligkeit 0 macht, gibt zudem einen Haufen Aktoren, die sich immer wie Schurken verhalten und sich so recht konequent in den oberen Rängen sammeln – weit mehr als bei der Gleichverteilung, bei der zwar die mittlere Schurkigkeit etwas höher ist, es aber weniger Vollschurken gibt. Letztlich ist die extreme Schurkigkeit ganz oben hier also zu guten Stücken ein Artefakt der Beschneidung der Verteilung. Es zeigt aber, dass ein Satz Vollschurken so eine Gesellschaft schon erheblich prägen kann.

Die drei Modelle mit λ = 2 zeigen den Einfluss der anderen Modellparameter: Lässt mensch die Aktoren 4 ⋅ N Runden leben, verfestigen sich die Hierarchien und die Schurken sammeln sich stärker in den hohen Ebenen; richtig dramatisch ist dieser Effekt jedoch nicht (blaue vs. rote Kurve).

Deutlich mehr wirkt sich aus, wenn Schurken 3/4 statt 2/3 der Wettbewerbe mit Engeln gewinnen (die grüne Kurve). Wer also auf Wettbewerb nicht verzichten mag, sollte sich zumindest bemühen, den Vorteil bei schurkigem Verhalten möglichst gering zu halten (wenn nicht der Plan ist, Schurken zu selektieren, wofür es natürlich auch gute Gründe geben kann).

Schließlich gibts noch die Kurve in Magenta: Dabei sind, wie oben schon gesagt, fast alle Aktoren in 3/4 der Fälle Engel, und es gibt keine große Streuung. Wenn es nicht viele Schurken gibt, sammeln sie sich auch nicht sehr in den höheren Rängen – keine Rocket Science, aber doch ganz befriedigend: mit ein paar mäßigen Schurken wird eine Gesellschaft schon fertig.

Wo ich nochmal schaue: ganz gewiss ein Artefakt ist der Knick auf Stufe eins, wo offenbar über die Zeit gemittelt signifikant weniger Schurken leben als auf null oder zwei, und auch die Abnahme der Schurkigkeit zu Ebenen zwei bis etwa fünf in den meisten Kurven sieht verdächtig aus. Wer findet den Fehler?

Exponentiell?

Die qualitative Abschätzung im ersten Teil hat ja erwarten lassen, dass der Schurkenanteil bis zur Sättigung exponentiell steigt, und so sehen die Kurven hier auch in etwa aus. In Wahrheit aber steigt die Schurkigkeit in diesem Modell noch etwas schneller, und zwar recht unabhängig von den Parametern. Das wird sichtbar, wenn mensch die Ordinate logarithmisch aufteilt (Exponentialfunktionen werden dann Gerade, und was dann noch immer „nach oben gebogen“ ist, überholt eine Exponentialfunktion):

Der Extraanstieg gegenüber der Abschätzung könnte Folge der Vernachlässigung der „Anreicherung“ von Schurken im einfachen „bei jeder Stufe 20% mehr Schurken“-Modell. Aber so richtig überzeugt bin ich noch nicht.

Nun: es bleibt noch viel zu spielen. Beim nächsten Mal würde mich vor allem interessieren, wie mensch in die Sättigung kommt – die Schurkigkeit kann ja nicht über 1 gehen – und was dann passiert. Das sollte eigentlich mit diesem Modell noch zu machen sein. Wer mitspielen will: Nochmal das Programm, und meine kleinen matplotlib-Hacks, die die Figuren machen, arbeite ich auf Anfrage auch noch auf.

Zitiert in: Wird Bolsonaro Schuld sein an der nächsten großen Seuche? Relevante Personalien Antisprache: Chancengleichheit

Kriegsfieber aktuell

Bar-plot in
    		Tönen von Oliv
(Erklärung)