Pregunta

He estado leyendo mucho sobre aprendizaje por refuerzo últimamente, y he encontrado "Reinforcement Learning: An Introduction" para ser una excelente guía. amablemente provice código fuente del autor de una gran cantidad de sus ejemplos prácticos.

Antes de comenzar la pregunta debo señalar que mi conocimiento práctico de Lisp es mínima. Conozco los conceptos básicos y cómo funciona, pero nunca he usado Lisp de una manera significativa, por lo que es probable que sólo estoy haciendo algo increíblemente n00b-ish. :)

Además, el autor afirma en su página que no va a responder a las preguntas acerca de su código, por lo que no se comunicó con él, y pensé desbordamiento de la pila sería una opción mucho mejor.

He estado tratando de ejecutar el código en una máquina Linux, utilizando tanto CLISP y SBCL de GNU, pero no han sido capaces de ejecutarlo. Quiero evitar toda una lista de errores utilizando ya sea intérprete. En particular, la mayor parte del código aparece al utilizar una gran cantidad de utilidades contenidas en un archivo 'utilities.lisp' que contiene las líneas

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

(in-package :ut)

El:. CCL parece referirse a una especie de versión basada en Mac de Lisp, pero no podía confirmar esto, sólo podría ser algún otro paquete de código

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

I intentado retirar esta pieza en particular (cambio de la línea a

  (:use :common-lisp)

pero que acaba de crear más errores.

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

¿Alguien tiene alguna idea de cómo puedo ejecutar este código? ¿Soy sólo totalmente ignorante de todas las cosas Lisp?

ACTUALIZACIÓN [marzo de 2009]:. He instalado Clozure, pero todavía no era capaz de conseguir el código para ejecutar

En el indicador de comandos CCL, el comando

(load "utilities.lisp")

resultados en la siguiente salida de error:

;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, todavía estoy aprendiendo sobre Lisp, así que mientras tengo la sensación de que algo no está completamente definido, realmente no entender cómo leer estos mensajes de error.

¿Fue útil?

Solución

Este código es para Macintosh Common Lisp (MCL). Sólo se ejecutará allí. Usando Clozure CL (CCL) no ayudará. Usted tendría que comentar el código de gráficos. La materia estado aleatorio es también ligeramente especial para MCL. Tienes que portarlo a portátiles Common Lisp ( hacer aleatoria de estado , etc.). También los nombres de los archivos son especiales para el Mac.

Clozure CL es un tenedor de Macintosh Common Lisp, pero se puede cambiar a las convenciones de nombres de ruta Unix (...) y no incluye el código de gráficos especial del MCL.

Otros consejos

Mi conjetura es que el código es CCL-dependiente, a fin de utilizar CCL en lugar de CLISP o SBCL . Puede descargarlo desde aquí: http://trac.clozure.com/openmcl

Con la última versión de la CCL en Linux x86, con este archivo guardado como 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))

Ejecutar

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

imprime un montón de mensajes de aviso y la respuesta deseada de:

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

Para averiguar las # requeridas 'defun-estado aleatorio, supuse que el ‘#. (RANDOM-STATE 64497 9)’ era un objeto de estado aleatorio serializado de MCL. Para ver cómo maneja CCL que, he comprobado salidas de las que hacen-AL AZAR-estado en el CCL:

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

Si usted nunca ha utilizado Lisp de una manera significativa, hay una Matlab código para "Reinforcement Learning: An Introduction"

.

Además de Rainer respuesta Joswig : Una vez que instale Clozure que tendrá que actualizar las referencias a la función en RANDOM-STATE utilities.lisp a random-mrg31k3p-state.

Más específicamente reemplazar: #.(RANDOM-STATE 64497 9) con #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state parece tener random-state reemplazado en algún momento después de que el código fue sede L1-numbers.lisp? rev = 13327

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top