Die Wumpus-Welt [AIMA]


Die Wumpus-Welt entstammt einem Text-Adventure aus den 70'er Jahren. Sie besteht aus einem rechteckigen Raster, das von einer undurchdringlichen Mauer umgeben ist. Oben ist Norden, unten ist Süden, links ist Westen, rechts ist Osten.
 
Unser Held - der Agent - startet immer im äussersten Süd-Westen, also unten links auf dem Feld [1,1]. Hierher muss er auch zurückkehren um die Welt zu verlassen.
Der Agent kann sich immer nur um ein Feld in waagerechter oder senkrechter Richtung bewegen. Er nimmt immer nur die Attribute des Feldes wahr, auf dem er sich gerade befindet, verfügt aber über ein gutes Gedächtniss um sich alle zuvor besuchten Felder - und deren Attribute - zu merken.
 
Das Ziel des Agenten ist es das Gold, das irgenwo in der Wumpus-Welt herum liegt, einzusammeln, und mit ihm die Welt zu verlassen. Das Gold ist nur auf dem Feld wahrzunehmen, auf dem es sich befindet.
 
Wie in der wirklichen Welt auch, ist das Einsammeln von Gold mit Gefahren verbunden, die das Leben des Agenten kosten können.
Eine grosse Gefahr ist der Wumpus. Er ist ein übelriechender Zeitgenosse, der irgendwo auf einem Feld steht. Auf diesem Feld bleibt er bis zum Ende des Spieles stehen. Betritt der Agent das Feld, auf dem sich der Wumpus befindet, und ist dieser noch am Leben, so wird der Agent vom Wumpus verspeisst, ein Entkommen ist unmöglich. Allerdings ist der Gestank des Wumpus so stark, dass er in den waagerecht und senkrecht an das durch den Wumpus besetzten Feldes wahrzunehmen ist.
Als Verteidigung gegen den Wumpus hat der Agent Pfeil und Bogen. Der Pfeil wird in die Richtung abgeschossen, in die der Agent schaut. Der Pfeil fliegt solange, bis er den Wumpus oder eine Mauer trifft. Wird der Wumpus durch den Pfeil getroffen, stirbt der Wumpus, und ist keine Gefahr mehr für den Agenten, nur noch für dessen Nase...
 
Eine weitere für den Agenten tödliche Gefahr, sind die endlosen Löcher. Diese Löcher sind so tief, dass sie in den waagerecht und senkrecht an sie angrenzenden Felder einen wahrnehmbaren Luftzug verursachen.


Beispiel einer Wumpus-Welt
 

Die Wumpus-Welt



Im ersten Ansatz wird eine Grammatik erstellt, mit deren Hilfe alle möglichen Aktionen und Zustände, die in der Wumpus-Welt möglich sind, ausgedrückt werden können.
 

e0: einfache Grammatik

s --> np,vp. % the wumpus + is dead np --> (article,noun); % the + wumpus (pronoun). % i vp --> verb; % go verb,(adverb; % go + back adjective; % is + dead pp; % go + to the north np). % shoot + the arrow pp --> preposition,article,noun. % to + the + north % load knowledgebase :- consult('knowledgebase_0.pl').


Bislang waren auch Sätze wie "i goes north" möglich, eine Unterscheidung nach unterschiedlichen Personen fand nicht statt. Dieses wird nun durch die Zuordnung von der Person eingeführt.
Zusätzlich werden von nun an Sätze, die die erste Person als Objekt haben, nicht mehr zu gelassen.
 

e1: Grammatik mit Morphologie

s --> np(Person),vp(Person). np(1) --> pronoun(1). np(3) --> pronoun(3); (article,noun). vp(Person) --> verb(Person); verb(Person),(adverb; adjective; pp; np(3)). pp --> preposition,article,noun. % load knowledgebase :- consult('knowledgebase_1.pl').


In diesem Schritt wird die vorhergehende Grammatik dahingehend verfeinert, dass von nun an Pronomen in Nomen-Phrasen (np) entsprechend ihrem Auftreten als Subjekt oder Objekt unterschieden werden.
 

e2: Grammatik mit noch mehr Morphologie

s --> np(subjective,Person),vp(Person). np(Case,1) --> pronoun(Case,1). np(Case,3) --> pronoun(Case,3); (article,noun). vp(Person) --> verb(Person); verb(Person),(adverb; adjective; pp; np(objective,3)). pp --> preposition,article,noun. % load knowledgebase :- consult('knowledgebase_2.pl').


Da die bisherigen Grammatiken nur bedingt der Grammatik der englischen Sprache entsprachen (Sätze wie "i shoot me" - sinnlos, aber trotzdem syntaktisch und semantisch korrekt - wurden nicht zugelassen), wurde die Grammatik entsprechend angepasst.
 

e3: bessere Grammatik mit Grammatik

s --> np(Person,nominative),vp(Person). np(Person,Case) --> pronoun(Person,Case). np(3,_) --> article,noun. vp(Person) --> verb(Person); verb(Person),(adverb; adjective; pp; np(_,accusative)). pp --> preposition,article,noun. % load knowledgebase :- consult('knowledgebase_3.pl').


Bislang wurde nur die Syntax geprüft. In der folgenden Grammatik wird der Parsetree als Semantik ausgegeben. Dieses ist vor allem beim Debuggen von Nutzen.
 

e4: Grammatik mit Ausgabe des Parsetrees

s(s(NP,VP)) --> np(Person,nominative,NP),vp(Person,VP). np(Person,Case,np(Pronoun)) --> pronoun(Person,Case,Pronoun). np(3,_,np(Article,Noun)) --> article(Article),noun(Noun). vp(Person,vp(Verb)) --> verb(Person,Verb). vp(Person,vp(Verb,Adverb)) --> verb(Person,Verb),adverb(Adverb). vp(Person,vp(Verb,Adjective)) --> verb(Person,Verb),adjective(Adjective). vp(Person,vp(Verb,PP)) --> verb(Person,Verb),pp(PP). vp(Person,vp(Verb,NP)) --> verb(Person,Verb),np(_,accusative,NP). pp(pp(Preposition,Article,Noun)) --> preposition(Preposition), article(Article), noun(Noun). % load knowledgebase :- consult('knowledgebase_4.pl').


In der letzten, nun folgenden Grammatik, werden zwei Variablen - Actor und Action - genutzt, um Semantik auszugeben. Aus den Werten der Variablen lassen sich - bislang allerdings nur gedanklich - Funtionsaufrufe generieren, mit denen der Agent in der Wumpus-Welt gesteuert werden kann.
 

e5: Grammatik mit Ausgabe von Semantik

s(Actor,Action) --> np(Person,nominative,Actor),vp(Person,Action). np(Person,Case,Actor) --> pronoun(Person,Case,Actor). np(3,_,Actor) --> article,noun(Actor). vp(Person,Action) --> verb(Person,Action,Param),(adverb(Param); adjective(Param); pp(Param); np(_,accusative,Param)). pp(Param) --> preposition,article,noun(Param). % load knowledgebase :- consult('knowledgebase_5.pl').


[nach oben] [zum Index] [weiter]