Die Trennung zwischen Mathematik und Informatik

Auf Online-Portalen wie online-vorlesungen.de wird zwischen zwei Vorlesungen unterschieden. Einmal gibt es die Mathematik und einmal die Informatik. Wo genau ist der Unterschied? Grob kann man sagen, dass alle Vorlesungen aus dem Bereich der Mathematik eine veraltete Mathematik diskutieren. Genauer gesagt eine Wissenschaft die bis ungefähr 1920 relevant war. Thema derartiger Vorlesungen können sein: Differentialgleichungen, lineare Optimierung, Gruppentheorie, Algebra. Gemeinsames Merkmal dieser Vorlesung ist, dass sie ihren Schwerpunkt in der Didaktik haben, es wird typischer Klippschulunterricht geboten bei dem es nicht um die Mathematik als solche geht sondern um die Frage wie man Mathematik anderen vermittelt. In den Informatik-Vorlesungen geht es deutlich wissenschaftlicher zu. Dort ist besonders die Kategorie „Theoretische Informatik“ von Interesse. Unter dieser Überschrift werden Entwicklungen behandelt die in der Mathematik ab ungefähr dem Jahr 1920 einsetzten. Ausgehend von dem Gödel Unvollständigkeitssatz wird die Automatentheorie behandelt. Man kann sagen, dass die theoretische Informatik die eigentliche wissenschaftliche Mathematik beinhaltet und für die Gegenwart und besonders für die Zukunft eine hohe Bedeutung besitzt.

Mathematik und Informatik lässt sich gut auseinanderhalten. Die Mathematik beschäftigt sich mit leichten Problemen, also solchen von denen die Lösung bekannt ist. Damit ist beispielsweise ein Gleichungssystem gemeint wo drei Gleichungen und drei Unbekannte existieren. Innerhalb der Mathematik wird jetzt dafür eine Lösung gefunden. Oder ein anderes Beispiel ist die Frage welche Steigung eine Kurve in einem Punkt hat. Derartige Fragen kann man entweder manuell lösen, oder Computersoftware wie Mathematica verwenden. Dadurch wird die Mathematik zu einer sehr überschaubaren Angelegenheit wo es keinerlei Überraschungen mehr gibt. Die wirklich kniffligen Probleme für die keine Lösungen bekannt sind, werden hingegen von der theoretsichen Informatik und darauf aufbauenden Fächern angegangen. Die Informatik unterscheidet zwischen Problemen deren Lösung bekannt ist und Probleme für die es keine Lösung gibt. Die Informatik ist in der Lage sämtliche Probleme der Mathematik zu lösen. Sie hat dafür neben Mathematica noch viele weitere Computerprogramme entwickelt. Gemeinsames Merkmal ist, dass der Algorithmus bekannt ist und das die Ausführung auf einem Standard-PC in unter 1 Minute möglich ist. Was jedoch ungleich spannender in der Informatik und damit auch für die Mathematik sind, das sind Probleme die als np-hart bezeichnet werden. Also Probleme für die kein Algorithmus bekannt ist und dessen Lösung auf einem Standard-PC sehr lange dauern würde. Diese np-harten Probleme sind die eigentliche Mathematik der Gegenwart, wo es also Herausforderungen gibt, die noch keiner vorher bewältigt hat. Hier besteht Forschungsbedarf.

Der Hauptfehler den die meisten Mathematiker machen ist, dass ihnen selbst nicht klar ist, dass ihr Fach keine Bedeutung besitzt. Damit ist gemeint, ihnen ist nicht klar, dass sämtliche Probleme innerhalb der Mathematik bis 1920 gelöst sind, dass es keine echten Herausforderungen mehr gibt. Stattdessen glauben viele Mathematiker, dass eine Aufgabe schwer ist, wenn sie viele Klammern enthält oder wenn komplexe Zahlen darin enthalten sind. Erschwerend kommt hinzu, dass die meisten Mathematiker nicht über die Entwicklungen unterricht sind, die ab den 1920’er Jahren im Rahmen der Turing-Machine stattgefunden haben. Sie haben entweder noch etwas von np-harten Problemen gehört, oder sie glauben, dass es nichts mit Mathematik zu tun hätte. Im wesentlichen zeichnet sich die Hochschulmathematik dadurch aus, dass sie die Wirklichkeit leugnet. Die Gefängnismauern innerhalb derer die Mathematik bewegt sind selbst verursacht. Denn man kann in jeder Leihbücherei nachlesen, was Alan Turing, Kurt Gödel und all die anderen Mathematiker erforscht haben und wiso das die Mathematik auf eine gänzlich neue Stufe gebracht hat. Komisshcrweise findet diese Auseinandersetzung nicht statt. Innerhalb einer Mathematik-Vorlesung wird man niemals den Begriff „Automatentheorie“ hören, obwohl sich darüber die Mathematik sehr viel leichter verstehen lässt.

Wie kann man darauf auf Neueinsteiger reagieren? Nehmen wir mal an, jemand interessiert sich für Mathematik und für Informatik. Dann lautet mein Tipp, die Mathematik komplett zu ignorieren und sich stattdessen mit theoretischer Informatik zu beschäftigen. Unter diesem Stichwort findet man die richtigen Bücher, die richtigen Professoren und die richtigen Lehrveranstaltungen. Theoretische Informatik ist die bessere Mathematik, man kann es auch als moderne Mathematik bezeichnen. Auch Stephen Wolfrom mit seinem Buch „A new kind of science“ ist in diesen Bereich einzuordnen. Es handelt sich um eine Einführung in theoretische Informatik. Um vielleicht einmal auf die Eingangs erwähnte URL zurückzukommen. http://www.online-vorlesungen.de/Videos/Informatik/Theoretische_Informatik.htm Unter dieser Adresse findet man viele Online-Vorlesungen die wirkliche Wissenschaft sind. Ein erster Überblick hat ergeben, dass sie durchweg empfehlenswert sind. Es gibt zwar auch dort Dozenten die nur oberflächliche Informationen bieten und Videos die schon etwas älter sind, aber das sind Detailprobleme in einem grundsätzlich positiven Umfeld. Bei den Mathematik-Vorlesungen auf dem selben Portal ist es genau andersherum …

Die Frage die sich anschließt lautet: wie bringt man das wunderbare Fach „theoretische Informatik“ in die Grundschulen? Weil das etwas wäre, was den Nachwuchs wirklich weiterbringt.

Mathematik als Königin der Wissenschaft?

Überlicherweise wird Mathematik als Vorzeige Wissenschaft präsentiert, als Krone des menschlichen Geistes von der alle anderen Wissenschaften zehren. Wenn Kritik an der Mathematik geübt wird, dann eher von denen die sie nicht verstehen, also von Studenten die eine Klausur bestehen müssen aber keinen Plan haben von gar nichts. Dort gilt Mathematik als zu abstrakt und zu rational. Es gibt jedoch noch eine dritte Möglichkeit über Mathematik zu philosophieren, und das soll im folgenden erläutert werden.

Das merkwürdige am Fach Mathematik ist die Tatsache, dass es offenbar keine Fachkonferenzen gibt, also wo sich Profimathematiker austauschen und über die neusten Entwicklungen in ihrem Fach debattieren. Was es jedoch gibt, sind Didaktik-Konferenzen wo also von Wissenschaftlern darüber diskutiert wird, wie man Mathematik am besten unterrichtet und ob der Taschenrechner etwas in der Grundschule zu suchen hat oder nicht. Bei allen anderen Fächern in der Wissenschaft wie Physik oder Biologie ist es üblich, dass es Konferenzen über das Fach als solches gibt. Im Beispiel der Mathematik würde es bedeuten, dass man sich über Differentialgleichungen unterhält und darüber wie da der aktuelle Stand ist. Der Grund warum sowas nicht durchgeführt hat damit zu tun, dass es keine Neuigkeiten gibt. Warum das so ist kann man mit einem Blick in die Geschichte der Mathematik ermitteln.

Ab ungefähr dem Jahr 1930 wurde innerhalb der Mathematik die Turing-Machine erfunden. Es handelt sich um ein formales Modell um Dinge zu berechnen. Mit einer Turing-Maschine kann man die komplette Mathematik emulieren. Und seit diesem Zeitpunkt geht es nicht mehr um die Mathematik früherer Zeiten sondern was stattdessen im Mittelpunkt steht sind Programme für die Turing-Maschine. Das heißt, es wird darüber gestritten wie man einen Computer programmiert. Dies wird üblicherweise als Informatik bzw. als Softwareengineering bezeichnet. Und das ist die eigentliche State-of-the-art Mathematik.

Dazu vielleicht ein Beispiel: relativ früh hat man angefangen, sogenannte Computeralgebra System zu entwickeln. Das sind Programme wie Mathlab, Mathematica, Mupad usw. mit denen sich Funktionen plotten lassen und Gleichungen umstellen. Die Schwierigkeit ist weniger mit diesen Programmen Mathematik zu betreiben, also eine Aufgabe auszurechnen sondern die Herausforderung besteht darin, derartige Programme in C++ zu schreiben. Darüber unterhält sich die Mathematik-Elite auf den Konferenzen. Komischerweise wird sowas jedoch nicht im Mathematikuntericht an den Schulen oder Universitäten unterrichtet. Wir haben also den seltenen Fall, dass es eine unterrichtete Mathematik gibt, die besteht aus Bruchrechnen, Binomischen Formeln und Differentialgleichungen. Diese unterrichtete Mathematik ist jedoch für echte Mathematiker komplett langweilig. Weil, die benutzen ohnehin Softwareprogramme und viele können gar keine Formeln umstellen.

Welchen Zweck hat also die Schulmathematik? Die Antwort ist ernüchternd: es gibt keinen. Sondern Mathematik hat die Funktion von Latein eingenommen und soll ein bestimmtes gesellschaftliches Bild erzeugen. Nichts, aber wirklich gar nichts was im Mathematik-Unterricht vorkommt hat für später eine Relevanz. Ganz besonders nicht, wenn man sich auf wissenschaftlichem Niveau damit auseinandersetzt.

Böse formuliert ist der Mathematik-Unterricht eine Art von Bestrafungsinstrument, dient der Einschüchterung, soll Lebenschancen verbauen und soll Respekt lehren. Kommen wir zur Eingangsthese zurück, dass Mathematik die Königin der Wissenschaft wäre. Früher hatte sie einmal diese Rolle, aber heute nicht mehr. Stattdessen darf man Informatik als Königin der Wissenschaft bezeichnen. Informatik hat auch etwas mit Mathematik zu tun, aber es behandelt noch viel mehr Themen. Informatik ist eine Art von Klammer, innerhalb derer man jede andere Wissenschaft betreiben kann. Ich würde sogar soweit gehen und zu fordern, Mathematik aus dem Lehrplan von Universitäten zu streichen. Das Fach ist entbehrlich, die Inhalte können in den anderen Fächern mit unterrichtet werden. Das heißt, wenn Biologen unbedingt ausrechnen müssen, wie die Wachstumsrate einer Hasenpopulation ist, kann man das mit einem Excel Chart nebenbei machen ohne das seperat überprüft wird, ob man jetzt richtig gerechnet hat.

Wollte man wirklich etwas unterrichten wie Kerninformatik, so müsste man dort den Ansatz wählen den Stephen Wolfram in seinem Buch „A new kind of science“ vorgestellt hat. Das heißt, man erläutert was ein zellulärer Automat ist und wiso die Rule 110 turing-mächtig ist. Das wäre richtige Mathematik, die so auch für Fachleute von Interesse ist. Darauf aufbauend könnte man dann über Künstliche Intelligenz, sich-selbst reproduzierende Systeme und über Feedback-Loops philosophieren. Mir ist jedoch keine Universität oder Schule bekannt, wo sowas bereits behandelt wird.

Häufig wird behauptet, dass es innerhalb der Mathematik Methoden und Modelle gäbe die sehr mächtig wären und die man in anderen Wissenschaften einsetzen könnte. Beispielsweise um Zufallsprozesse zu beschreiben, um Simulationen durchzuführen oder um Beziehungen abstrakt zu beschreiben. Doch damit überschätzt man die Mathematik. Im Grunde hat sie nichts weiter zu bieten als die Zahlen, Brüche und einige Klammern. Auch Hochtrabende Symbole wie das Summenzeichen, grichische kleine Buchstaben die besonders in der Stochastik beliebt sind oder das Integralzeichen sind weit weniger mächtig als unterstellt wird. Wer wirklich mächtige Werkzeuge benötigt, die sich von anderen Wissenschaften wie der Linguistik, der Physik, der Sportwissenschaft oder den Literaturwissenschaften einsetzen lässt der sollte seinen Fokus auf die Informatik werfen. Dort heißen diese Werkzeuge Software, Online-Portale und Datenbanken. Das ist der eigentliche Zauberkasten, der das tägliche Leben erleichtert.

Mathematik-Unterricht für Dummies

Mathematik gilt nach wie vor als Horrorfach. Die Antwort die das Bildungssystem typischerweise darauf hat, ist das Niveau abzusenken. Also nur eine einfache Mathematik zu unterrichten und sich für das Erklären besonders viel Zeit zu nehmen. Ironischerweise ist der Königsweg zu guter Mathematik-Didaktik jedoch ein anderer. Wenn ein Student etwas nicht versteht, muss man versuchen die Situation zu eskalieren. Also mit Hardcore-Methoden es erklären. Machen wir es mal ein einem konkreten Beispiel:

An der Tafel steht eine Formel die nach einer Variablen aufgelöst werden soll. Keiner in der Klasse hat einen Plan. Jetzt ist es Aufgabe des Dozenten die großen Geschütze auszupacken und zwar sympy. Das ist ein Plugin für Python was für simples Formelumstellen ein overengineering bedeutet, so als wenn man mit einer Bazuka einen Hasen abknallt. Aber hey, warum nicht? Also tippt man die Formel in sympy ein, und kann das Problem lösen.

Komischerweise wird das in einem typischen Mathematik-Unterricht nicht thematisiert. Der Grund ist, dass Mathematik üblicherweise so funktioniert, dass man die Studenten selber den Algorithmus ausführen lässt. Vielleicht ein weiteres Beispiel: Angenommen es soll die Aufgabe gelöst werden „100 : 7“. Um das zu tun, muss man eine Heuristik anwenden, also eine Abfolge von Schritten bei dem man zuerst 10 : 7 teilt, dann den Rest bestimmt, dann noch etwas untereinander schreibt usw. Normalerweise besteht der Mathematik-Unterricht darin, den Studenten diese Heuristiken zu erklären. Das heißt, die Studenten spielen Computer, sie führen Schritte aus, und am Ende gibt es ein Ereignis. Nur, welchen Nutzen soll das haben? Python kann diese Heuristik ebenfalls ausführen, man braucht dort nur auf solve klicken und hat ebenfalls die Lösung.

Das Problem in der Mathematik-Didaktik besteht darin, dass man ein gestörters Verhältnis zu Algorithmen entwickelt hat. Die Idee lautet, dass man Algorithmen unterrichtet, so dass sie von Menschen ausgeführt werden. Aber die Algorithmen als solche und wie man sie auf einem Computer implementiert werden nicht thematisiert. Man glaubt, das wäre nicht bedeutsam. Echte Mathematik geht anders. Die Einsteiger, die noch gar keinen Plan haben, starten einfach Python und tippen dort die Gleichung ein, während die Profis die etwas anspruchsvollere Herausforderungen suchen, sich überlegen können wie man selber solche Heuristiken in Python formuliert. Also wie ein Computerprogramm aussieht, was eine Gleichung umstellt.

Die Realität an den Hochschulen ist eine andere: üblicherweise sind Taschenrechner und Python-Interpreter ein Tabu. Ihre Benutzung wird nicht erläutert, in einer Matheklausur werden sie als Betrugsversuch bezeichnet. Der Clou ist jedoch, dass durch ein Plugin wie sympy die Mathematik sehr viel leichter wird. Das heißt, gerade Leute die nicht wissen wie man Formeln umstellt werden es zu schätzen wissen.

Guter Mathematik-Unterricht besteht zunächst einmal darin, den Studenten den Taschenrechner zu erklären. Also wo sie drücken müssen, um eine Lösung zu finden. Wenn das klar ist, kann man den Studenten Computeralgebra-Systeme erläutern und ihnen zeigen wie sie Funktionen plotten und das in Lyx einbetten. Und wenn das klar ist, sollte man überleiten zur Automatentheorie, also zu zellulären Automaten, um aufzuzeigen wo der Dozent noch Probleme hat und wo er selber Hilfe benötigt. Denn, man bildet den Nachwuchs ja dafür aus, dass er einmal schlauer wird als man selber.

Warum wird das nicht gemacht? Würde man anfangen, Taschenrechner und erst Recht Python im Mathematik-Unterricht zuzulassen würde vom traditioellen Unterricht nicht mehr viel übrig bleiben. Der komplette Lehrplan wäre hinfällig. Es gäbe vor allem nicht länger die Möglichkeit zwischen schlauen Schülern und dummen Schülern zu unterteilen. Das heißt, man kann nicht länger Schüler vor der Klasse lächerlich machen und ihnen eine 4 auf dem Zeugnis geben.

Bug: Mathematik-Kurse sind zu leicht

Vor kurzer Zeit hatte ich in einem Matheforum eine lebhafte Diskussion bei der es um die Lehrinhalte in einem Mathestudium ging.http://scienceblogs.de/mathlog/2017/04/15/mythos-mathestudium-die-zweite/ Wir haben gegenseitig unsere Argumente ausgetauscht aber auf einen Nenner kamen wir nicht. Irgendwie hat mich das Thema nicht losgelassen und ich habe mir auf http://academicearth.org/mathematics/ angeschaut, wie es weltweit um die Mathematikausbildung bestellt ist. AcademicEarth ist nicht irgendeine Webseite, sondern dort sind die weltweit besten Kurse von US-Amerikanischen Universitäten abrufbar. Leider waren die Mathematik-Vorlesungen für meinen Geschmack zu leicht. Klar, es wurde vieles von dem Besprochen was auch in den Mathematik-Zeitschriften thematisiert wird, und dennoch ich werde den Verdacht nicht los, als ob das alles Kurse für Einsteiger waren. Wo ist das Problem? Ich glaube, das Problem ist, dass die Inhalte die ein Stephen Wolfram erzählen würde (A new kind of science) in den Mathevorlesungen an den Universitäten noch nicht angekommen sind. Vereinfacht gesagt kann man sagen, dass die Mathematikkurse die in Deutschland und in den USA abgehalten werden, auf dem Nivea von Analog-Rechenschiebern stehengeblieben sind. Wo also sehr kompliziert unterrichtet wird, was ein Logarithmus ist oder wie man die Ableitung einer Funktion bestimmt. Während Stephen Wolfram etwas ganz anderes im Sinn hatte, als er sein berühmtes Buch geschrieben hat. Er stellt nähmlich den zellurären Automaten in den Mittelpunkt und baut darauf dann alles weitere auf.

Und in der Tat, wenn ich mir das Buch von Wolfram anschaue so muss ich sagen, dass es nicht zu leicht ist. Sondern die Hälfte verstehe ich nicht. Das heißt, bei dieser Form von Mathematik gibt es noch etwas, an dem man sich abarbeiten kann. Leider steht Wolfram mit seiner Unterrichtsmethode relativ alleine da, jedenfalls was das Videoangebot bei Acadmicearth betrifft.

Aber gehen wir nochmal zurück zu den Mathematik-Vorlesunge+n die man sich online anschauen kann. Es gibt sie in großer Menge. Insgesamt erstrecken sich die Vorlesungen über 3 Bildschirmseiten, und wenn man dann auf einen Kurs klickt, popt noch ein Extramenü aus, wo dann je 10 Einzelvideos zu sehen sind. Es ist also sehr viel Material. Und schaut man sich eines dieser Videos an, so wird der sehr viel mit Fachbegriffen und Vorwissen gearbeitet. Aber, eigentlich lassen sich alle aufgezeigten Probleme entweder mit Matlab oder mit Python lösen. Die einzige Leistung die man als Student erbringen muss besteht darin, nach dem Inhalt der vorlesung bei Google zu googlen und herausfzufinden wie man das in Python löst. Das gibt man in seinen Laptop ein und schon hat man die Lösung. Die Frage die sich stellt lautet: warum wird nicht gleich in der Vorlesung Matlab genutzt?

Ich vermute mal, die Antwort zu kennen. Weil es dann jeder könnte und die Vorlesung wie ein Kuchen in sich zusammenfällt. Null Substanz, null Anspruch. Und mit so einem Quatsch werden die Studenten am M.I.T. belästigt, Skandal! Die meisten Laien, die zum ersten Mal in einer derartige Vorlesung hineinzappen, denken irrtümlich der Professor würde lauter unlösbare Probleme an die Tafel schreiben. So wie in dem Film „Good Will Hunting“ wo sich schon Legionen von hochintelligenten Mathematikern die Zähne ausgebissen haben. Wenn es so wäre, wäre es toll, aber das ist nicht der Fall. Die eigentliche Dekodierungsarbeit besteht darin zu erkennen, dass die dargebotene Mathematik aus dem Analogzeitalter stammt und sich entweder mittels Rechenschieber oder aber mit simplen Mathematik-Programmen lösen lässt. Ungelöste Probleme werden selbst in den fortschrittlichen Klassen nicht präsentiert.

Was genau wird also dann abgefragt um den Studenten eine 1+ zu schenken? Ich weiß es nicht. Mathematik ist es jedenfalls nicht. Mir kommt es eher vor wie die Sprache Latein. Und ich verstehe Anfänger die sagen, ich verstehe es nicht. Weil ich es auch nicht verstehe.

Die Arbeit von Stephen Wolfram kann man am besten so in Worte fassen, dass alles was nicht turing-mächtig ist keine Bedeutung hat für die Mathematik. Das dürfte auf 99% des Unterrichtsstoffes zutreffen, der bei Academicearth online einsehbar ist. Man kann zwar im Detail jeweils darüber streiten, wie man eine konkrete Differentialgleichung löst und mitunter gibt es da auch eine Experten, die sich perfekt damit auskennen, aber neue Dinge wird man dabei nicht herausfinden. Vielmehr ist die Aufgabe an sich nicht kompliziert genug, es macht keinen Sinn sich damit aufzuhalten.

Auf der anderen Seite ist alles was mit zellulären Automaten, Chaosforschung und formalen Sprachen zu tun hat, hochgradig schwer zu bewerten. Das heißt, wenn dort jemand ein Problem nicht lösen vermag ist es besser wenn man sich das mal anschaut weil womöglich das Problem nicht lösbar ist.

DIDAKTIK
Die meisten Probleme die innerhalb eines Mathematik-Unterrichts diskutiert werden haben nichts mit Mathematik zu tun. Sondern worum es stattdessen geht ist Mathematik zu vermitteln. Ein typisches Mathematikproblem was in jedem Universitätskurs vorkommt hat damit zu tun, dass sich Studentin 1 meldet und sagt, sie versteht nicht was an der Tafel steht. Oh jetzt leuchten die Augen des Lehrers, weil das genau sein Gebiet ist. Und zwar das Erklären. Er schreibt also die selbe Formel auf eine andere Weise hin und verwendet vielleicht sogar eine Analogie aus dem normalen Leben. Entweder hat die Studentin es jetzt verstanden, dann sind alle glücklich, oder eben nicht. Das interessante an diesem Beispiel ist, dass es eben nicht um die Differentialgleichung als solche geht und das man damit nichts spannendes anfangen kann, sondern worum es geht ist die Stoffvermittlung. Das Problem mit dem Mathematik-Unterricht besteht, dass nichts mit eigentlicher Mathematik zu tun hat, sondern das ganze nur eine böse Form des Intelligenztestes ist. Einfacher gesagt geht es darum, die Studenten ohne Grund zu quälen.

Dabei gibt es einen simplen Trick um der Hölle zu entgehen. In der Grundschule reicht ein simpler Taschenrechner aus, um den Lehrer auf Distanz zu halten. Man kann damit jede beliebige Aufgabe lösen und zwar schneller als sonst jemand. Im Studium hingegen reicht Python aus, um alle Aufgaben zu lösen und ein bisschen Googlen um die vielen Fachbegriffe auseinanderzuhalten. Und das wissen auch die Lehrer. Deshalb ist in der Grundschule der Taschenrechner verboten und in einer Univorlesung darf man keine Laptops mitbringen. „Weil, dann könnte es ja jeder“.

Die wirlichen Herausforderunge beginnen jedoch da, wo auch Mathematik-Profis auf einem Laptop nicht in der Lage sind die Aufgaben zu lösen. Komischerweise stößt man in einem Mathematikstudium niemals auf derartige Probleme. Weil Themen wie Künstliche Intelligenz, zelluläre Automaten oder formale Sprache nicht behandelt werden.

Das Dreikörperproblem

Das Dreikörperproblem war ursprünglich ein Problem für die Physik. Man hat im Weltraum drei verschiedene Planeten die sich gegenseitig mittels Gravitation anziehen. Das Rätsel ist jetzt wo sich die Planeten zu einem beliebigen Zeitpunkt befinden. Die Lösung für das Dreikörperproblem ist dann eine Formel die ungefähr so aussehen sollten: f(x)=y. Als x-Wert setzt man den Zeitpunkt ein, z.B. 1. Feb 2017 und als y-Wert erhält man dann die Position von Körper 1.

Gehen wir zunächst einen Schritt zurück und untersuchen ein Problem was relativ simpel ist. Man hat eine Sonne, und eine Erde die sich um die Sonne bewegt. Durch die Gravitation gibt es eine schöne Kreisbahn und man kann immer genausagen wo die Erde gerade ist. Auch hier wieder hat man eine Formel f(x)=y Und wenn man die Formel als Kurve einzeichnet erhält man eine Sinus-Funktion. Man setzt einfach einen beliebigen Zeitpunkt ein und kann dann im Plot das Ergebnis ablesen. Beim Dreikörperproblem ist die Sache schwieriger. Weil die Bewegung der Körper sehr viel komplexer ist. Noch relativ leicht lässt sich ermitteln wo die Körper sind, wenn man nur wenige Schritte in die Zukunft plant. Hier reicht es aus, eine Physik-Engine wie ODE zu verwenden, die drei Körper einzuzeichnen und eine physikalisch korrekte Simulation durchzuführen. Man kann dann für 10 Schritte in die Zukunft sehr leicht sagen wo die Körper sein werden, man lässt die Simulation einfach laufen.

Aber was ist, wenn man eine sehr weitreichende Prognose braucht, also wissen will wo sich die Körper in 1 Mio Zeitschritten befinden? Leider kann die ODE-Engine darauf keine Antwort geben. Man kann immer nur genau einen Schritt in die Zukunft rechnen. Um sehr viele Schritte durchzuführen, muss man das System rechnen lassen. Das Dreikörperproblem besteht darin, dass man einerseits nicht im Einzelschritt arbeiten will, aber dennoch wissen will in welchem Zustand sich das System in Zukunft befinden wird. Wie geht das?

Nach meiner Recherche lässt sich das Problem allein über die Mathematik oder über die Physik nicht lösen. Bis ungefähr dem Jahr 1900 wurde keine mathematische Theorie entwickelt, mit der man eine Physik-Simulation invers berechnen kann. Sondern man benötigt zwingend einen Computer plus Künstliche Intelligenz. Mit einem Computer allein ist das Problem ebenfalls nicht lösbar. Weil der Computer dank einer Physik-Engine wie ODE ja nur die sogenannten Forward-Simulation durchführen kann, also exakt sagen kann wo sich die Himmelskörper befinden aber immer nur für den nächsten Timestep. Um beliebige Timesteps zu rechnen benötigt man ein weiteres Stück Software, genauer gesagt ein Computerprogramm wo man als Inputparameter den Timestep vorgibt und das Programm dann die Koordinanten ausgibt. Die Frage aus Sicht der Informatik lautet jetzt: wie muss das Programm aussehen?

Hier gibt es verschiedene Ansätze. Eine besteht darin, neuronale Netze zu nutzen. Dabei betrachtet man das Program als Blackbox und versucht diese zu optimieren. Man nimmt Beispieldaten, ändert die Gewichte und erhält so einen Prognosewert. Das neuronale Netz gibt die Zielkoordinaten aus, allerdings mit einer Unsicherheit.

Leider sind neuronale Netze nicht die beste Methode. Auch damit gelingt es nicht das Problem zu lösen. Der Grund ist, dass bei der Simulation des Dreikörperproblems sehr viele Interaktionen möglich sind. Es ist also nicht so, dass man eine simple Zahlenfolge hat, die sich irgendwann wiederholt und wo man schnell ein Muster erkennt, sondern die Koordianten der Körper sind chaotisch, ein Muster ist nicht zu erkennen bzw. es ist sehr komplex.

Die meiner Meinung nach beste Methode das Dreikörperproblem zu lösen ist eine linguistische Finite State Machine. Damit ist gemeint, dass man das Problem zunächst nicht als mathematisch-physikalisch begreift sondern es als sprachliches Konstrukt versteht. Man beschreibt den Verlauf der Körper mit einer domänenspezifischen Sprache. Das heißt, denkt sich Begriffe aus und setzt diese in Beziehung. Dieses linguistische Netz wird dannn in eine Finite-State-Machine überführt.

Ein Beispiel: Man stellt sich vor wie ein Clown mit drei Bällen jongliert. Auf den ersten Blick ist das ein klassisches Physik-Problem. Jeder der Bälle hat eine Beschleunigung und eine Koordinate, vielleicht noch einen Drall. Aber, es ist auch und vor allem ein Clown der sein Publikum unterhält. Die Darbietung läuft so ab, dass zunächst alle Drei Bälle in der einen Hand sind und dann in die Luft geworfen werden. Ab da an an hält der Clown die Bälle auf einer Kreisbahn und versucht einen Ryhtmus auszubilden. Man merkt, dass er sich dabei anstrengt. Und irgendwann greift er falsch und ein Ball fällt herunter. Jemand im Publikum lacht.

Man kann ein und dieselbe Sache also auch mit Prosa beschreiben. Man muss nicht zwangsläufig Formeln verwenden. Mehr noch, wollte man versuchen die Prosa wegzulassen also die Tatsache ignorieren, dass da ein Clown mit einer roten Nase ist, würde man das eigentliche Problem nicht exakt beschreiben. Jetzt bleibt noch die Frage offen wie man aus einer umgangssprachlichen Schilderung eine Finite-State-Machine erzeugt.

PREDICTION MACHINE
Inwzischen ist klar geworden, was das Dreikörperproblem ist. Es geht darum, eine State-Machine zu konstruieren damit sie ein physikalisches System vorhersagt. Die passende GUI ist simpel: der Anwender gibt an, welchen Zeitpunkt er gerne berechnet haben möchte, kann anklicken ob das physikalische System störungsfrei durchläuft und kann auswählen ob er an den Koordinaten von Körper 1, 2 oder 3 interessiert ist.

Panik vor dem Gödelraum

Normalerweise ist Programmieren eine überschaubare Sache: man schreibt einfach Quellcode hin und führt den dann aus. Soweit ist das Allgemeinwissen, es gibt unzählige von diesen Computerprogramme — erstellt von mehr oder weniger talentierten Programmierern. Wenn man jedoch das Erstellen eines Programmes aus Sicht der theoretischen Informatik betrachtet gelangt man an das, was als Matrix bekannt ist: eine Menge von allen nur denkbaren Programmen. Dies wird beispielsweise im BusyBeaver-Wettbewerb untersucht und wird dort — aber nicht nur dort — als Gödelnummer bezeichnet. Gemeint ist eine aufsteigende Folge von allen nur möglichen Programmen. Program #1 wäre dann die Binärfolge 000001, Programm #2 die Binärfolge 000010 usw. Wenn man ein Programm untersucht was 2 kb groß ist, dann gibt es 2 ^16384 Möglichkeiten (2 kb = 2048 Byte = 16384 Bits). Diese Zahl ist so groß, dass sie LibreOffice schon nicht mehr darstellen kann.

Das Problem mit dem Raum aller Computerprogramme ist, dass er da ist. Selbst wenn man ihn auf heutigen Computern nicht der Reihe nach durchprobieren kann, und demnach das BusyBeaver Problem nicht lösbar ist bzw. zumindest np-hard ist, bleibt der Raum als solcher erhalten. Er ist da draußen und in ihm befinden sich Computerprogramme die heute noch unbekannt sind. Aber was ist das mächtigste Programm was man in 2 kb unterbringen kann? Keine Ahnung, diejenigen Programme die bisher von Menschen erstellt wurden (also aus dem Stein herausgetrennt wurden) sind nur ein kleiner Bruchteil von dem was möglich ist. Gut möglich, dass sich in 2 kb ein komplettes Betriebssystem unterbringen lässt, aber genauso denkbar wäre es, dass es nicht geht. Die Informatik ist sich in diesem Punkt nicht sicher. Fakt ist, dass jedes einzelne Programm in dem Gödelraum etwas tut, einen gewissen Speicherverbrauch besitzt und ein Resultat ausgibt. Geschätzt 99,9% sind kompletter Unsinn, aber die wenigen Programme die noch übrigbleiben sind genug um sich Sorgen zu machen.

Aber wie kann es Computerprogramme geben, die noch gar nicht erstellt wurden? Ich meine, irgendwer muss sich ja den Gödelraum ausgedacht haben, sonst wäre er nicht da. Und irgendwer muss wissen, was sich in 2 kb unterbringen lässt und was nicht. Herr Gödel himself wusste es jedenfalls nicht, soviel ist sicher. Aber vermutlich werden es die Informatiker wissen, die in 100 Jahren dazu forschen und wenn nicht diejenigen die noch weiter in der Zukunft sich damit beschäftigen. Es ist nicht zu erwarten dass das Phänomen Gödelnummer irgendwann an Faszination einbüßen wird.

Natürlich könnte man an dieser Stelle noch viel mehr darüber schreiben. Beispielsweise dass man ein Computerprogramm auf einer Turing-Maschine ausführen muss, oder vielleicht auch ein kleines Programm entwickeln, was systematisch nach Busybeaver Knadidaten sucht. Im wesentlichen hat der Gödelnummern-Space Ähnlichkeit mit einem leeren Notenblatt worauf man etwas notieren kann. Nur, in Wahrheit existiert die Musik längst, sie ist schon da, man muss sie nur richtig sehen.

Nehmen wir mal an, dass eine Codezeile aus 40 Zeichen besteht. Dann kann man in 2 Kb rund 51 Lines of Code unterbringen. Aber was ist eigentlich Code? So richtig sagen kann das niemand. Traditionell wird als Computerprogramm eine Befehlsfolge verstanden die eine Turing-Maschine steuert. In einer konkreten Realisierung ist soetwas Brainfuck-Code, Code in der Sprache Forth oder simpler C++ Sourcecode. Das Problem ist, dass Computercode so allgemein gehalten ist, dass man damit prinzipiell alles machen kann. Es kann ein Computerspiel sein, ein Virus, eine Textverarbeitung, eine Robotersteuerung oder ein Fraktaler Algorithmus.

Zum Abschluss diskutiert werden, welche Methoden die Informatik besitzt um den Raum der Gödelnummern systematisch durchzuprobieren. Einerseits gibt es Supercomputer von IBM mit denen viele Teraflops pro Sekunde möglich sind. An Software gäbe es Emulatoren, in denen man ein Computerprogramm probeweise testen kann, um nicht den Computer zum Absturz zu bringen. Mit diesen Methoden kann man jedoch nur wenige Iterationen pro Sekunde durchprobieren. Nur wie will man 2^16384 mögliche Programme durchprobieren? Ein wenig erinnert das an das Travelling Salesman Problem, nur mit deutlich mehr Städten. Die derzeit effektivste Methode um sowas durchzutesten ist der RRT Algorithmus. Ein Verfahren, bei dem man einen Graphen erstellt und bereits getestete Varianten zwischenspeichert. Aber, RRT ist gegenüber einem simplen Brute-force-Verfahren nur um den Faktor 10 schneller. Weitere Optimierungsmöglichkeiten gibt es nicht. Außer vielleicht, dass man auf dem Standpunkt steht, dass es keine Lösung gibt, und man lieber manuell Sourcecode erstellt, anstatt ihn automatisch zu erzeugen.

Das Problem besteht darin, dass selbst wenn es gelänge einen Supercomputer zu bauen, mit dem man 2^16384 in einer Sekunde durchtesten könnte, würde es nichts bringen. Denn, genausogut könnte man auch fragen welche Software möglich ist, wenn man 2 MB oder 2 GB an Speicher zulässt. Offenbar ist dieses Problem so kompliziert, dass man auch in 100 Jahren dafür keine Antwort wird finden.

Eines ist über den Gödelraum zumindest bekannt. Wie der Chart des Solvers aussieht, wenn man versucht ihn systematisch abzusuchen. Angenommen, man sucht im Rahmen des „Mario AI“ Wettbewerb nach einem 2 kb großen AI-Controller, also einem Bot der Mario durchs Level steuert. Wenn man den Solver startet wird zuerst eine regelmäßiger Anstieg der Fitness zu beobachten sein, dass heißt Mario verbessert seine Performance im Sekundentakt, dieser Anstieg wird jedoch irgendwann aufhören und die Fitnessfunktion wird konstant bleiben und sich nicht weiter erhöhen. Gleichzeitig hat man dann aber noch 99% des Raumes aller möglichen Programme nicht abgesucht, erst wenn man sehr viel mehr Computerpower zur Verfügung stellt kann man die Kurve wieder zum Steigen bringen. Der weitere Ablauf ist auf einem Standard-PC dann so, dass die Fitness-Funktion konstant bleibt, egal man den PC 1 Tag, oder 1 Jahr rechnen lässt. Und dieses Verhalten ist auch bei allen anderen Problemen so, d.h. auch bei Corewars oder bei Busybeaver. Mehr ist leider über den ominösen Gödelraum nicht bekannt. Wir wissen zwar, dass sich darin Schätze verbergen, wir wissen jedoch nicht wie man dorthin gelangt.

Histogramm mit Python

Wer schonmal versucht hat mit MS-Excel ein Histogramm zu erstellen wird entweder am Diagramm-Editor oder aber an den Funktionen verzweifelt sein. Es gibt zwar im Internet für beides ausführliche Anleitungen wie man zuerst die Klassen festlegt, dafür dann die Häufigkeiten ermittelt und am Ende das ganze grafisch darstellt, doch einfach sieht anders aus. Deutlich eleganter ist es folgendes Script zu verwenden:

import matplotlib.pyplot as plt
import numpy as np
import csv
file=csv.reader(open('log.csv','r'))
n=[]
for row in file:
   n.append(float(row[0]))
plt.hist(n)
plt.show()

Das ist sehr kurz und kann auch sehr große CSV-Dateien verarbeiten. Gebrauch wird dabei gemacht von der Python-Plot-Funktion welche auf Stackoverflow und auf vielen weiteren Blogs beschrieben ist. wichtig ist, dass man eventuell vorher das n-array noch kurz ausgibt um zu erkennen ob das Parsen der Datei geklappt hat. Beispielsweise sollten Kommaangaben mit einem Punkt getrennt werden ;-)

Aber mal Spaß beiseite, die Python Plot Funktion ist an Mächtigkeit mit Excel nicht nur ebenbürtig sondern geht weit darüber hinaus.