Domanda

Ho letto molto su Reinforcement Learning ultimamente, e ho trovato "Reinforcement Learning: An Introduction" di essere una guida eccellente. L'autore utilmente provice codice sorgente per un sacco di loro esempi pratici.

Prima di iniziare la questione Tengo a precisare che la mia conoscenza pratica del Lisp è minimo. So che i concetti di base e come funziona, ma non ho mai realmente utilizzato Lisp in modo significativo, per cui è probabile che sto solo facendo qualcosa di incredibilmente n00b-ish. :)

Inoltre, l'autore afferma sulla sua pagina che non risponderà alle domande circa il suo codice, quindi non ho contatto con lui, e figurati Stack Overflow sarebbe una scelta molto migliore.

Ho cercato di eseguire il codice su una macchina Linux, utilizzando sia CLISP e SBCL di GNU, ma non sono stato in grado di farlo funzionare. Continuo a ricevere tutta una serie di errori utilizzando sia interprete. In particolare, la maggior parte del codice sembra usare un sacco di utilità contenute in un file 'utilities.lisp' che contiene le linee

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

(in-package :ut)

L':. CCL sembra riferirsi a una sorta di versione per Mac basata su Lisp, ma non ho potuto confermare questo, potrebbe essere solo qualche altro pacchetto di codice

> * (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")

Ho provato a rimuovere questo pezzo particolare (cambiando la linea

  (:use :common-lisp)

, ma che appena creato più errori.

> ; 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

Qualcuno ha qualche idea di come posso fare funzionare questo codice? Sono solo totalmente ignoranti di tutte le cose Lisp?

UPDATE [Marzo 2009]:. Ho installato Clozure, ma non ero ancora in grado di ottenere il codice per eseguire

Al prompt dei comandi CCL, il comando

(load "utilities.lisp")

genera il seguente output di errore:

;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, sto ancora imparando su Lisp, così mentre io ho la sensazione che qualcosa non è completamente definito, non capire veramente come leggere questi messaggi di errore.

È stato utile?

Soluzione

Questo codice è per Macintosh Common Lisp (MCL). Verrà eseguito solo lì. Utilizzando Clozure CL (CCL) non aiuterà. Si dovrebbe per commentare il codice grafico. La roba stato casuale è anche un po 'speciale per MCL. Bisogna portarlo a portatile Common Lisp ( make-random-Stato , ecc). Anche i nomi dei file sono speciali per il Mac.

Clozure CL è un fork da Macintosh Common Lisp, ma è essere cambiato per le convenzioni Unix (percorsi, ...) e non include il codice grafico speciale di MCL.

Altri suggerimenti

La mia ipotesi è che il codice è CCL-dipendente, in modo da utilizzare CCL invece di CLISP o SBCL . Potete scaricarlo da qui: http://trac.clozure.com/openmcl

Utilizzando l'ultima versione di CCL su Linux x86, con questo file salvato come foo.lisp:

#+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))

Esecuzione

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

stampa un gruppo di messaggi di avviso e la risposta desiderata:

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

Per capire le richieste # 'random-stato defun, ho indovinato che il ‘#. (RANDOM-STATE 64497 9)’ è stato un oggetto casuale stato serializzato da MCL. Per vedere come CCL gestisce che, ho controllato le uscite cosa MAKE-RANDOM-Stato in CCL:

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

Se non avete mai usato Lisp in modo significativo, c'è un codice Matlab per "Reinforcement Learning: An Introduction"

.

Oltre a di Rainer Joswig risposta : Una volta installato Clozure dovrete aggiornare i riferimenti alla funzione RANDOM-STATE in utilities.lisp a random-mrg31k3p-state.

In particolare la sostituzione: #.(RANDOM-STATE 64497 9) con #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state sembra avere random-state sostituito qualche tempo dopo il codice è stato scritto Vedere l1-numbers.lisp? rev = 13327

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top