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

В последнее время я много читал об обучении с подкреплением и нашел "Обучение с подкреплением: введение" в качестве отличного руководства. Автор любезно предоставил исходный код для многих своих рабочих примеров.

Прежде чем я начну с вопроса, я должен отметить, что мои практические знания lisp минимальны. Я знаю основные концепции и то, как это работает, но я никогда не использовал 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 >

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


person kaybenleroll    schedule 10.02.2009    source источник


Ответы (5)


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

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

person Rainer Joswig    schedule 13.03.2009

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

person jrockway    schedule 11.02.2009

Используя последнюю версию 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, я предположил, что «#.(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)
person andrewdotn    schedule 13.04.2009

Если вы никогда не использовали Лисп осмысленно, есть код Matlab для «Обучение с подкреплением: введение».

person Kris    schedule 13.05.2013

В дополнение к ответу Райнера Джосвига: после установки Clozure вам нужно будет обновить ссылки на функцию RANDOM-STATE в utilities.lisp до random-mrg31k3p-state .

Более конкретно замените: #.(RANDOM-STATE 64497 9) на #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state, кажется, заменил random-state через некоторое время после написания кода, см. l1-numbers.lisp?rev=13327

person jlas    schedule 29.11.2015