NNSpace – The next one

Jetzt ist es wieder mal so weit. Wie jedes Jahr um diese Zeit, endlich … nein es ist noch nicht Weihnachten! Ich habe mich dazu durchgerungen mit einer neuen Version von NNSpace anzufangen. Mein Plan ist es im Moment alle Algorithmen, Ausführungspläne und so weiter als Activities/Workflows mit der WF 4 auszulagern. Das sollte möglichst grafisch passieren,  nur die Grundbausteine sollen noch in C# implementiert werden. Für einen Algorithmus wie z.B. die Backpropagation hat das mehrere Vorteile:

  • Man versteht den Algorithmus! Selbst als Programmierer blickt man bei den Algorithmen im Code kaum durch. Ich habe bei der letzten Version (CTP 2) regelmäßig Stunden damit zugebracht irgendwelche Fehler in den Algorithmen zu suchen .. Mit einer grafischen Übersicht dürfte das etwas einfacher werden. Außerdem kann man so besser erklären was passiert.
  • Der Algorithmus ist sehr dynamisch! Wenn wir die Workflows als XAML abspeichern und laden, kann man das jederzeit ändern. Das kann dann sogar der Benutzer machen, wenn er ein bisschen Durchblick hat.

Also, wie muss man sich das dann vorstellen? Ungefähr so:

Das ist mein erster Entwurf für einen Backpropagation-Workflow. Ihr erinnert euch sicherlich noch an die Backprop, also:

  1. Wir nehmen ein feed-forward Netz (Verbindungen nur in eine Richtung) und führen das aus (Forward Execute)
  2. Wir vergleichen das Ergebnis mit einem vorgegebenen Ziel-Vektor und berechnen den quadratischen Fehler (MSE)
  3. Wir berechnen die Ableitungen des Fehlers nach den Gewichten (die Delta-Werte sind hier zwischengespeicherte Teil-Ableitungen, die wir vorher cachen um Performance zu sparen)
  4. Wir aktualisieren die Gewichte anhand der Ableitungen
  5. Wir fangen wieder von vorne an, bis wir der Meinung sind, dass es gut ist

Dafür brauchen wir soweit erstmal nur folgende Code-Activities:

  • Mean Squared Error (quadratischer Fehler) mit Ableitung
  • Sigmoid für die Aktivierungsfunktionen mit Ableitung
  • For-Activity zum durchlaufen der Units, also z.B. zum Berechnen vom NetInput usw. (scheinbar gibt es gar keine For im .NET Framework, also hab ich fix mal selber eine gebastelt)

Innen drin sieht das dann z.B. so aus (für die Ausführung):

und innerhalb von „Calculate Hidden States“ werden zunächst die net-Inputs zusammengezält und dann die Ergebnisse gesammelt durch die sigmoide Aktivierungsfunktion gezogen:

Eigentlich cool oder? Durch die Möglichkeit die Dinger im Designer zusammenzuklappen bleibt das Ganze auch immer schön übersichtlich. Ich bin selber gespannt, wie es jetzt noch weitergeht. Auf jeden Fall könnte es eventuell mit der Performance Probleme geben, wenn ja, müsste ich nochmal umdenken. Es stehen also nach der Logik noch ein paar Tests und dann die Integration in den Rehosted Workflow Designer an.

Die Vorteile von NNSpace – CE Intelligence

Welcher Programmierer kennt das nicht? Man macht sich sehr viel Gedanken über das neue Programm, betrachtet alle (oder fast alle) Ausnahmefälle, führt aufwendige Tests durch und verschwendet einen Haufen Zeit damit dem Computer irgendwie klar zu machen, was man von ihm will. Am Ende funktioniert das Programm trotzdem nicht und man muss sich noch eine ganze Weile mit Bugs rumärgern, bis der Rechner endlich kapiert hat, was man von ihm will. Und dann merkt man zwischendurch später immer noch, dass irgendwo an irgendeiner Ecke die ganze Sache hängt und eben nicht das macht, was man gern hätte.

Gehen wir einen Schritt weiter: Massendatenverarbeitung, Erkennung hochkomplexer, verformter oder verschleierter Muster, kann das überhaupt über eine Programmiersprache beschrieben werden? Manches ja, manches nein. Wenn nein, dann kommt: Künstliche Intelligenz, neuronale Netze und ähnliches. Also haben wir jetzt mit neuronalen Netzen im Computer alle Probleme überwunden dem Computer Informationen mitzuteilen und er kann jetzt alle Aufgaben lösen? Weit gefehlt: Künstliche Neuronale Netze sind längst nicht so leistungsfähig, wie unser Gehirn. Es gibt viele Anwendungsfälle an denen auch sie scheitern, was ist nun hier das Problem?

Wir haben doch eigentlich dasselbe Problem wie zuvor: Die Netze im Computer werden nämlich jetzt nicht programmiert, sondern vom Computer generiert, nämlich gelernt. Das heißt im Prinzip: Der Programmierer lässt den Computer für sich programmieren und das intelligent. Das funktioniert auch sehr gut, aber der Programmierer sagt dem Computer doch wieder nicht was er will. Er kann den Computer mit Beispielen in die richtige Richtung lenken, aber letztendlich gibt er ihm wieder nur Hinweise, nur Anhaltspunkte. Ob es sich dabei nun um handgeschriebene Programmteile oder um Musterbeispiele handelt, ist doch völlig egal. Unser Problem, dass der Computer nie macht, was der Mensch ihm sagt bleibt doch bestehen. Es ist keineswegs immer der Fall, dass beim Lernvorgang eines solchen neuronalen Netzes etwas Sinnvolles herauskommt.

Damit stehen wir also wieder am Anfang. Soll heißen „weg mit künstlicher Intelligenz“, Begründung: „Bringt sowieso nichts?“. Nein! Nur: Die KI/AI muss sich verbessern und den Menschen in ihre Lernvorgänge einbeziehen. Wir wissen oft wie ein bestimmtes Problem zu lösen ist, warum übertragen wir nicht unsere eigenen Erkenntnisse zu den Problemen in den Aufbauprozess von so einem Netz? Dann hätten wir doch mächtige Intelligenz, denn wir hätten uns selbst. Lassen wir uns neuronale Netze trainieren und nicht Algorithmen diese Aufgabe übernehmen!

Zunächst müssen wir eines klarstellen: Wir werden nie dazu in der Lage sein den gesamten Denkprozess den unser Gehirn durchläuft bei einer bestimmten Problemstellung in den Computer zu übertragen. Aus zwei Gründen ist das nicht möglich:

  1. Unsere Denkweise ist zu komplex, sodass es ein unermesslicher zeitlicher Aufwand wäre sie zu beschreiben
  2. Wir können sie nicht beschreiben, weil wir nicht wissen, was in unserem Gehirn passiert

Wenn wir zum Beispiel eine handgeschriebene Zahl sehen, dann erkennt unser Gehirn die Zahl wieder. Aber wir könnten nie beschreiben wie dieser Vorgang funktioniert, weil wir nicht wissen, was unser Gehirn macht. Wir können höchstens grobe Teile des Denkprozesses umschreiben, aber nie Details. Wir werden also nicht darum herumkommen neuronale Netze im Computer mit Beispielen und Algorithmen zu trainieren, sondern wir müssen auf einer höheren Abstraktionsebene denken. Wenn wir dem Netz die ungefähren Zusammenhänge mitteilen, müssen wir nur noch die Details lernen. Aber wie soll das funktionieren?

Schauen wir uns mal an, wie so ein Netz zurzeit gelernt wird:

Ein Lernalgorithmus erhält Beispiele und lernt damit das Netz. Das bleibt bestehen und muss nun aber durch eine weitere Instanz verallgemeinert werden. Soll heißen: der Lernalgorithmus lernt niemals unser vollständiges Netz, sondern nur einen Teil (wie oben beschrieben). Damit müssen wir also letztendlich viele Teilnetze zusammenfassen und teilen durch die Art der Zusammenfassung dem Netz die grobe Denkstruktur unseres Gehirns mit:

Das ermöglicht es uns also durch Kombination unsere eigene Intelligenz in Modellen neuronaler Netze zu verarbeiten. Wenn man sich das ganze so abstrakt nicht vorstellen kann, hier vielleicht noch mal die Übersicht (CE = Combined Execution heißt Mensch stellt Teil vom Netz, Maschine stellt anderen Teil und dann wir die gesamte zusammengesetzte Struktur aus beiden vereint ausgeführt-also: Lernvorgänge getrennt, Ausführung kombiniert=Combined Execution):

1. Mensch befasst sich mit dem Problem, dass die künstliche Intelligenz (AI) lösen soll

2. Mensch kann einige Verbindungen (natürlich nie alle) in seinem Gehirn durch seine Denkweise (unbewusst) identifizieren, aber nicht alle

3. Mensch überträgt die grobe Struktur in den Computer

4. Maschine findet fehlende Verbindungen (=> Effizienzsteigerung, weil nicht mehr alle Verbindungen von der Maschine gefunden werden müssen)

Das ist natürlich genau das, was NNSpace durch die Kombination möglich macht. Der Mensch gibt die Struktur vor und wird dadurch unbewusst gezwungen bestimmte Strukturen einfach durch seine Denkweise festzulegen. Das Modell wird dann zumindest teilweise richtig biologisch. Auch wenn man zum Beispiel das menschliche Gehirn wirklich als solches modellieren möchte können Erkenntnisse, die wir inzwischen über seine Struktur gemacht haben (z.B. Gefühle oder verschiedene Bereiche vom Gehirn) eingebaut werden. Die Algorithmen machen nur noch die „Drecksarbeit“, nämlich das tatsächliche Klein-Klein der Verknüpfungen. Selbstverständlich funktioniert das nur mäßig gut aber auf jeden Fall wesentlich besser als das Netz nur von Algorithmen zu trainieren lassen.

Kombination macht Sinn! Ich denke man sollte viele neuronale Netze, die neu entwickelt werden auf diese Weise speziell an ihren Anwendungsfall anpassen. Wer Ideen dazu hat oder mal gern etwas testen würde kann mir jederzeit hier eine Mail schreiben.

Bugfix für XP-User

Weil die CTP 2 mit komprimierten Icons ausgestattet ist, läuft sie leider nicht auf XP (oder niedriger, obwohl das wohl kaum der Fall sein wird). Um dieses Problem noch zu beheben wird ein Bug-Fix für die CTP 2 veröffentlicht, bei dem gleich noch einige andere Kleinigkeiten mit behoben werden konnten. Anbei ein kleiner Screenshot meiner Anwendung im virtuellen XP-Modus (Das Video auf der Startseite funktioniert zumindest bei mir auf XP nicht, ist denk ich aber kein Problem das braucht man ja nicht):

Nur um mal die anderen Änderungen zu erwähnen: Ich hab bei der Speicherverwaltung noch einiges geändert (z.B. die Sache, dass wenn man die Anwendung 2mal öffnet immer eine abstürzt und ähnliches). Ansonsten bleibt natürlich alles gleich, es gibt keine neuen Funktionen.

Wenn irgendjemand ein Problem mit der Anwendung hat (z.B. das mit XP), bitte über das Kontaktformular melden und dann gibts einen neuen Bugfix.

Neue Dokumentation online

Weil die neue CTP ja nun doch anders ist als die erste  und vielleicht auch nicht immer einfach zu handhaben, hab ich jetzt mal hier noch ein paar neue Sachen hochgeladen um den Einstieg leichter zu machen und, dass man mal ein praktisches Beispiel hat.

Es geht zunächst um das And-Beispiel um zu zeigen wie das Programm funktioniert, nicht wie neuronale Netze funktionieren. Richtig praktische Beispiele mach ich selbstverständlich auch noch, man kann ja auch einfach mal selbst den Contrastive Divergence Algorithmus unter die Lupe nehmen(z.B. mit dem MNIST data set mal probieren, findet man auch einige Beispiele im Netz), geht ungefähr so:

1.Unterste Schicht mit CD trainieren

2.Netz erstellen, test klicken(statt ausführen), bias nicht vergessen, MNIST Daten auf die untere Schicht geben, obere Schicht ausgeben lassen und in Datei speichern(geht nur Textdatei, sorry)

3.Mit der generierten Datei die nächste Schicht mit CD trainieren… und so weiter bis zur letzten Schicht, dann labels mit Backprop und das wars..

Kommt natürlich auf die Genauigkeit an mit der man das betreibt aber das ganze dauert schon eine Weile auf einem normalen Rechner, das lässt sich aber nicht ändern, die Datenmengen der MNIST sind sehr sehr groß.

Feedback zur neuen Version bitte über das Kontakt-Formular (Contact).

NNSpace CTP 2 veröffentlicht

Endlich, nach einiger Verspätung hab ich jetzt die zweite CTP von NNSpace veröffentlicht. Außer den typischen Bugfixes und UI-Verbesserungen, die man sicherlich gleich beim ersten Start bemerken wird gibt es folgende richtige Änderungen:

  1. Die Speicherverwaltung: NNSpace ist jetzt in der Lage so große Netze zu erstellen, wie auf die Festplatte passen, weil zwar der Arbeitsspeicher ziemlich ausgelastet wird, aber alles unnötige sofort auf die platte weggeschreiben wird, wo es dann bei Bedarf ohne, dass man sich Gerdanken darüber machen muss wieder geladen wird. Man sollte allerdings darauf achten mindestens ein paar Gigabyte freien Festplattenspeicher zu haben, sonst bringt die ganze Sache natürlich überhaupt nichts
  2. Die Implementierung der NNS: Die Neural Network Specification(hab ich zum ersten Mal in meinem post am 3.10. letztes Jahr erwähnt) wird vollständig implementiert. Ich denke ich werd da  mal noch ein Beispiel dazu machen, man findet einige Erklärungen dazu hier: compositedevtec.tk/nnspace
  3. Lokalisierung: wer sich dafür interessiert NNSpace in einer Fremdsprache zu verwenden kann mir eine EMail schicken. Englisch wird schon unterstützt(auf amerikanisch-englischen Systemen schaltet das Programm automatisch die Sprache um).
  4. Neue und verbesserte Trainingsalgorithmen
  5. Testfunktion: Man kann jetzt das Netz außer der Ausführung noch zum Generieren von Daten verwenden

Downloadlink binaries: selensoft.tk(Silverlight wird benötigt)

Natürlich braucht man wie immer das .NET Framework 4.0

Fortschritte mit der Speicherverarbeitung

Nach einigen weit ausschweifenden Gedanken (s. vorheriger Post) möchte ich doch jetzt erst mal über meine wirkliche Arbeit zurzeit berichten: Wie bereits vor Kurzem erwähnt schlag ich mich mit der Tatsache rum, dass mein Arbeitsspeicher für alle Trainings- und Ausführungsvorgänge meiner neuronalen Netze mit NNSpace zu klein ist. Ich bin also dabei über die erwähnten Klassen StorageMatrix und StorageVector zu erreichen, dass alle meine Daten auch auf der Festplatte existieren, und so nicht im Arbeitsspeicher gehalten werden müssen. Dabei ist natürlich eine Matrix eine Auflistung von Vektoren, es geht also darum sehr viele Vektoren in einem Dateiformat möglichst effizient abzuspeichern. Dafür ist eine weitere Instanz notwendig, die den Speicher verwaltet. Es macht wahrscheinlich keinen Sinn für jeden Vektor eine eigene Datei zu erstellen, weil das zusätzlichen Aufwand bedeuten würde, wir müssen also mit einer Datei für alle auskommen (oder zumindest einigen wenigen Dateien). Auf diese dritte Klasse (FileStorage) greift nun ein Vektor intern zu und reserviert über einen Befehl eine bestimmte Menge an Speicherplatz. Dann kann er über weitere Befehle diesen Speicherplatz beschreiben. Die Vektoren werden dabei über spezielle Schlüssel identifiziert und den richtigen Positionen in der Datei vom System zugeordnet.

Ich bin allerdings inzwischen der Meinung, dass dieses System nicht nur für neuronale Netze geeignet ist. Es könnte durchaus auch an anderen Stellen, wenn man sehr große Datenmengen verarbeiten muss (vor allen Dingen hochdimensionale Arrays wie in diesem Fall, z.B. Listen von Matrizen…) sinnvoll sein diese einfach mal in eine Datei wegzuschreiben. Natürlich kann man da mit der Geschwindigkeit auch noch eine ganze Menge optimieren (z.B. durch geschickte Speicherverwaltung mit der Datei), aber letztendlich ist ja das Problem, dass Programmiersprachen wie C# einfach nicht dafür ausgelegt sind sehr große Datenmengen zu verwalten. Man kann und muss dieses Problem lösen, Ansätze gibt es aber bestimmt viele und das Problem ist sicherlich auch nicht neu auch wenn wahrscheinlich kaum jemand mit C# solche großen neuronalen Netze einlernen will wie ich. Das ist aber denke ich noch lange nicht alles an Problemen was man in dieser Richtung so hat, also wäre es vielleicht sogar mal sinnvoll eine Art Framework für die Speicherverwaltung in .Net herauszubringen. Ich hoffe ich stoße nicht auf neue große Probleme und die CTP 2 verzögert sich nicht noch weiter, aber es hat für mich einfach keinen Sinn gemacht etwas derartig unvollständig funktionierendes herauszubringen, das bei großen Datenmengen einfach abstürzt. Ich finde diesen (wenn auch aufwendigen) Schritt sehr nötig und hoffe, dass damit die CTP 2 wirklich einsetzbar wird.

Die Macht der Cluster

Letztens einen Artikel vom Spiegel gelesen, über Mieten von einem Cluster. Mich hat schon immer mal der Gedanke umgetrieben, dass meine Trainingsalgorithmen von NNSpace einfach viel zu langsam auf einem einzelnen Computer laufen. Es gibt ja auch viele andere Sachen, die man eigentlich gerne auf die Computer im ganzen Haus verteilen würde, zugegeben das geht nicht mit Allem aber ich denke das was Amazon hier zum Beispiel anbietet ist schon eine Richtung, die in Zukunft auch genutzt werden wird. So weit denk ich aber noch gar nicht, mir gehts vielmehr um das Prinzip. Es wäre doch mal interessant zu Testen ob man fähig ist so eine Clusterstruktur aufzubauen, jetzt mal ohne Amazon und 1000 Prozessoren, sondern einfach nur mit 2 oder 3 Computern im eigenen Haus. Letztendlich ist dann der Schritt (falls man das Aufteilen der Arbeit in 1000 Teile vorher schon erledigt hat) nicht mehr so groß zum Rechenzentrum. Es geht ja vielmehr um die Fähigkeit der Anwendung überhaupt auf irgend so einem System zu laufen.

  1. Ich glaube wir haben dabei erst mal zwei Typen von Teilnehmern, ich nenne sie jetzt mal Distributor(davon gibts einen) und Calculator(davon kann es unendlich viele geben). Das heißt jetzt nicht unbedingt, dass nicht auch mehrere solcher Typen auf derselben Maschine laufen können, aber wir brauchen irgendwie eine Instanz(Distributor), die Befehle vom Benutzer annimmt und die dann auf die Arbeitspferde(Calculator) verteilt.
  2. Dann ist noch ein Format nötig über das sich Distributor und Calculator unterhalten. Dabei denk ich jetzt nicht an irgendein Protokoll oder oder Ähnliches, das ist Implementierung und gehört nicht zur Architektur, sondern vielmehr die Art der Ergebnisse und Aufträge. Man muss dann eben immer beachten, dass die Übertragung eine kurze Weile dauert, und deshalb die Daten nicht zu oft gesendet werden dürfen und nicht zu groß sein dürfen.

Dabei ist selbstverständlich das Hauptproblem das Aufteilen der Arbeit, denn die Calculators sollten schon eine Weile zu Rechnen haben, bevor sie das Ergebnis zurückschicken, damit sich die ganze Sache lohnt.

Einen Anwendungsfall sehe ich hier zum Beispiel wenn man viele parallele Ausführungen von einem Netz durchführen möchte, mit dem Lernen sieht es hier schon etwas komplizierter aus, weil sich ja die Gewichte ständig ändern und deshalb immer hin und hergeschickt werden müssten. Letztendlich werde ich wohl zuerst über eine generelle Infrastruktur zum Zusammenschließen eines solchen Rechenclusters nachdenken müssen, die mein Netze-Programm dann benutzen kann. Aber diese Funktionen werden natürlich noch nicht mit der CTP 2 kommen, aber wenn sowas funktioniert, dann wäre das sicherlich ein Release für sich wert.

Pünktliche Weihnachtsgeschenke

In den letzten Tagen musste ich wieder und wieder feststellen, dass Weihnachten nicht mehr weit hin ist. Nicht zuletzt hat mich Herr Jimmy Wales, der bestrebt ist die Finanzierung seiner Weihnachstgeschenke durch ominöse Spendenaktionen abzudecken, wie jedes Jahr um diese Zeit ;)  daran erinnert. Aber nicht nur der kann verschenken, auch ich hab vor neue Software zu verschenken: NNSpace CTP 2 steht auf dem Weihnachtsprogramm und wird hoffentlich noch pünktlich von meinem FTP-Schlitten ins Web gezogen und dann dort von Santa Claus alias square 7 verteilt. Hier die hautsächlichen Änderungen:

  • Vollständige Unterstützung der NNS(Nerural Network Specification, s. auch Downloads), das ist der Hauptpunkt, da hier viele Änderungen auch in der Struktur nötig waren und sind
  • Verbesserung der Backpropagation(Unterstützung verschiedener Fehlerfunktionen u.ä.)
  • Lokalisierung
  • Neues Design
  • Bugfixes(z.b. Validierung beim Speichern aufgehoben)

Wer sich jetzt mit dem Projekt ein bisschen näher beschäftigen möchte, sollte sich auf jeden Fall mal die NNS unter Downloads(oben) durchlesen. Ich hoffe das Zeug ist einigermaßen verständlich, zugegeben häng ich mit der Erklärung hinterher, die eigentliche Dokumentation für das ganze Projekt ist noch in Arbeit, werd mal sehen, ob  ich die zusammen mit der CTP 2 veröffentlichen kann.

Screenshot CTP 2-Vorschau

Neue Webpage für AI

Vielleicht hat der eine oder andere schon gemerkt, dass auf der Hauptseite jetzt noch ein neuer Link auf eine Seite zu nnspace steht(anstatt der neuron net builder Sache). In Zukunft werden jetzt alle relevanten Informationen, Downloads und Dokumentationen zu NNSpace und der NNS(Meiner „Verfassung“) dort auftauchen. Ich nenne meine Dokumentation zu NNSpace jetzt Automation Guidance(NNAG). Hier mal noch ein Link

Einheit auf der ganzen Linie – Was Deutschland mit AI gemeinsam hat

Heute ist der Tag der deutschen Einheit! Aufgrund der geschichtsträchtigen Ereignisse vor 20 Jahren hab ich mir auch einmal Gedanken über Einheit gemacht. Dabei hab ich meine Netze zwar nicht gleich schwarz – rot – gold gestrichen, aber es geht(war ja klar) um NNSpace:

Eigentlich ist es ja eine Schande. Jedes halbwegs fortschrittliche Land hat heutzutage eine Verfassung. Es existieren für viele Streitfälle(z.B. in der Justiz, o.ä.) genau festgeschriebene Gesetzmäßigkeiten, an die sich alle(oder auch nur manche) halten. Aber wenn ich jetzt den Browser aufmach und neural networks bei google reinhack, dann find ich gleich auf Anhieb mehrere verschiedene Möglichkeiten, wie man sich sowas vorstellt. Ich mein damit nicht, dass etwa bezweifelt wird, dass da Neuronen sind und dass die Gewichte zwischen sich haben und Aktivierungsfunktionen, aber dann hörts auch schon wieder auf. Fragen über Fragen: Müssen die Eingänge immer addiert, und die Gewichte immer mit den Ausgaben multipliziert werden? Was genau ist eine Schicht, gibt es sowas überhaupt, wenn ja wozu? Wann gehören Neuronen zu einer Schicht, wann zu einer anderen? Wie kann man ein neuronales Netz generell(ohne Wissen über den konkreten Anwendungsfall) mit einer spezielleren Struktur, als nur das Neuron als ultimativen Baustein darstellen? Also hab ich mich hingesetzt und eine Verfassung für neuronale Netze geschrieben. Ich werd jetzt NNSpace direkt nach der ausrichten, und meine ganze Infrastruktur aus ihrer Grundlage heraus aufbauen, und sie von jetzt ab immer als Beweis und Erklärung nutzen, weil ich finde, dass so eine einheitliche Definition von unbedingter Wichtigkeit ist. Wer sich meine Einfälle dazu mal ansehen möchte kann das Dokument in Kürze hier runterladen. Es soll NNSpace und der ganzen AI eine Ordnung geben, und bestehende Modelle besser erklären helfen. Dabei hab ich natürlich versucht alle Seiten zufrieden zu stellen, und eine zugleich spezielle, aber auch allgemeingültige Ordnung zu bringen. Wer diese Spezifikation(so mein Ziel) erfüllt(oder durch kleine Umbauten erfüllen kann), der kann und sollte sein Modell sofort in NNSpace dynamisch einbinden. Es handelt sich hierbei also um eine Art Eignungstest(wo wir wieder bei der Integration und Wulff und der deutschen Einheit wären). Sieht man mal wozu mich der gute Kohl noch alles bringt…

EDIT: Download hier