csys: provide add-action and add-sensors methods
This commit is contained in:
parent
a4eda71b8d
commit
8bf7e8ae0c
2 changed files with 25 additions and 15 deletions
|
|
@ -8,7 +8,7 @@
|
|||
(:shape :scopes/shape)
|
||||
(:util :scopes/util)
|
||||
(:alx :alexandria))
|
||||
(:export #:environment #:*environment* #:actions #:procs #:sensors
|
||||
(:export #:environment #:*environment* #:add-action #:add-sensors
|
||||
#:send #:send-message
|
||||
#:neuron #:synapse #:std-proc
|
||||
#:make-neuron #:update-neuron #:create-sensor
|
||||
|
|
@ -19,13 +19,23 @@
|
|||
;;;; environment: common information, with list of globally available actions
|
||||
|
||||
(defclass environment ()
|
||||
((actions :reader actions :initarg :actions :initform (make-hash-table))
|
||||
((actions :reader actions :initarg :actions
|
||||
:initform (make-hash-table :test #'equal))
|
||||
(sensors :reader sensors :initarg :sensors
|
||||
:initform (make-hash-table :test #'equal))
|
||||
(procs :reader procs :initarg :procs
|
||||
:initform (make-hash-table :test #'equal))))
|
||||
|
||||
(defvar *environment* (make-instance 'environment))
|
||||
;(defvar *environment* (make-instance 'environment))
|
||||
(defvar *environment* nil)
|
||||
|
||||
(defun add-action (key fn &optional (env *environment*))
|
||||
;(util:lgi key fn env)
|
||||
(setf (gethash key (actions env)) fn))
|
||||
|
||||
(defun add-sensors (key sns &optional (env *environment*))
|
||||
;(util:lgi key sns env)
|
||||
(setf (gethash key (sensors env)) sns))
|
||||
|
||||
;;;; neurons (= behavior factories) and synapses (connection factories)
|
||||
|
||||
|
|
@ -47,7 +57,7 @@
|
|||
(actor:become (neuron proc state syns env)))
|
||||
|
||||
(defun std-proc (msg state syns env)
|
||||
;(util:lgi msg state)
|
||||
;(util:lgi msg state syns env)
|
||||
(destructuring-bind (nmsg nst nsyns)
|
||||
(handle-action msg state syns env :default #'remember)
|
||||
(forward nmsg nsyns)
|
||||
|
|
@ -73,7 +83,7 @@
|
|||
(defun find-sensors (msg)
|
||||
(let* ((key (cddr (shape:head msg)))
|
||||
(sns (gethash key (sensors *environment*))))
|
||||
;(util:lgi key sns)
|
||||
;(util:lgi key sns *environment*)
|
||||
sns))
|
||||
|
||||
;;;; effector procs for pseudo-neurons embedded in environment
|
||||
|
|
@ -103,9 +113,10 @@
|
|||
|
||||
(defun create-sensor (msg state syns env)
|
||||
(let* ((key (shape:data msg))
|
||||
(sensor (make-neuron actor:*self* :state key))
|
||||
(sensor (make-neuron actor:*self* :state key :env env))
|
||||
(nmsg (message:create (list :csys :created (car key) (cadr key)))))
|
||||
(setf (gethash key (sensors env)) (list sensor))
|
||||
;(setf (gethash key (sensors env)) (list sensor))
|
||||
(add-sensors key (list sensor) env)
|
||||
(list nmsg state syns)))
|
||||
|
||||
(defun add (msg state syns env)
|
||||
|
|
|
|||
|
|
@ -54,18 +54,17 @@
|
|||
|
||||
;;;; test: initialization
|
||||
|
||||
(defun init ()
|
||||
(setf (gethash :sensor (csys:actions csys:*environment*)) #'csys:create-sensor)
|
||||
(let ((zero (csys:make-neuron nil :proc #'eff-proc)))
|
||||
(setf (gethash '(:init :zero) (csys:sensors csys:*environment*)) (list zero))))
|
||||
|
||||
(deftest test-init ()
|
||||
(let ((csys:*environment* (make-instance 'test-env :test-suite t:*test-suite*)))
|
||||
;(setup-xxx)
|
||||
(defun setup-test-init ()
|
||||
(setup-config)
|
||||
(core:setup-services)
|
||||
(setf (tc:receiver t:*test-suite*) (core:find-service :test-receiver))
|
||||
(init) ; end of setup
|
||||
(csys:add-action :sensor #'csys:create-sensor)
|
||||
(let ((zero (csys:make-neuron nil :proc #'eff-proc)))
|
||||
(csys:add-sensors '(:init :zero) (list zero))))
|
||||
|
||||
(deftest test-init ()
|
||||
(let ((csys:*environment* (make-instance 'test-env :test-suite t:*test-suite*)))
|
||||
(setup-test-init)
|
||||
(csys:send-message '(:csys :sensor :init :zero) '(:std :s1))
|
||||
(csys:send-message '(:csys :sensor :init :zero) '(:std :s2))
|
||||
(sleep 0.1)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue