Mit Oberstufenmathe gegen die wirklich schweren Probleme
von Dario Stein
Mit Oberstufenmathe gegen die wirklich schweren Probleme
Stellen wir uns vor, wir hätten eine Anzahl von Maschinen, die irgendwelche Aufgaben ausführen sollen, aber nicht alle Maschinen können gleichzeitig arbeiten. Einige müssen auf eine gemeinsame Ressource zugreifen und blockieren sich damit gegenseitig. Das können wir übersichtlich darstellen, indem wir für die Maschinen Punkte aufmalen und sie durch eine Linie verbinden, falls sie einander blockieren.
Abbildung 1: Kleines Optimierungsproblem
Die vier dunkelrot markierten Maschinen können konfliktfrei arbeiten, da sie nicht durch direkte Linien verbunden sind. Unser Ziel ist es, möglichst viele Maschinen gleichzeitig zum Laufen zu bekommen.
Nun wird dieses Problem mit mehr und mehr Maschinen schwer, richtig schwer. Und zwar nicht nur, weil wir dafür bis heute kein schnelles Rechenverfahren kennen, sondern weil sich die schwierigsten bekannten Probleme aus Logistik, Netzwerkanalyse, Verschlüsselungstechnik usw. allesamt auf Maschinen und Konflikte reduzieren lassen. Könnte man dieses eine Problem gut angehen, könnte man sie alle lösen.
Wir werfen mal einen Blick auf eine Situation mit mehr Maschinen, um zu sehen, wie verwirrend das Ganze wird.
Abbildung 2: Grösseres Optimierungsproblem
Eine exakte Lösung lässt sich also nur mit großen Rechenaufwand finden. Es gibt dagegen eine wunderbar einfache Möglichkeit, die Maschinen ohne zentrale Steuerung eine konfliktfreie Arbeitsteilung finden zu lassen. Wir brauchen dazu nicht mehr als das Werfen einer Münze. Angesichts der Einfachheit dieser Lösung wird sie wohl kaum optimal sein. Erstaunlicherweise ist sie aber, wenn man sich klug anstellt, auch gar nicht so schlecht. Wie genau man sich klug anstellt? Ein wenig Oberstufenmathematik sind dafür völlig ausreichend und die Lösung gibt uns eine spannende Tour durch die Gebiete Stochastik, Analysis und Geometrie.
Maschinen arrangieren mit Münzwurf
Unser Ansatz ist wirklich einfach, er ist in ein paar Sätzen erklärt.
Alle Maschinen, die nach dieser Prozedur arbeiten, tun das garantiert konfliktfrei (alle Konflikte müssen ja "nicht gewollt" haben). Man könnte allerdings meinen, dass so überhaupt nur recht wenige Maschinen zum Arbeiten kommen, da ja alle Konflikte gleichzeitig richtig werfen müssen. Wir wollen also abschätzen, wie viele arbeitende Maschinen wir statistisch zu erwarten haben .
Der Erwartungswert
Schauen wir uns einmal konkret die -te Maschine an. Damit sie arbeitet, muss sie zunächst "will" werfen, das hat die Wahrscheinlichkeit
. Auch muss jede Maschine, mit der sie in Konflikt steht, "will nicht" geworfen haben. Nennen wir diese Anzahl der Konflikte einmal
, so ist die Wahrscheinlichkeit dafür
, dass alle Maschinen entsprechend geworfen haben. Insgesamt haben wir also eine Wahrscheinlichkeit von
Wie viele Maschinen arbeiten nun insgesamt? Denken wir uns einmal die Kennzahl , die den Beitrag der
-ten Maschine zur Anzahl der arbeitenden Maschinen misst. Also 1, falls die Maschine arbeitet, und 0 sonst. Der erwartete Beitrag
ist gerade wieder
. Zum Beispiel hat eine Maschine mit zwei Konflikten einen erwarteten Beitrag von
zur Gesamtzahl, da sie mit Wahrscheinlichkeit
arbeitet.
Die Summe
Rechnen wir diese Zahl für das erste Beispiel einmal aus: Es gibt fünf Maschinen mit nur einem Konflikt, eine mit zweien, eine mit dreien. Bedeutet
Durch einfachen Münzwurf, völlig ohne Planung, bekommen wir im Schnitt also schon mehr als eine Maschine zum Laufen. Wir wissen rein aus der Rechnung deshalb auch schon, dass mindestens zwei Maschinen konfliktfrei arbeiten können, ohne überhaupt die genaue Konfiguration angeschaut oder mit dem Probieren angefangen zu haben. Aber natürlich wird es noch besser gehen.
Wieso faire Münzen?
Unsere Maschinen werfen "will"/"will nicht" mit derselben Wahrscheinlichkeit . Das war ein erster Versuch, aber es gibt keinen Grund, wieso das besonders gut sein sollte. Wenn es sehr viele Konflikte gibt, sollten die Maschinen eher zurücktreten anstatt sich zu blockieren, bei wenigen Konflikten müssen sich überhaupt ausreichend Maschinen freiwillig melden. Anstatt mit Wahrscheinlichkeit
soll "will" nun mit einer zu bestimmenden Wahrscheinlichkeit
vorkommen. Die Überlegung von oben liefert nun die neue Wahrscheinlichkeit, dass Maschine
arbeitet
Wir möchten jetzt klug so bestimmen, dass wir eine möglichst große Anzahl arbeitender Maschinen zu erwarten haben. Um beim Einstiegsbeispiel zu bleiben erhalten wir für den Erwartungswert den Ausdruck
Das ist ein Polynom in , dessen Grad grob die Maximalzahl an Konflikten eines Knotens plus 1 ist. Wenn wir direkt versuchen würden, das Maximum für Werte von
zwischen 0 und 1 zu finden, hätten wir eine eklige Kurvendiskussion vor uns. Eine Vereinfachung muss her.
Arithmetisches und geometrisches Mittel
Schauen wir uns zunächst einen speziellen Fall an: Wie sieht es aus, wenn alle Maschinen gleichviele Konflikte haben, nämlich genau Stück? Für den Erwartungswert kommen wir dann auf die einfache Formel
und tatsächlich können wir diesen Term mit der Produktregel leicht ableiten und dann maximieren. Was machen wir aber mit echten Systemen und deren unterschiedlichen Konfliktzahlen? Wir könnten hier mit der durchschnittlichen Konfliktzahl
starten. Im ersten Beispiel hat jede Maschine im Mittel Konflikte. Trotzdem bringt uns die vereinfachte Formel mit dem krummen Wert von
weiter. Tatsächlich ist der echte Erwartungswert nämlich immer mindestens so hoch wie der vereinfachte Wert. Wenn wir die vereinfachte Formel optimieren, schneiden wir also auf jeden Fall gut ab.
Dieses zunächst erstaunliche Ergebnis können wir selbst beweisen (wer die Aussage ohne Beweis akzeptieren möchte, kann sofort den nächsten Abschnitt weiterlesen). Den Schlüssel zum Beweis bilden zwei verschiedene Arten der Mittelwertbildung. Für zwei Zahlen ist ihr arithmetisches Mittel einfach
ihr geometrisches Mittel hingegen ist
Es gilt nun immer
. Die beste Art, sich das vorzustellen, ist geometrisch: Nehmen wir ein Rechteck mit Seitenlängen
und
, dann ist
die Kantenlänge eines Quadrats mit demselben Flächeninhalt. Jetzt müssen wir nur wissen, dass das Quadrat unter den Rechtecken gleichen Inhalts den kleinsten Umfang hat, und fertig sind wir!
Abbildung 3: Arithmetisches und geometrisches Mittel
Arithmetisches und geometrisches Mittel verallgemeinern sich auf mehrere Zahlen ganz genau so mit und der
-ten Wurzel. Die Ungleichung bleibt dabei in jedem Fall bestehen.
Zurück zum Erwartungswert also. Auf der einen Seite interessiert uns der vereinfachte Ausdruck mit der durchschnittlichen Konfliktzahl
Das ist nichts anderes als das geometrische Mittel der -Ausdrücke, also nach unserer Ungleichung stets kleiner als das arithmetische Mittel
Dieser Ausdruck trat aber in unserem eigentlichen Erwartungswert auf. Multiplizieren wir beide Seiten mit , erhalten wir wie gewünscht
Treten wir kurz etwas von den Formeln zurück, ist das auch nicht überraschend. Die Vereinfachung können wir uns so denken: Wir starten mit einem Problem, in dem Maschinen sehr unterschiedliche Konfliktzahlen haben, mal sehr viele, mal sehr wenige und vergleichen das mit einem (hypothetischen) System, in dem alle Maschinen dieselbe gemittelte Konfliktzahl haben. Wenn beide Systeme Münzen werfen, wer bekommt im Schnitt mehr Maschinen ans Laufen?
Die Antwort ist das erste. Die Maschinen mit sehr wenigen Konflikten stechen sozusagen heraus, man kann sie leicht ans Laufen bringen, exponentiell stark werden sie bevorteilt. Das zweite System hat nur mittlere Konfliktzahlen, ist viel regelmäßiger und damit im Schnitt schwieriger zum Laufen zu bringen (aber leichter zu analysieren). Auch das ist eine Interpretation der GM-AM-Ungleichung von oben.
Die optimierte Wahrscheinlichkeit
Wir haben also lediglich die einfache Aufgabe vor uns, zu sehen, welches zwischen 0 und 1 den Ausdruck
maximiert. Also los, Kurvendiskussion! Das
ist egal und wir leiten mit der Produktregel ab
Die erste Klammer wird zwischen 0 und 1 nicht Null, durch Nullsetzen der hinteren Klammer erhalten wir endlich die optimierte Wahrscheinlichkeit
Unser Verfahren ist also sehr einfach geblieben, alles was wir tun müssen, ist auszurechnen, dann kann das Münzwerfen losgehen.
Demo-Programm
Natürlich gibt's ein Demo-Programm, für die einfache Grafik in Lua/löve2d. Der vorgestellte Algorithmus ist so einfach, dass man kaum Pseudocode bräuchte, aber der Vollständigkeit halber kommt hier eine Implementierung. Die Funktion neighbours(k) liefert zu Maschine k eine Liste der Nachbarn, d.h. Konflikte, p0 ist die wie oben bestimmte Wahrscheinlichkeit. That's all.
-- Toss some coins to see who wants to work local wants = {} for k = 1,n do wants[k] = love.math.random() < p0 end -- Find out who should work in the end for k = 1,n do -- Are all neighbours idle? local neighboursIdle = true for _, l in ipairs(neighbours(k)) do if wants[l] then neighboursIdle = false break end end -- We only work if we want and all neighbours don't working[k] = wants[k] and neighboursIdle end
Das komplette Programm gibt's hier zum Download:
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.