Pergunta

Eu tenho lido muito sobre Reinforcement Learning ultimamente, e eu descobri "Reinforcement Learning: An Introduction" para ser um excelente guia. O autor é prestativamente provice código fonte para um monte de seus exemplos trabalhados.

Antes de começar a questão gostaria de salientar que o meu conhecimento prático do lisp é mínima. Eu sei que os conceitos básicos e como ele funciona, mas eu nunca realmente usado Lisp de uma forma significativa, por isso é provável que eu estou apenas fazendo algo incrivelmente n00b-ish. :)

Além disso, o autor afirma em sua página que ele não vai responder a perguntas sobre seu código, então eu não entrar em contato com ele, e figuraram Stack Overflow seria uma melhor escolha muito.

Eu tenho tentado para executar o código em uma máquina Linux, usando tanto CLISP e SBCL do GNU, mas não foram capazes de executá-lo. Eu continuo recebendo toda uma lista de erros usando qualquer intérprete. Em particular, a maior parte do código parece usar um monte de utilitários contidos em um arquivo 'utilities.lisp' que contém as linhas

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

(in-package :ut)

A:. Ccl parece referir-se a algum tipo de versão baseada em Mac do lisp, mas eu não podia confirmar isso, pode ser apenas algum outro pacote 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")

Eu tentei remover esta parte particular (mudando a linha para

  (:use :common-lisp)

mas que acabou de criar mais erros.

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

Alguém tem alguma idéia de como posso executar esse código? Am I apenas totalmente ignorante de todas as coisas lisp?

Atualizar [Março 2009]:. Eu instalei Clozure, mas ainda não foi capaz de obter o código para executar

No comando CCL prompt, o comando

(load "utilities.lisp")

resulta na seguinte saída de erro:

;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, eu ainda estou aprendendo sobre Lisp, por isso, enquanto eu tenho uma sensação de que algo não está totalmente definido, eu realmente não entendo como ler essas mensagens de erro.

Foi útil?

Solução

Esse código é para Macintosh Common Lisp (MCL). Só vai correr lá. Usando Clozure CL (CCL) não vai ajudar. Você teria que comentar o código de gráficos. O material estado aleatório também é um pouco especial para MCL. Você tem que portá-lo para portátil Lisp Comum ( make-random-estado , etc.). Também os nomes de arquivo são especiais para o Mac.

Clozure CL é um fork do Macintosh Common Lisp, mas tem ser alterado para convenções Unix (caminhos, ...) e não inclui o código de gráficos especial de MCL.

Outras dicas

Meu palpite é que o código é CCL-dependente, portanto, use CCL vez de CLISP ou SBCL . Você pode baixá-lo aqui: http://trac.clozure.com/openmcl

Usando a última versão do CCL no Linux x86, com este arquivo salvo 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))

Running

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

imprime um monte de mensagens de alerta e a resposta desejada:

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

Para descobrir o necessário # 'defun random-estado, eu imaginei que o ‘#. (Random-STATE 64497 9)’ foi um objeto aleatório de estado serializado do MCL. Para ver como alças CCL que, eu verifiquei saídas que MAKE-RANDOM-estado no CCL:

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

Se você nunca usou lisp de uma forma significativa, há um Matlab código para "Aprendizagem por Reforço: uma Introdução"

.

Além de Rainer Joswig resposta : Depois de instalar Clozure você terá que atualizar as referências ao RANDOM-STATE função em utilities.lisp para random-mrg31k3p-state.

Mais especificamente substituir: #.(RANDOM-STATE 64497 9) com #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state parece ter substituído random-state algum tempo depois o código foi escrito see L1-numbers.lisp? rev = 13327

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top