簡體   English   中英

我如何運行Sutton和Barton的“強化學習”Lisp代碼?

[英]How Do I Run Sutton and Barton's “Reinforcement Learning” Lisp Code?

我最近一直在閱讀關於強化學習的很多內容,我發現“強化學習:簡介”是一本很好的指南。 作者為他們的許多工作示例提供了有用的源代碼

在我開始提出問題之前,我應該指出,我對lisp的實際知識很少。 我知道基本概念及其工作原理,但我從未真正以有意義的方式使用過lisp,所以很可能我只是在做一些令人難以置信的事情n00b-ish。 :)

此外,作者在他的頁面上聲明他不會回答有關他的代碼的問題,所以我沒有聯系他,並認為Stack Overflow將是一個更好的選擇。

我一直試圖在Linux機器上運行代碼,使用GNU的CLISP和SBCL,但是無法運行它。 我使用任何一個解釋器都會得到一整套錯誤。 特別是,大多數代碼似乎使用了包含行的“utilities.lisp”文件中包含的大量實用程序

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

(in-package :ut)

:ccl似乎是指某種基於Mac的lisp版本,但我無法證實這一點,它可能只是其他一些代碼包。

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

我嘗試刪除這個特定的部分(將行更改為

  (:use :common-lisp)

但那只會造成更多錯誤。

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

有人知道如何運行這段代碼嗎? 我只是完全不了解所有的事情嗎?

更新[2009年3月]:我安裝了Clozure,但仍然無法運行代碼。

在CCL命令提示符下,命令

(load "utilities.lisp")

導致以下錯誤輸出:

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

不幸的是,我還在學習lisp,所以雖然我覺得某些東西沒有完全定義,但我真的不明白如何閱讀這些錯誤信息。

我的猜測是代碼依賴於CCL,所以使用CCL而不是CLISP或SBCL。 您可以從這里下載: http//trac.clozure.com/openmcl

該代碼適用於Macintosh Common Lisp(MCL)。 它只會在那里運行。 使用Clozure CL(CCL)無濟於事。 你必須評論圖形代碼。 隨機狀態的東西對MCL來說也有點特殊。 你必須將它移植到便攜式Common Lisp( make-random-state等)。 此外,文件名對於Mac也是特殊的。

Clozure CL是Macintosh Common Lisp的一個分支,但已經改為Unix約定(路徑名,...),並且不包括MCL的特殊圖形代碼。

如果您從未以有意義的方式使用過lisp,那么有一個用於“強化學習:簡介”的Matlab代碼

在linux x86上使用最新版本的CCL,將此文件保存為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))

運行

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

打印一堆警告消息和所需的答案:

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

為了弄清楚所需的#'隨機狀態defun,我猜測“#。(RANDOM-STATE 64497 9)”是來自MCL的序列化隨機狀態對象。 為了了解CCL如何處理這個問題,我檢查了CCL中的MAKE-RANDOM-STATE輸出:

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

除了Rainer Joswig的回答 :安裝Clozure之后,你必須將utilities.lisp函數RANDOM-STATE引用更新為random-mrg31k3p-state

更具體地說: #.(RANDOM-STATE 64497 9)#.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state似乎在編寫代碼后的某個時候替換了random-state ,參見l1-numbers.lisp?rev = 13327

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM