Kognitive Systeme 1 Grundlagen und Beispiele zu Suche Dr.-Ing. Bernd Ludwig Lehrstuhl für Künstliche Intelligenz Friedrich-Alexander-Universität Erlangen-Nürnberg 29.10.2009 Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 1 / 27 Inhalt 1 Definition: Was ist ein Suchraum? 2 Darstellung eines diskreten Suchraums als Graph 3 Implizite und explizite Suchräume 4 Anwendung: Landkarten Implementierung eines package für Graphen JavaDesktop OpenStreet-Maps in Java nutzen Geocoding über Google Maps Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 2 / 27 Zustände Definition Ein Zustand ist die Menge der zu einem festen Zeitpunkt geltenden Eigenschaften eines modellierten Systems oder einer Umgebung. Ein Zustand kann symbolisch (d.h. durch eine Menge von Formeln) oder numerisch (d.h. durch einen Merkmalsvektor repräsentiert sein. Ein Zustand kann Eigenschaften haben, die im Modell des Systems oder der Umgebung nicht enthalten sind (hidden context). Zustände stehen untereinander in einer Nachfolgerelation: Zustand s2 folgt auf s1 , wenn das KI-System eine Aktion a ausführen kann, die bewirkt, dass die dann geltenden Eigenschaften des modellierten Systems durch s2 beschrieben sind. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 3 / 27 Beispiel: Routenplanung Zustand: wo, d.h. an welchem Ort befindet sich das Fahrzeug? Example • Zustand s1 : Das Fahrzeug befindet sich bei Punkt A. • Aktion: Fahre zu Punkt B. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 4 / 27 Beispiel: Routenplanung Example • Zustand s2 : Das Fahrzeug befindet sich bei Punkt B. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 5 / 27 Formalisierung des Zustandsübergangs Graphische Darstellung fahren A B Formale Darstellung Definition (Zustandsüberführung) I Ein eindeutiger Zustand s1 wird durch genau einen Knoten dargestellt. I Eine Aktion, die im Zustand s1 ausgeführt wird und in den Zustand s2 führt, wird durch eine Kante (s1 , s2 ) dargestellt. Definition (Zustandsraum) I Ein Zustandsraum, d.h. die Menge aller möglichen Zustände ist durch einen gerichteten Graphen darstellbar. I Eine Folge von Aktionen wird durch einen Pfad repräsentiert. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 6 / 27 Zustandsgraph Ein Zustandsgraph (state space graph) ist eine Formalisierung eines Zustandsraums (state space), also der Menge aller möglichen Zustände und Zustandsübergänge. Zustandsgraphen sind gerichtet: die Quelle einer Kante gibt an, in welchem Zustand eine Aktion ausgeführt wird. Die Senke gibt an, in welchen Zustand die Aktion führt. branching factor b eines Knoten (Zustands) n: b ist die Zahl der Nachfolger, die n im Graphen hat. Jeder unterschiedliche Nachfolger beginnt nichtdeterministisch einen neuen Pfad, also eine neue Aktionsfolge, von n aus. Gerichtete Bäume sind spezielle Zustandsgraphen, in denen jeder Zustand von genau einem Vorgängerzustand über genau eine Aktion erreicht werden kann. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 7 / 27 Suche Definition (Suchproblem) Unter dem Suchproblem versteht man die Aufgabe, mittels eines geeigneten Algorithmus einen Pfad im Zustandsgraphen zu finden, der vom aktuellen Zustand in einen ausgezeichneten Zustand, den Zielzustand (die Lösung) führt. Warum ist die Suche schwierig? Komplexität: Der Suchaufwand hängt wesentlich vom branching factor in jedem Knoten ab. Nichtdeterminismus: Wenn b > 1, welcher Nachfolger führt (am besten) zu einer Lösung? Optimalität: Wenn es mehrere Pfade zu einer Lösung gibt, welcher ist optimal (hinsichtlich des Ergebnisses und des Berechnungsaufwands)? Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 8 / 27 branching factor Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 9 / 27 Ein vollständiger Zustandsraum Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 10 / 27 Informationsqualität Vollständigkeit des Zustandsgraphen: sind alle möglichen Zustände bekannt und erreichbar oder fehlt der Suche Information? Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 11 / 27 Informationsqualität Verlässlichkeit: ist die Information im Graphen korrekt oder ist die Information unsicher? Sensorwerte schwanken I I innerhalb ihrer Messgenauigkeit abhängig von den Messbedingungen Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 12 / 27 Expansion von Suchgraphen Definition (Expansion) Expansion eines Knoten in einem Suchgraphen ist der Vorgang, daß alle Nachfolger des Knoten gesucht und in einer bestimmten Reihenfolge abgearbeitet werden. zwei Zustände eines Suchraums: Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 13 / 27 Implizite Darstellung von Suchräumen Explizit gegebener Suchraum: alle möglichen Knoten und Kanten sind im Speicher des Rechners vorhanden. Während der Suchraum der Autobahnverbindungen explizit gegeben ist, ist der Suchraum aller Busverbindungen an einem Tag in einer Großstadt für viele Hauptspeicher zu groß. So ein Graph wird implizit repräsentiert. D.h.: wenige Knoten sind explizit vorhanden, aber alle anderen können durch Anwendung von Regeln generiert werden. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 14 / 27 Inhalt 1 Definition: Was ist ein Suchraum? 2 Darstellung eines diskreten Suchraums als Graph 3 Implizite und explizite Suchräume 4 Anwendung: Landkarten Implementierung eines package für Graphen JavaDesktop OpenStreet-Maps in Java nutzen Geocoding über Google Maps Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 15 / 27 Die Klasse ALGOGraph Definition (ALGOGraph) package graph; public abstract class ALGOGraph { protected Hashtable<Integer,ALGOPlacemarkNode> nodes; protected Hashtable<Integer,LinkedList<ALGOEdge>> edges; } Ein Graph wird dargestellt als ein Objekt mit einer Tabelle, die alle Knoten speichert (ID des Knoten ist der key). einer Tabelle, die die Liste aller ausgehenden Kanten eines Knoten speichert (ID der Quelle ist der key). Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 16 / 27 Die Klasse ALGOPlacemarkNode Definition (ALGOPlacemarkNode) package graph; public class ALGOPlacemarkNode extends ALGONode { protected int nodeID; protected double nodeCost; protected Placemark myData; } Ein Knoten hat eine eindeutige ID. hat eine Bewertung (Knoten), wenn er tatsächlich aktueller Zustand wird (auf einem Lösungspfad), anwendungsspezifische Daten (hier Placemark zur Speicherung von Inoformation über eine GPS-Position (siehe später). Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 17 / 27 Die Klasse ALGOEdge Definition (ALGOEdge) package graph; public class ALGOEdge { protected double costs; protected int sourceID, sinkID; } Eine Kante hat eine Quelle und eine Senke (jeweils referenziert über ihre ID) und Kosten, wenn die durch die Kante repräsentierte Aktion ausgeführt wird, während das System sich im Zustand befindet, der der Senke entspricht. Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 18 / 27 Inhalt 1 Definition: Was ist ein Suchraum? 2 Darstellung eines diskreten Suchraums als Graph 3 Implizite und explizite Suchräume 4 Anwendung: Landkarten Implementierung eines package für Graphen JavaDesktop OpenStreet-Maps in Java nutzen Geocoding über Google Maps Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 19 / 27 Java-Library für komplexe Applikationen Sun WebSite mit ausführlichen Informationen Swing Application Framework API (JSR-296) Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 20 / 27 Code-Beispiel Example (MapApp) package mapapp; import org.jdesktop.application.Application; public class MapApp extends SingleFrameApplication { @Override protected void startup() { show(new MapView(this)); } public static MapApp getApplication() { return Application.getInstance(MapApp.class); } public static void main(String[] args) { launch(MapApp.class, args); } } Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 21 / 27 Code-Beispiel Example (MapView) public class MapView extends FrameView { public MapView(SingleFrameApplication app) { super(app); initComponents(); ResourceMap resourceMap = getResourceMap(); int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout"); } @org.jdesktop.application.Action public void goChicago() { } @org.jdesktop.application.Action public void addWaypoint() { } } Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 22 / 27 Inhalt 1 Definition: Was ist ein Suchraum? 2 Darstellung eines diskreten Suchraums als Graph 3 Implizite und explizite Suchräume 4 Anwendung: Landkarten Implementierung eines package für Graphen JavaDesktop OpenStreet-Maps in Java nutzen Geocoding über Google Maps Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 23 / 27 org.jdesktop.swingx.JXMapKit Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 24 / 27 Grundkonzept JXMapKit bietet die Funktionalität, Karten von OpenStreetMaps in einem speziellen JPanel-Objekt (JXMapViewer) anzuzeigen. Mit einem WaypointPainter können eigene Layer in die Karte gezeichnet werden. Example (HighWayRoutePainter) public class HighWayRoutePainter extends WaypointPainter protected void doPaint(java.awt.Graphics2D g, JXMapViewer map, int width, int height) { Waypoint w1, w2; Point2D p1, p2; Iterator<Waypoint> it = getWaypoints().iterator(); { ... while (it.hasNext()) { w2 = it.next(); p2 = map.convertGeoPositionToPoint(w2.getPosition()); Line2D l = new Line2D.Double(p1, p2); g.draw(l); w1 = w2; p1 = p2; } } } Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 25 / 27 Inhalt 1 Definition: Was ist ein Suchraum? 2 Darstellung eines diskreten Suchraums als Graph 3 Implizite und explizite Suchräume 4 Anwendung: Landkarten Implementierung eines package für Graphen JavaDesktop OpenStreet-Maps in Java nutzen Geocoding über Google Maps Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 26 / 27 Eine Java-Library für KML und Google Maps Google stellt eine API für die Karten zur Verfügung. Zur Nutzung muss man sich einen key auf der Seite Google Maps API besorgen. Die Abfrage von Geokoordinaten für Adressen ist dann sehr einfach: Example URL mapURL = new URL("http://maps.google.com/maps/geo? q=ADDR&output=xml&key=XXX"); InputStreamReader data = mapURL.openStream(); Kml kmlRoot = new KMLParser().parse(data))); if (kmlRoot.getPlacemark() != null) { Point p = kmlRoot.getPlacemark().getGeometry(); System.out.println(p.getCoordinates()); else System.out.println("keine GPS-Koordinaten\n"); Dr.-Ing. Bernd Ludwig (Lehrstuhl KI) Kognitive Systeme 1 Kapitel 3 27 / 27