Programming
more content coming soon ...
Als Kind habe ich schon den Z80 des Schneider CPCs in Basic und Assembler programmiert und war als "Critter" in der damaligen Szene bekannt.
Später habe ich in Weingarten "Angewandte Informatik" studiert und mich dann neben Film- und Musikproduktion auf (K)ünstliche (I)ntelligenz und (B)ilddaten(V)erarbeitung spezialisiert. Mittlerweile habe ich auch Erfahrung im Erstellen von grafischen BenutzerOberflächen und Grundkentnisse in der Spieleentwicklung.
Hans-Peter Radtke
Künstliche Intelligenz
Neuronale Netze
Genetische Alogrithmen
Reinforcement Learning
BilddatenVerarbeitung
Ich experimentiere schon seit dem Studium mit dem Einsatz künstlicher Neuronaler Netze herum, die nach dem biologischen Vorbild vernetzter Nervenzellen (z.B. in Rückenmark und Gehirn) entwickelt wurden.
Folgende Arten habe ich schon selbst programmiert und in Tests untersucht:
- Mehrschichtige Feed-Forward-Netze (hauptsächlich BackPropagation)
- Hopfield-Netze
- Kohonen-Maps
Hierbei handelt es sich um der Evolution nachempfundene Suchalgorithmen, die eine Population von "Individuen" bewerten und nach dem Darwinschen Ausleseprinzip miteinander Kreuzen, verändern oder löschen.
Diese Algorithmen liefern bei hochdimensionalen Suchproblemen sehr schnell gute Lösungen und sind daher gut für viele Optimierungsaufgaben geeignet.
Ich habe durch Experimente und konkrete Anwendung einige Erfahrung mit selbstgeschriebenen Genetischen Algorithmen.
Schon während des Studiums habe ich viel mit Robotik, vor allem in der Simulation experimentiert und verschiedene automatische Lernverfahren (wie "ValueIteration", "Q-Learning" und Explorationsverfahren) selbst geschrieben, getestet und angewendet.
Zusammen mit meinem Freund Michel Tokic habe ich schon viele Robotik- und Lernverfahren entwickelt und getestet, darunter z.B. ein selbstlernender KrabbelRoboter:
Die Bilder einer Kamera digital auszuwerten bietet die Möglichkeit, algorithmisch z.B. Objekte zu erkennen, zu beschreiben und zu klassifizieren oder Texturen zu erkennen bzw. den gesamten Bildinhalt zu klassifizieren.
Hierfür gibt es eine riesige Zahl verschiedener Verfahren zur Bildaufbereitung, Segmentation und Klassifikation (was dann wiederum in den bereich der künstlichen Intelligenz reicht).
Ich habe mittlerweile recht viel Erfahrung auf diesem Gebiet und schon einige Algorithmen selbst geschrieben und in verschiedenen Anwendungen getestet. Aber man lernt nie aus ...
Spielereien
Ich habe schon einige Tests mit Agenten in verschiedenen simulierten Umgebungen gemacht.
Hier ein Beispiel in vier Parameter-Varianten. Die Agenten befinden sich auf einer 2D-Karte, deren Felder Nahrung (z.B. Gras) enthalten, welche kontinuierlich nachwächst. Sie unterscheiden sich durch Sichtweite und Gefraessigkeit. Jeder Agent steuert das Feld mit dem groessten Nahrungsvorkommen innerhalb seines Sichtradius an. Die Nahrungsmenge wird hier als Grauwert-Intensitaet dargestellt:
Multi-Agenten-Systeme
100 Agenten auf 200x100-Karte
500 Agenten auf 300x200-Karte
5000 Agenten auf 500x500-Karte
Bewegungs-Steuerung
Für Robotik-Anwendungen habe ich diverse Tests zur Bewegungs-Steuerung durchgeführt.
Hier eine Variante ohne Sensor-Abhängigkeit, die auf verschachtelten, parametrisierten Sinus-Funktionen basiert. Die Parameter werden an verschiedenen Stellen im Video neu gesetzt:
Tanz-Bewegungen aus Sinus-Funktionen
Hier ein kleines Beispiel, wie ein mehrschichtiges Netz vom User geklickte Punkte interpoliert.
Die grüne Linie ist der vom Netz erzeugte Output.
Kohonen-Maps zählen zu den "Selbstorganisierende Karten", die zum automatischen Clustering von Merkmalsräumen nützlich sind.
Hier noch eine praktische Anwendung. Die PixelDaten eines Kamerabildes werden von einem Neuronalen Netz in zwei Klassen unterschieden. So können z.B. Objekte klassifiziert werden.
Hier wird "on the fly" gelernt, d.h. die aufgezeichneten Daten werden im Hintergrund trainiert, und gleichzeitig wird das aktuelle Kamerabild klassifiziert.
Nützliche Tools
Für alle möglichen verschiedenen Zwecke, sei es Videoschnitt, ZufallsEntscheidungen, Game- oder Grafik-Design schreibe ich mit gelegentlich kleine, genau auf die Anwendung zugeschnittene Hilfs-Tools.
Links zu sehen ist z.B. ein Video-Editor, den ich für den NaturalFreeRunner-Kanal geschrieben habe. Damit kann man die Geschwindigkeit dynamisch festlegen. Zwischen gesetzten KeyFrames wird linear interpoliert, was ein gleitendes Schneller- oder Langsam-Werden ermöglicht.