Hello.
I use nengo-spa (ver. 0.6.0). I have a question about ActionSelection module.
import nengo
import nengo_spa as spa
def random_pointer_input(t):
if t < 0.1:
return "RANDOM1"
else:
return "0"
def vision_input(t):
# input sentence SP or PERIOD
d = 64
random_pt_num = 5
random_pt = ["RANDOM" + str(i) for i in range(random_pt_num)]
vocal = spa.Vocabulary(d)
vocab.populate(";".join(random_pt))
vocal.populate("SWITCH")
model = spa.Network(vocabs=[vocab])
with model:
switch = spa.State(d)
random_pointer = spa.Transcode(random_pointer_input, output_vocab=d)
vision = spa.Transcode(vision_input, output_vocab=d)
with spa.ActionSelection() as action_sel:
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, RANDOM1),
spa.sym.RANDOM1 >> random_pointer
)
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, RANDOM2),
spa.sym.RANDOM2 >> random_pointer
)
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, RANDOM3),
spa.sym.RANDOM3 >> random_pointer
)
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, RANDOM4),
spa.sym.RANDOM4 >> random_pointer
)
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, RANDOM5),
spa.sym.RANDOM5 >> random_pointer
)
spa.ifmax(0.6,
random_pointer >> random_pointer
)
I want to enter multiple sentences with random SP(RANDOM1, RANDOM2, …etc). The sentences are from vision_input
and the random SPs are from random_pointer_input
.
My question is about the part of Action(THEN part) after the part of utility (IF-part) in spa.ActionSelection.
To write the source code smartly, I want to write as follows:
with spa.ActionSelection() as action_sel:
for random_p in range(1, random_pt_num+1):
if random_p != random_pt_num:
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, vocab[random_pt[random_p]]),
vocab[random_pt[random_p+1]].v >> random_pointer
)
else:
spa.ifmax(spa.dot(switch, spa.sym.SWITCH) * spa.dot(random_pointer, vocab[random_pt[random_p]]),
vocab[random_pt[-random_p]] >> random_pointer
)
spa.ifmax(0.6,
random_pointer >> random_pointer)
However, the error occurs when writing
vocab[random_pt[random_p+1]].v >> random_pointer
or
vocab[random_pt[random_p+1]].v >> random_pointer
as follows:
nengo_spa.exceptions.SpaTypeError: <Connector<Node> (unlabeled) at 0x7f5743fa6240> was not registered as a SPA input
So please tell me how to enter a SP into spa.State().
Thank you.