Frage

Ich habe viel über Reinforcement Learning in letzter Zeit , und ich gefunden habe, "Reinforcement Learning: eine Einführung" ein ausgezeichneter Führer zu sein. Die helfend des Autors provice Quellcode für viele ihre Arbeitsbeispiele.

Bevor ich damit beginnen, die Frage, die ich mag darauf hinweisen, dass mein praktisches Wissen über Lisp minimal ist. Ich weiß, dass die grundlegenden Konzepte und wie es funktioniert, aber ich habe nie wirklich Lisp in einer sinnvollen Art und Weise verwendet wird, so ist es wahrscheinlich, ich gerade etwas unglaublich n00b-ish tue. :)

Auch der Verfasser auf seiner Seite, dass er keine Fragen über seinen Code beantworten, so dass ich ihn nicht berühren, und dachte Stack-Überlauf eine viel bessere Wahl wäre.

Ich habe versucht, den Code auf einem Linux-Rechner laufen zu lassen, sowohl GNU CLISP und SBCL verwenden, aber nicht in der Lage gewesen, um es auszuführen. Ich halte eine ganze Liste von Fehlern immer entweder Interpreter. Insbesondere scheint die meisten der Code viele Dienstprogramme in einer Datei ‚utilities.lisp‘ enthalten sind, zu verwenden, die die Linien enthält

(defpackage :rss-utilities
  (:use :common-lisp :ccl)
  (:nicknames :ut))

(in-package :ut)

Die. CCL zu irgendeiner Art von Mac-basierter Version von Lisp zu beziehen scheint, aber ich konnte das nicht bestätigen, es könnte nur ein anderes Paket von Code sein

> * (load "utilities.lisp")
>
> debugger invoked on a
> SB-KERNEL:SIMPLE-PACKAGE-ERROR in
> thread #<THREAD "initial thread"
> RUNNING {100266AC51}>:   The name
> "CCL" does not designate any package.
> 
> Type HELP for debugger help, or
> (SB-EXT:QUIT) to exit from SBCL.
> 
> restarts (invokable by number or by
> possibly-abbreviated name):   0:
> [ABORT] Exit debugger, returning to
> top level.
> 
> (SB-INT:%FIND-PACKAGE-OR-LOSE "CCL")

Ich habe versucht, dieses besondere Stück zu entfernen (die Zeile

Ändern
  (:use :common-lisp)

, sondern dass nur mehr Fehler erstellt.

> ; in: LAMBDA NIL ;     (+
> RSS-UTILITIES::*MENUBAR-BOTTOM* ;     
> (/ (- RSS-UTILITIES::MAX-V
> RSS-UTILITIES::V-SIZE) 2)) ;  ; caught
> WARNING: ;   undefined variable:
> *MENUBAR-BOTTOM*
> 
> ;     (-
> RSS-UTILITIES::*SCREEN-HEIGHT*
> RSS-UTILITIES::*MENUBAR-BOTTOM*) ;  ;
> caught WARNING: ;   undefined
> variable: *SCREEN-HEIGHT*
> 
> ;     (IF RSS-UTILITIES::CONTAINER ;  
> (RSS-UTILITIES::POINT-H ;         
> (RSS-UTILITIES::VIEW-SIZE
> RSS-UTILITIES::CONTAINER)) ;        
> RSS-UTILITIES::*SCREEN-WIDTH*) ;  ;
> caught WARNING: ;   undefined
> variable: *SCREEN-WIDTH*
> 
> ;     (RSS-UTILITIES::POINT-H
> (RSS-UTILITIES::VIEW-SIZE
> RSS-UTILITIES::VIEW)) ;  ; caught
> STYLE-WARNING: ;   undefined function:
> POINT-H
> 
> ;     (RSS-UTILITIES::POINT-V
> (RSS-UTILITIES::VIEW-SIZE
> RSS-UTILITIES::VIEW)) ;  ; caught
> STYLE-WARNING: ;   undefined function:
> POINT-V

Hat jemand eine Ahnung, wie ich diesen Code ausführen kann? Bin ich einfach total unwissend alle Dinge Lisp?

UPDATE [März 2009]. Ich installierte Clozure, war aber noch nicht in der Lage, den Code zu bekommen ausführen

Auf der CCL-Eingabeaufforderung den Befehl

(load "utilities.lisp")

Ergebnisse in dem folgenden Fehlerausgang:

;Compiler warnings :
;   In CENTER-VIEW: Undeclared free variable *SCREEN-HEIGHT*
;   In CENTER-VIEW: Undeclared free variable *SCREEN-WIDTH*
;   In CENTER-VIEW: Undeclared free variable *MENUBAR-BOTTOM* (2 references)
> Error: Undefined function RANDOM-STATE called with arguments (64497 9) .
> While executing: CCL::READ-DISPATCH, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Retry applying RANDOM-STATE to (64497 9).
> Type :? for other options.
1 >

Unfortuately, bin ich immer noch über Lisp zu lernen, also, während ich ein Gefühl habe, dass nicht vollständig definiert etwas, ich weiß nicht wirklich verstehen, wie diese Fehlermeldungen zu lesen.

War es hilfreich?

Lösung

Dieser Code ist für Macintosh Common Lisp (MCL). Es wird nur dort laufen. Mit Clozure CL (CCL) wird nicht helfen. Sie müssten den Grafikcode kommentieren. Der Zufall Zustand Zeug ist auch etwas Besonderes für MCL. Sie müssen Portierung auf tragbare Common Lisp ( Make-Random-Zustand , etc.). Auch sind die Dateinamen speziell für den Mac.

Clozure CL ist ein Fork von Macintosh Common Lisp, hat aber auf Unix-Konventionen geändert wird (Pfadnamen, ...) und beinhaltet nicht den speziellen Grafikcode von MCL.

Andere Tipps

Meine Vermutung ist, dass der Code ist CCL-abhängig, so verwenden CCL statt CLISP oder SBCL . Sie können es hier herunterladen: http://trac.clozure.com/openmcl

Mit der neuesten Version von CCL auf Linux x86, mit dieser Datei als foo.lisp gespeichert:

#+ccl (defun random-state (x y)
        (ccl::initialize-random-state x y))

(load "utilities.lisp")
(use-package 'rss-utilities)


(load "testbed.lisp")

(setup)
(init)

(print (runs 10 10 .1))

Ausführen

~/svn/ccl/lx86cl -l foo.lisp

druckt eine Reihe von Warnmeldungen und die gewünschte Antwort:

(-0.77201915 0.59691894 0.78171235 0.41514033 0.6744591 0.26383805 0.8981678 1.1274683 0.50265205 0.4081622)

Um die erforderlichen # 'Random-Zustand defun herauszufinden, ich vermuten, dass die ‚#. (RANDOM-STATE 64497 9)‘ war ein serialisierten Zufall Zustand Objekt aus MCL. Um zu sehen, wie CCL behandelt, dass ich überprüft, was MAKE-RANDOM-STATE Ausgänge in CCL:

$ ~/svn/ccl/lx86cl 
Welcome to Clozure Common Lisp Version 1.3-r11936  (LinuxX8632)!
? (make-random-state)
#.(CCL::INITIALIZE-RANDOM-STATE 64497 9)

Wenn Sie noch nie Lispeln in einer sinnvollen Art und Weise genutzt haben, gibt es ein Matlab-Code für "Reinforcement Learning: eine Einführung"

.

Neben Rainer Joswig Antwort : Sobald Sie Clozure installieren finden Sie Verweise auf die Funktion RANDOM-STATE aktualisieren müssen in utilities.lisp random-mrg31k3p-state.

Insbesondere ersetzen: #.(RANDOM-STATE 64497 9) mit #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state scheint irgendwann ersetzt random-state zu haben, nachdem der Code siehe geschrieben wurde l1-numbers.lisp? rev = 13327

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top