Question

Je lis beaucoup sur Apprentissage par renforcement ces derniers temps, et je l'ai trouvé "Renforcement d'apprentissage: introduction" pour être un excellent guide. code source obligeamment provice de l'auteur pour beaucoup de leurs exemples de travail.

Avant de commencer la question que je tiens à souligner que ma connaissance pratique de Lisp est minime. Je sais que les concepts de base et comment il fonctionne, mais je ne l'ai jamais vraiment utilisé Lisp de manière significative, il est donc probable que je suis juste en train de faire quelque chose d'incroyablement n00b-ish. :)

En outre, l'auteur indique sur sa page qu'il ne répondre à des questions au sujet de son code, donc je ne l'ai pas contacter et figurées Stack Overflow serait un bien meilleur choix.

Je suis en train d'exécuter le code sur une machine Linux, utilisant à la fois CLISP et SBCL de GNU mais n'ont pas été en mesure de l'exécuter. Je continue à obtenir une liste complète des erreurs en utilisant soit l'interprète. En particulier, la plupart du code semble utiliser beaucoup d'utilitaires contenus dans un fichier « utilities.lisp » qui contient les lignes

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

(in-package :ut)

:. Ccl semble se référer à une sorte de version sur Mac de Lisp, mais je ne pouvais pas le confirmer, il pourrait simplement être un autre paquet de code

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

J'essayé d'enlever cette pièce particulière (changer la ligne

  (:use :common-lisp)

mais que vous venez de créer plus d'erreurs.

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

Quelqu'un a une idée comment je peux exécuter ce code? Suis-je juste totalement ignorant de toutes choses Lisp?

Mise à jour [Mars 2009]:. J'ai installé Clozure, mais il était toujours pas en mesure d'obtenir le code à exécuter

À l'invite de commande CCL, la commande

(load "utilities.lisp")

entraîne la sortie d'erreur suivant:

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

Unfortuately, je suis encore à apprendre au sujet de Lisp, donc tant que je sens que quelque chose n'est pas complètement défini, je ne comprends pas vraiment comment lire ces messages d'erreur.

Était-ce utile?

La solution

Ce code est pour Macintosh Common Lisp (MCL). Il ne fonctionnera là. En utilisant Clozure CL (CCL) ne sera pas utile. Vous devrez commenter le code graphique. Les choses de l'état aléatoire est aussi un peu spécial pour MCL. Vous devez le port à Lisp portable commun ( make-aléatoire état , etc.). De plus, les noms de fichiers sont spéciaux pour le Mac.

Clozure CL est une fourchette de Macintosh Common Lisp, mais a changé être aux conventions Unix (noms de fichiers, ...) et ne comprend pas le code graphique spécial de MCL.

Autres conseils

Je suppose que le code dépend du CCA, utilisez donc CCL au lieu de CLISP ou SBCL . Vous pouvez le télécharger ici: http://trac.clozure.com/openmcl

En utilisant la dernière version du CCA sur x86 linux, avec ce fichier enregistré comme 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))

Exécution

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

imprime un tas de messages d'avertissement et la réponse désirée de:

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

Pour comprendre les defun-étatique aléatoire '# requis, je devinais que le « #. (ALEATOIRE ÉTAT 64497 9) » était un objet sérialisé-état aléatoire de MCL. Pour voir comment gère le CCA, j'ai vérifié quels résultats MAKE-RANDOM-État dans le CCA:

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

Si vous ne l'avez jamais utilisé Lisp de manière significative, il y a une Code Matlab pour "l'apprentissage par renforcement: introduction"

.

En plus de réponse Rainer Joswig : Une fois que vous installez Clozure vous devrez mettre à jour les références à la fonction RANDOM-STATE dans utilities.lisp à random-mrg31k3p-state.

Plus spécifiquement remplacer: #.(RANDOM-STATE 64497 9) avec #.(ccl::random-mrg31k3p-state)

random-mrg31k3p-state semble avoir remplacé random-state quelque temps après le code a été écrit, voir -numbers.lisp l1? rev = 13327

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top