Simpleagent: Entwickler-Tagebuch
10. 1. 2004: Es hat sich gezeigt, daß die bisherige "Suche nach Automatismen" wenig durchdacht war, bzw nach der Einführung des Planens eigentlich überflüssig. Ausserdem erzeugte der Agent, wenn er eine Weile lief, beliebig viele Pläne in immer tieferen Verschachtelungen von Plan-Wrapper-Plänen. und mit der Zeit waren die protokollierten Pläne komplette Monstren. - Genau dagegen soll ja die Suche nach Automatismen eigentlich wirken: Feststellen: Was kenne ich schon, und es dann einfach nochmal machen. Genau das tut sie seit gerade: IM Gedächtnis nach schon einmal ausgeführten Plänen suchen, sie nochmal ausführen und wieder den
selben Plan-Kopfknoten protokollieren. Ergebnis: Der Agent läuft quasi beliebig lang. Wenn er keine neuen Gegenden lernt, bleiben auch die Pläne immer dieselben und werden wieder und wieder ausgeführt. Das einzige, was noch wächst, ist das Protokollgedächtnis, und da gibt's ja schon die Garbagecollection.
7. 1. 2004 (dreiviertel zwei): So - nach Abwesenheit, Krankheit, Arbeit am toolkit und Releasevorbereitungen wieder ein paar Änderungen am Agenten. Gelöstes Problem heute: Links zu Gedächtnisinhalten werden nur in Pläne übernommen, wenn sie planrelevant sind. (Bisher wurden Teile von Plänen manchmal Ziele, was Unsinn ist, weil Pläne nicht normal im Gedächtnis durchsuchbar sind.) Ausserdem habe ich verhindert, daß der Agent alle Situationen zweimal protokolliert. Nächste Schritte: Einen Agenten soweit bringen, daß er zwischen Wasserpfütze und Banane pendeln kann und als "erfahrener Feigling" dazwischen sein Leben fristen kann. Dieser Agent soll als erste "trained"-Variante mit der 0.5 releast werden.
19. 12. 2003 (viertel vier in der Früh): Im Agenten klappt alles jetzt. Er plant. Er merkt sich die Pläne, protokolliert sie als Makros, assoziiert seine Erfolge mit den Makroknoten der Pläne und findet sie beim nächsten mal als Makro wieder. Es ist alles ganz wunderbar.
Mal sehen, vielleicht trainiere ich in den nächsten Tagen noch einen, der dann wirklich in der Welt zurechtkommt, es müsste jetzt gehen mit ein bisschen Sorgfalt und ein paar Kleinigkeiten. Vielleicht wart' ich auch bis nach der 0.5 damit.
Was auch noch gemacht werden muß: Timingfehler finden. (Seit ich Debug-Ausgaben drin habe, die lang genug sind, um aussagekräftig zu sein, laufen die Methoden so lange, daß der Fehler verschwindet. Ich tippe auf einen sync-Block-Bug im Server.) Und dann noch die anderen technischen Sachen für 0.5 (insbesondere die Integration des 3dviewer).
19. 12. 2003: Ha! Der Agent plant, als hätte er nie was anderes getan. Sieht sehr beeindruckend aus, wenn man weiß, wie mühsam das Wiederfinden von Programmen bisher war. (Bisherige Situation: In genau der gleichen Situation fand der Agent nochmal zum Ziel, auf genau dem gleichen Weg - war der zu lang, gab's kein Erinnern.) Jetzt: Der Agent findet zum Ziel, wenn er dabei Wege benutzen kann, die er schonmal gegangen ist - nicht in der Reihenfolge, und egal wann. Man kann als
erste Aktion eine Banane essen, dann ein wenig in der Welt herumspazieren und ein paarmal über das Feld mit der Banane gehen, damit er weiß, wie man da hinkommt. Wenn man ihm dann Hunger induziert, baut er einen schönen Makroplan aus zwei Hierarchieebenen aus seinem Protokollgedächtnis zusammen. Jetzt muß ich ihm noch beibringen, den Plan dann auch auszuführen, aber das ist pillepalle.
Die Stabilisierungen, die nötig waren, verstreuen sich über's ganze System. Ich bin immer noch auf der Jagd nach einem Timing-Bug, der manchmal auf dem Weg zur Welt Aktionen verschluckt (und der beim Debugging hartnäckig nicht auftritt. Ich hasse Timingfehler.)
18. 12. 2003 (später am Tag, viel später): Die Wahrnehmung ist ein bisschen präziser jetzt, aber ich stelle immer wieder fest, daß es Konstellationen gibt, wo schlicht falsche Protokolle erzeugt werden. Kein Wunder, daß die Pläne seltsam sind. Ich muß das erstmal alles stabilisieren. Die Motive Effizienz und Exploration sind für's erste deaktiviert, haben eh nicht sinnvoll funktioniert und die Sache ist übersichtlicher jetzt. Jetzt muß ich noch sicherstellen, daß der Agent nach einer Bewegung auf die sichere Erkennung der Situation wartet, bevor er irgendwas macht, weil im Moment dauernd mitten im Tun die Aufmerksamkeit resettet wird. Aber nimmer heute.
18. 12. 2003 (später am Tag): Wer kennt das Gefühl, daß
alles einfach zu
vieldimensional ist? Also, Planen für alle:
- Von der gegenwärtigen Situation aus erreichbare Situationen suchen und mit Distanzen in eine Liste tun.
- Vom Ziel aus rückwärts nach Situationen suchen. Wenn eine auftaucht, die nicht schon Planelement ist (Zyklenvermeidung), kommt sie in die Kandidatenliste.
- Die Kandidatenliste durchsuchen, ob sie gemeinsame Elemente mit der Liste der Erreichbaren Knoten hat. Wenn mehrere erreichbare dabei sind, die mit der kürzeren Distanz auswählen und den Kandidaten vorne an den Plan dranhängen. Der Plan wächst der aktuellen Situation entgegen.
- Weiter mit 2. bis die aktuelle Situation erreicht ist.
Hab ich noch einen Denkfehler drin? Irgendwie habe ich auch dauernd das Gefühl, die Allgemeinheit rauszuprogrammieren und mir bloß eine besonders komplizierte Art auszudenken, das Protokollgedächtnis nachzubauen. Aber so wie oben müsste's doch gehen, oder? Uh. Vieldimensional. Das ist vielleicht ein Listengewese hier.
18. 12. 2003: Also lautet der Beschluß, daß ich erstmal das bestehende HyPercept zu flicken versuche. Es juckt mich zwar in den Fingern, die Wahrnehmung neu zu schreiben, aber wenn ich das jetzt mache, ziehe ich da noch eine Ebene der Instabilität ein: Dann ist nämlich plötzlich nicht mehr klar, was eine Situation ist, und dieses Hilfskonstrukt brauchen wir gegenwärtig noch dringend. Der Plan lautet also, jetzt mit dem alten SimpleHyPercept weiterzuarbeiten und dann irgendwann, ganz unabhängig, die Wahrnehmung neu zu implementieren und parallel mitlaufen zu lassen. Wenn die dann zuverlässige Ergebnisse liefert, wird der Rest des Agenten verallgemeinert, daß er mit der Auflösung dessen, was bisher "Situation" war, zurecht kommt.
Was das Planen angeht: Da muß noch Arbeit rein. Das gestern angegebene Verfahren reicht in nicht-rhizomatischen Welten (also eigentlich allen) natürlich nicht aus. (Das war eh klar, ich hatte bloß nicht gründlich über die Wichtigkeit der Sache nachgedacht. Aber… dochdoch. Das hat schon immer alles Gründe, daß Dörner das so macht wie er es macht.) Zur Erläuterung: Es bringt halt nichts, den kürzesten Weg zu einem Ziel zu finden, wenn er an einer Stelle anfängt, wo ich grade nicht bin, also nicht zufällig bei mir vorbeikommt. Das Planen braucht einen zweiten Arm, der sich von der anderen Seite dem Plan entgegenstreckt und ihm sagt, wo's lang geht. Ein morphogenetisches Feld für Pläne, aka eine Liste aller momentan erreichbaren Situationen, die dann bei der Wegauswahl bevorzugt werden.
17. 12. 2003 (12 Stunden später): Soweit, so gut. Unter kontrollierten Bedingungen kommen jetzt vernünftige, zyklenfreie, zielführende Pläne heraus. (Die Suchstrategie sucht immer nur den kürzesten Weg von einem Ziel zu einer vorhergehenden Situation, die dann ein neues Ziel wird. Die Pläne sind also nicht besonders optimal
gibt es einen direkten Weg von der aktuellen Situation A zu Ziel Z, der drei Knoten lang ist, und einen verwickelten, der von A nach B, von B nach C, von C nach Z führt, aber der Weg von C nach Z ist nur zwei Knoten lang, wird der letztere Plan erzeugt. Ich hoffe im Moment, daß die vorgeschaltete Suche-nach-Automatismen den Effekt etwas ausgleicht Planen muß man ja eigentlich nur, wenn es den direkten Weg
nicht gibt.) Der Haken beim einführend-triumphierenden Satz war natürlich der Zusatz
unter kontrollierten Bedingungen -- die Wahrnehmung baut viel zu oft Mist, als daß die Planerei funktionieren würde, wenn man den Agenten einfach auf die Welt losliesse im Moment. Ich muß jetzt erst mal was mit der Wahrnehmung machen, fürchte ich. Agentenprogrammieren macht übrigens manchmal doch Spaß, wenn sonst kein Kleinkram dazwischenkommt nämlich und es voran geht.
17. 12. 2003 (morgens halb fünf): Planen geht soweit, macht auch schon schöne Pläne. Allerdings schon wieder mit Zyklen. War klar, funktioniert ja gleich. Jetzt noch ein paar Variablen und Stacks, die sich merken, wo wir mit dem Plan
nicht hinwollen, und die Sache klappt. Das wird gut dann. "We chose to go to the moon, we chose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard".
17. 12. 2003: Das mit den Zwischenzielen war Mist. Heut' war's fertig, aber: Nach einigem Experimentieren damit habe ich festgestellt: Der Agent gerät leicht in Zyklen wenn ich das so mache, wie ich's vorhatte. Anstatt eine Menge Zeit damit zu verbringen, das noch irgendwie hinzupatchen, habe ich beschlossen, die Sache ganz zu lassen und statt dessen gleich ein simples Plan-Modul zu implementieren. (Das Vorgehen ist im Prinzip dasselbe wie vorher mit den Zwischenzielen, nur daß der Plan auf einen Haps erstellt wird und keine Zeit besteht, auf die Idee zu blöden Zyklen zu kommen.) Hier spricht Welle:Mindmachine, over and out.
15. 12. 2003: Nach einer Menge Arbeit an dieser Seite und dem Agenten-Framework (an den Erweiterungen für
0.5) bin ich heut mal wieder dazugekommen, am Agenten selbst zu bauen. Aktuelles Problem ist immer noch die Erzeugung von Zwischenzielen. (Sie funktioniert schon, erzeugt aber zu wenig Ziele, nämlich immer nur eins, anstatt alle Vorkommnisse einer hilfreichen Situation zu Zielen zu erklären.) Ausserdem aktuell problematisch: Das Auslösen der Ziellisten-Neuberechnung.
9. 12. 2003: Los gehts. Wahrscheinliches Problem mit der neuen, fragmentierten Welt: Der alte Simpleagent kann keine Aktionen mehr auf basale Perzepte abschicken. Wir brauchen da eine Lösung, die vermutlich darauf hinauslaufen wird, daß die alten "Einheiten" der Objekte für simplere simpleagents immer noch mitkommen und man umschalten kann zwischen der fragmentierten und der einfachen welt.