csys: add negating feedback to zero neuron

This commit is contained in:
Helmut Merz 2026-07-28 09:15:19 +02:00
parent ff4b9d9800
commit ac44c880af
2 changed files with 16 additions and 10 deletions

View file

@ -13,7 +13,8 @@
#:neuron #:std-proc #:eff-proc #:create-zero #:neuron #:std-proc #:eff-proc #:create-zero
#:handle-action #:handle-action
#:notify #:notify
#:basic-actions #:no-op #:value-add #:create)) #:basic-actions #:no-op #:value-add #:create
#:multiply))
(in-package :scopes/csys) (in-package :scopes/csys)
@ -180,7 +181,7 @@
(defun multiply (n) (defun multiply (n)
(lambda (msg) (lambda (msg)
(let* ((data (shape:data (copy-list msg)))) (let* ((data (copy-list (shape:data msg))))
(setf (getf data :value) (* (getf data :value 0) n)) (setf (getf data :value) (* (getf data :value 0) n))
(message:create (shape:head msg) :data data)))) (message:create (shape:head msg) :data data))))

View file

@ -29,8 +29,8 @@
(defun setup-config () (defun setup-config ()
(config:add :test-receiver :setup #'tc:setup) (config:add :test-receiver :setup #'tc:setup)
;(config:add-action '(:csys :effect :c00) (value-in '(1))) (config:add-action '(:csys :effect :e01) (value-in '(1 2)))
(config:add-action '(:csys :effect) #'tc:check-message) ;(config:add-action '(:csys :effect) #'tc:check-message)
(config:add-action '(:csys) (constantly nil))) (config:add-action '(:csys) (constantly nil)))
(defun proc-env (msg scope) (defun proc-env (msg scope)
@ -76,11 +76,15 @@
(defun next-zero-initial () (defun next-zero-initial ()
(lambda (msg scope) (lambda (msg scope)
(let ((head '(:csys :create :c00 "0-0"))) (let ((self actor:*self*)
(actor:send actor:*self* (cr '(:csys :create :c00 "0-0"))
(message:create head :data '(:categ (:csys :e01) :connect :succ))) (conn '(:csys :connect :c00 "0-0")))
(actor:send actor:*self* (actor:send self
(message:create head :data '(:addr (:csys :s01 "0-1") :connect :pred))) (message:create cr :data '(:categ (:csys :e01) :connect :succ)))
(actor:send self
(message:create cr :data '(:addr (:csys :s01 "0-1") :connect :pred)))
(actor:send self
(message:create conn :data (list :target self :op (csys:multiply -1))))
;; connect *self* :op (multiply -1) ;; connect *self* :op (multiply -1)
;; switch :active ;; switch :active
nil))) nil)))
@ -91,7 +95,8 @@
(let ((env (setup-test (prog-b0))) (let ((env (setup-test (prog-b0)))
(rcvr (tc:receiver t:*test-suite*))) (rcvr (tc:receiver t:*test-suite*)))
(sleep 0.1) (sleep 0.1)
(tc:expect rcvr (message:create '(:csys :effect :e01) :data '(:value 1))) ;(tc:expect rcvr (message:create '(:csys :effect :e01) :data '(:value 1)))
(actor:send env (message:create '(:csys :value :s01 "0-1") :data '(:value 1))) (actor:send env (message:create '(:csys :value :s01 "0-1") :data '(:value 1)))
(actor:send env (message:create '(:csys :value :s01 "0-1") :data '(:value 2)))
(sleep 0.1) (sleep 0.1)
(core:shutdown))) (core:shutdown)))