【问题标题】:How Do I Run Sutton and Barton's "Reinforcement Learning" Lisp Code?如何运行 Sutton 和 Barton 的“强化学习”Lisp 代码?
【发布时间】:2009-02-10 20:09:45
【问题描述】:

我最近阅读了很多关于Reinforcement Learning 的信息,我发现"Reinforcement Learning: An Introduction" 是一个很好的指南。作者向source 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

有人知道如何运行这段代码吗?我是不是对所有的 lisp 都一无所知?

更新 [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,所以虽然我感觉有些东西没有完全定义,但我并不真正理解如何阅读这些错误消息。

【问题讨论】:

    标签: lisp artificial-intelligence common-lisp reinforcement-learning mcl


    【解决方案1】:

    我的猜测是代码依赖于 CCL,因此请使用 CCL 而不是 CLISP 或 SBCL。你可以从这里下载:http://trac.clozure.com/openmcl

    【讨论】:

      【解决方案2】:

      该代码适用于 Macintosh Common Lisp (MCL)。它只会在那里运行。使用 Clozure CL (CCL) 将无济于事。您必须注释图形代码。随机状态的东西对于 MCL 也有点特殊。您必须将其移植到可移植的 Common Lisp(make-random-state 等)。此外,文件名对于 Mac 来说是特殊的。

      Clozure CL 是 Macintosh Common Lisp 的一个分支,但已更改为 Unix 约定(路径名,...),并且不包含 MCL 的特殊图形代码。

      【讨论】:

        【解决方案3】:

        在 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)
        

        为了找出所需的#'random-state 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)
        

        【讨论】:

          【解决方案4】:

          如果您从未以有意义的方式使用过 lisp,可以使用 Matlab code 表示“强化学习:简介”。

          【讨论】:

            【解决方案5】:

            除了Rainer Joswig's answer:安装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

            【讨论】:

              猜你喜欢
              • 2019-01-18
              • 2011-02-14
              • 2018-11-05
              • 2011-04-19
              • 2016-10-24
              • 2013-12-06
              • 1970-01-01
              • 1970-01-01
              • 2023-01-23
              相关资源
              最近更新 更多