Как мне запустить Лисп-код Саттона и Бартона для обучения с подкреплением?

Asked
Viewd1239

7

В последнее время я много читал об обучении с подкреплением и обнаружил «Обучение с подкреплением: введение» , чтобы быть отличным руководством. Автор услужливо предоставил исходный код многих своих рабочих примеров.

Прежде чем я начну задавать вопрос, я должен указать, что мои практические знания о lisp минимальны. Я знаю основные концепции и то, как это работает, но я никогда особо не использовал шепелявку, так что, скорее всего, я просто делаю что-то невероятно бесполезное. :)

Кроме того, автор заявляет на своей странице, что он не будет отвечать на вопросы о своем коде, поэтому я не стал с ним связываться и решил, что Stack Overflow будет гораздо лучшим выбором.

Я пытался запустить код на Linux-машине, используя как GNU CLISP, так и SBCL, но мне не удалось его запустить. Я получаю целый список ошибок при использовании любого из интерпретаторов. В частности, большая часть кода, похоже, использует множество утилит, содержащихся в файле «utilities.lisp», который содержит строки

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

(in-package :ut)
 

Кажется, что: ccl относится к какой-то версии lisp для Mac, но я не могу подтвердить это, это может быть просто какой-то другой пакет кода.

 > * (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 г.]: я установил 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 >
 

К сожалению, я все еще изучаю лисп, поэтому, хотя я чувствую, что что-то не полностью определено, я действительно не понимаю, как читать эти сообщения об ошибках.

5 ответов

3

Этот код предназначен для Macintosh Common Lisp (MCL). Он будет работать только там. Использование Clozure CL (CCL) не поможет. Вам нужно будет прокомментировать графический код. Случайное состояние также немного особенное для MCL. Вам необходимо перенести его на переносимый Common Lisp ( make-random-state и т. д.). Также имена файлов являются специальными для Mac.

Clozure CL - это форк от Macintosh Common Lisp, но он был изменен на соглашения Unix (пути, ...) и не включает специальный графический код MCL.

4

Я предполагаю, что код зависит от CCL, поэтому используйте CCL вместо CLISP или SBCL. . Вы можете скачать его отсюда: http://trac.clozure.com/openmcl

2

Используя последнюю версию CCL в Linux x86, с сохранением этого файла как 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 64497 9)» был сериализованным объектом случайного состояния из MCL. Чтобы увидеть, как CCL справляется с этим, я проверил, что выводит MAKE-RANDOM-STATE в CCL:

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