7

最近、強化学習についてよく読んでいますが、「強化学習:はじめに」が優れたガイドであることがわかりました。著者は、多くの実例のソースコードを提供してくれます。

質問を始める前に、Lispに関する私の実践的な知識は最小限であることを指摘する必要があります。私は基本的な概念とそれがどのように機能するかを知っていますが、私は実際に意味のある方法でlispを使用したことがないので、信じられないほどn00bっぽいことをしている可能性があります。:)

また、作者は自分のページで自分のコードに関する質問には答えないと述べているので、私は彼に連絡しませんでした。StackOverflowの方がはるかに良い選択だと考えました。

GNUのCLISPとSBCLの両方を使用してLinuxマシンでコードを実行しようとしましたが、実行できませんでした。どちらかのインタプリタを使用して、エラーの全リストを取得し続けます。特に、ほとんどのコードは、行を含むファイル'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について学んでいるので、何かが完全に定義されていないように感じますが、これらのエラーメッセージの読み方を本当に理解していません。

4

5 に答える 5

3

そのコードは Macintosh Common Lisp (MCL) 用です。そこでのみ実行されます。Clozure CL (CCL) を使用しても役に立ちません。グラフィックコードにコメントする必要があります。ランダムな状態のものも、MCL にとっては少し特殊です。移植可能な Common Lisp ( make-random-stateなど)に移植する必要があります。また、ファイル名は Mac 用に特別です。

Clozure CL は Macintosh Common Lisp からのフォークですが、Unix の規則 (パス名など) に変更されており、MCL の特別なグラフィックス コードは含まれていません。

于 2009-03-13T02:16:17.810 に答える
2

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)
于 2009-04-13T03:05:29.117 に答える