Hochschule Niederrhein Master Informatik Praktikum Wissensbasierte Systeme Prof. Dr. Rethmann WS 2012/13 Projektphase 1 Lernziele Ziel der Projektphase ist es, die in der Vorlesung erworbenen Kenntnisse zu vertiefen und praktisch anzuwenden. Außerdem sollen Sie Ihre Erfahrungen im gemeinsamen Erstellen von Software erweitern: Man einigt sich auf eine Schnittstelle und jeder Beteiligte löst unabhängig vom Anderen einen Teil der Aufgabe. Zur Software-Entwicklung gehört auch das systematische Testen und eine zielgerichtete Fehlersuche: Sind die einzelnen Komponenten fehlerhaft oder arbeiten sie nur nicht korrekt zusammen. Es sind daher zunächst Komponententests zu erstellen, und erst danach ist die Software als Ganzes zu testen. 2 Projektvorschläge Die folgenden Projektvorschläge sind nur als Angebot zu verstehen. Sie können in Ihrer Gruppe auch eigene Vorschläge diskutieren und umsetzen. Die Software soll vorzugsweise in Java geschrieben werden, damit sie im Internet zur Verfügung gestellt werden kann, plattformunabhängig ist und als Applet in einem Browser lauffähig ist. Ein sehr gutes Java-Tutorial für Anfänger und Fortgeschrittene ist auf den Internet-Seiten von Oracle zu finden: http://download.oracle.com/javase/tutorial/index.html 2.1 Neuronale Netze Neuronale Netze werden unter anderem in der Bildverarbeitung eingesetzt. Mit dem Stuttgarter Neuronale Netze Simulator SNNS steht eine Software zur Verfügung, die verschiedene Netzstrukturen realisieren kann. Diese können genutzt werden, um die verschiedenen Netze hinsichtlich ihrer Eignung zur Handschriften- oder Gesichtserkennung zu untersuchen. Ein nettes kleines Applet OCHRE, Abkürzung für Optical Character Recognition, findet sich unter http://www.sund.de/netze/applets/BPN/bpn2/ochre.html. Zunächst ist zu untersuchen, ob es im Internet frei verfügbare Datenbanken mit Beispielen für die Handschriften- oder Gesichtserkennung gibt. Falls nicht, muss eine eigene Datenbasis aufgebaut werden. Das kann im Falle der Gesichtserkennung so aussehen, das wir von allen Kursteilnehmern digitale Fotos erstellen, die vor verschiedenen Hintergründen und aus verschiedenen Perspektiven aufgenommen werden. 1 2.2 Spieleprogrammierung Um ein Zweipersonen-Spiel wie Dame, Schach oder Go gegen den Computer spielen zu können, muss die Minimax-Strategie implementiert werden. Dazu ist es notwendig, eine Bewertung für Spielsituationen zu implementieren. Um die Suchtiefe weiter zu vergrößern, kann eine α-β-Beschneidung realisiert werden. In diesem Projekt soll ein Framework erstellt werden, mit dessen Hilfe verschiedene Spiele wie Vier gewinnt oder Othello realisiert werden können. Die Suchtiefe soll einstellbar sein, um verschiedene Spielstärken bereit zu stellen. 2.3 Heuristische Suchverfahren Zugfolgen für Spiele wie Sokoban oder Rush Hour können mittels allgemeiner Suchverfahren wie Tiefen- oder Breitensuche bestimmt werden. Leider haben diese Suchverfahren unter Umständen eine sehr hohe Laufzeit. Um die Laufzeit zu verbessern, werden Heuristiken eingesetzt, um den Suchraum zu begrenzen. In diesem Projekt soll ein Framework erstellt werden, mit dessen Hilfe Zugfolgen für verschiedene Spiele wie 15-Puzzle oder BrettSolitär mittels verschiedener Suchverfahren bestimmt und die Laufzeiten verglichen werden können. Dazu ist es notwendig, für diese Spiele geeignete Heuristiken anzugeben. 2.4 Expertensysteme In diesem Projekt wollen wir versuchen, ein Expertensystem z.B. für die automatische Wohnungssuche zu erstellen. Wir definieren, welche Eigenschaften eine Wohnung haben sollte: Größe, Anzahl Zimmer, Balkon, Garten, Lage, Verkehrsanbindung, Preis usw. Da Wohnungsanzeigen nicht unbedingt alle Eigenschaften enthalten, muss das System in der Lage sein, fehlende oder ungenaue Angaben zu verarbeiten. Das System soll in der Lage sein zu erklären, warum es eine bestimmte Wohnung ausgewählt hat. Das eigentliche Expertensystem soll in PROLOG implementiert werden, die Benutzeroberfläche in Java. Um PROLOG-Programme aus Java heraus aufrufen zu können, steht z.B. die JPL zur Verfügung. JPL ist eine Menge von Java-Klassen und C-Funktionen und benutzt das Java Native Interface (JNI) um eine Verbindung mit dem Prolog Foreign Language Interface herzustellen, siehe http://www.swi-prolog.org/packages/jpl/. 3 Literatur • Ivan Bratko: PROLOG: Programming for Artificial Intelligence. Addison-Wesley. • Juraj Hromkovič: Randomisierte Algorithmen. Teubner B.G. • I. Gerdes, F. Klawonn, R. Kruse: Evolutionäre Algorithmen. Vieweg+Teubner Verlag. • S. Russell, P. Norvig: Artificial Intelligence – A Modern Approach. Prentice Hall. 2 • George Luger: Künstliche Intelligenz. Addison-Wesley. • Andreas Zell: Simulation Neuronaler Netze. Addison-Wesley. • Homepage SNNS: http://www.ra.cs.uni-tuebingen.de/SNNS/ 3