def test_threads(self, output=False): agent = Agent(output=output) memory = Memory(agent) memory.add(isa='item') memory.add(isa='digit', value=1) memory.add(isa='number', value='three') speech = Speech(agent) def thread2(): for _ in range(2): number = memory.recall(isa='number') speech.say(number.value) agent.run_thread(thread2) agent.wait(.100) def thread3(): for _ in range(2): memory.recall('digit') agent.run_thread(thread3) for _ in range(2): memory.recall('item') agent.wait_for_all() self.assertAlmostEqual(1.200, agent.time(), 2)
def __init__(self): """Initializes the agent""" super().__init__(output=True) self.memory = Memory(self) self.vision = Vision(self) self.audition = Audition(self) self.hands = Hands(self) self.mouse = Mouse(self.hands, self.vision) self.typing = Typing(self.hands) self.language = Language(self) self.language.add_interpreter(self.interpret)
def __init__(self): super().__init__(output=True) self.vision = Vision(self) self.memory = Memory(self) self.audition = Audition(self) self.typing = Typing(Hands(self)) def interpreter(words): if words[0] == 'read': sem = Item(isa='action', type='read', object=words[1]) pointer = self.vision.find(isa='pointer') if pointer is not None: self.vision.encode(pointer) sem.set('x', pointer.x).set('y', pointer.y) return sem elif words[0] == 'done': return Item(isa='done') else: return Item(isa='action', type=words[0], object=words[1]) self.language = Language(self) self.language.add_interpreter(interpreter) def executor(action, context): if action.type == 'read': query = Query(x=action.x, y=action.y) context.set(action.object, self.vision.find_and_encode(query)) elif action.type == 'type': self.typing.type(context.get(action.object)) self.instruction = Instruction( self, self.memory, self.audition, self.language) self.instruction.add_executor(executor)
def test_instruction_read(self, output=False): agent = Agent(output=output) memory = Memory(agent) env = Environment() vision = Vision(agent, env.display) audition = Audition(agent, env.speakers) def interpreter(words): if words[0] == 'read': sem = Item(isa='action', type='read', object=words[1]) pointer = vision.find(isa='pointer') if pointer is not None: vision.encode(pointer) sem.set('x', pointer.x).set('y', pointer.y) return sem elif words[0] == 'done': return Item(isa='done') else: return Item(isa='action', type=words[0], object=words[1]) language = Language(agent) language.add_interpreter(interpreter) def executor(action, context): query = Query(x=action.x, y=action.y) context.set(action.object, vision.find_and_encode(query)) instruction = Instruction(agent, memory, audition, language) instruction.add_executor(executor) equation = ['3', 'x', '/', '12', '=', '15', '/', '4'] for i in range(0, len(equation)): env.display.add_text(50 + 50 * i, 50, equation[i]) pointer = env.display.add(50, 50, 1, 1, 'pointer', 'pointer') speech = [ 'to solve', ['read a', (50, 50)], ['read A', (300, 50)], 'done' ] def thread(): for line in speech: agent.wait(3.0) if isinstance(line, str): audition.add(Aural(isa='speech'), line) else: audition.add(Aural(isa='speech'), line[0]) loc = line[1] pointer.move(loc[0], loc[1]) agent.run_thread(thread) goal = instruction.listen_and_learn() self.assertEqual('solve', goal) context = instruction.execute(goal) self.assertEqual('3', context.a) self.assertEqual('15', context.A) agent.wait_for_all()
def test_num_to_text(self): agent = Agent() arithmetic = Arithmetic(agent, Memory(agent), Speech(agent)) errors = 0 for pair in NumbersTest.TEST_PAIRS: if arithmetic.num_to_text(pair[0]) != pair[1]: errors += 1 self.assertEqual(errors, 0)
def test_arithmetic(self): agent = Agent(output=False) arithmetic = Arithmetic(agent, Memory(agent), Speech(agent)) arithmetic.count_to(5) self.assertEqual(0, arithmetic.add(0, 0)) self.assertEqual(5, arithmetic.add(2, 3)) self.assertEqual(17, arithmetic.add(8, 9)) self.assertEqual(0, arithmetic.multiply(0, 0)) self.assertEqual(0, arithmetic.multiply(7, 0)) self.assertEqual(12, arithmetic.multiply(3, 4)) self.assertEqual(121, arithmetic.multiply(11, 11))
def __init__(self): """Initializes the agent""" super().__init__(output=True) self.memory = Memory(self) self.vision = Vision(self) self.audition = Audition(self) self.typing = Typing(Hands(self)) self.language = Language(self) self.language.add_interpreter(self.interpret) self.instruction = Instruction(self, self.memory, self.audition, self.language) self.instruction.add_executor(self.execute)
def run_trial(self): agent = Agent(output=False) memory = Memory(agent, Memory.OPTIMIZED_DECAY) memory.decay_rate = .5 memory.activation_noise = .5 memory.retrieval_threshold = -1.8 memory.latency_factor = .450 vision = Vision(agent) typing = Typing(Hands(agent)) self.trial_start = 0 self.block_index = 0 def fn(): for i in range(PairedAssociatesTest.N_BLOCKS): self.block_index = i pairs = PairedAssociatesTest.PAIRS.copy() random.shuffle(pairs) for pair in pairs: self.trial_start = agent.time() vision.clear().add(Visual(50, 50, 20, 20, 'word'), pair[0]) agent.wait(5.0) vision.clear().add( Visual(50, 50, 20, 20, 'digit'), pair[1]) agent.wait(5.0) agent.run_thread(fn) def type_fn(c): self.rt.add(self.block_index, agent.time() - self.trial_start) typing.add_type_fn(type_fn) for i in range(PairedAssociatesTest.N_BLOCKS): for _ in range(len(PairedAssociatesTest.PAIRS)): word = vision.encode(vision.wait_for(isa='word')) chunk = memory.recall(word=word) if chunk: typing.type(chunk.get('digit')) self.correct.add(i, 1) else: self.correct.add(i, 0) digit = vision.encode(vision.wait_for(isa='digit')) memory.store(word=word, digit=digit) agent.wait_for_all()
return self._num_to_text_help(n, 100, "hundred") elif n < 1000000: return self._num_to_text_help(n, 1000, "thousand") else: return self._num_to_text_help(n, 1000000, "million") def count_to(self, n): count = 0 while count < n: count = self.memory.recall(isa='count', i=count).next self.speech.subvocalize(count) def next(self, i): return self.memory.recall(isa='count', i=i).next def add(self, i, j): return self.memory.recall(isa='sum', i=i, j=j).sum def multiply(self, i, j): return self.memory.recall(isa='product', i=i, j=j).product if __name__ == "__main__": agent = Agent(output=True) memory = Memory(agent) speech = Speech(agent) arithmetic = Arithmetic(agent, memory, speech) arithmetic.count_to(5) speech.say(arithmetic.multiply(8, 11)) agent.wait_for_all()
def test_instruction_type(self, output=False): agent = Agent(output=output) env = Environment() memory = Memory(agent) vision = Vision(agent, env.display) audition = Audition(agent, env.speakers) motor = Motor(agent, vision, env) def interpreter(words): if words[0] == 'read': sem = Item(isa='action', type='read', object=words[1]) pointer = vision.find(isa='pointer') if pointer is not None: vision.encode(pointer) sem.set('x', pointer.x).set('y', pointer.y) return sem elif words[0] == 'done': return Item(isa='done') else: return Item(isa='action', type=words[0], object=words[1]) language = Language(agent) language.add_interpreter(interpreter) def executor(action, context): if action.type == 'read': query = Query(x=action.x, y=action.y) context.set(action.object, vision.find_and_encode(query)) elif action.type == 'type': motor.type(context.get(action.object)) instruction = Instruction(agent, memory, audition, language) instruction.add_executor(executor) typed = [] def type_handler(key): typed.append(key) env.keyboard.add_type_fn(type_handler) env.display.add_text(50, 50, 'a') pointer = env.display.add(50, 50, 1, 1, 'pointer', 'pointer') speech = ['to type', ['read letter', (50, 50)], 'type letter', 'done'] def thread(): for line in speech: agent.wait(3.0) if isinstance(line, str): audition.add(Aural(isa='speech'), line) else: audition.add(Aural(isa='speech'), line[0]) loc = line[1] pointer.move(loc[0], loc[1]) agent.run_thread(thread) goal = instruction.listen_and_learn() self.assertEqual('type', goal) context = instruction.execute(goal) self.assertEqual('a', context.letter) agent.wait_for_all() self.assertEqual(['a'], typed)
class OWLUndifferentiatedAgent(Agent): def __init__(self): """Initializes the agent""" super().__init__(output=True) self.memory = Memory(self) self.vision = Vision(self) self.audition = Audition(self) self.hands = Hands(self) self.mouse = Mouse(self.hands, self.vision) self.typing = Typing(self.hands) self.language = Language(self) self.language.add_interpreter(self.interpret) # self.instruction = Instruction( # self, self.memory, self.audition, self.language) # self.instruction.add_executor(self.execute) def _interpret_predicate(self, text, isa='fact', last=None): chunk = None (pred, args) = text.replace(')', '').split('(') args = args.split(',') if len(args) == 1: chunk = Chunk(isa=isa, predicate='isa', subject=args[0], object=pred) elif len(args) == 2: chunk = Chunk(isa=isa, predicate=pred, subject=args[0], object=args[1]) if chunk: if last: chunk.set('last', last.id) self.memory.store(chunk) return chunk def _interpret_rule(self, text): lhs, rhs = text.split('=>') pred_pat = re.compile(r'[A-Za-z_-]+\([A-Za-z_,-]*\)') rule = Chunk(isa='rule') self.memory.store(rule) last = rule for t in pred_pat.findall(lhs): chunk = self._interpret_predicate(t, isa='condition', last=last) last = chunk last = rule for t in pred_pat.findall(rhs): chunk = self._interpret_predicate(t, isa='action', last=last) last = chunk return rule def _interpret_owl(self, text): text = text.replace(' ', '') if text.find('=>') >= 0: return self._interpret_rule(text) else: return self._interpret_predicate(text) def interpret(self, words): return self._interpret_owl(''.join(words)) def _deep_find(self, isa): visual = self.vision.find(isa=isa, seen=False) if visual: return visual else: part_of = self.memory.recall(predicate='isPartOf', object=isa) if part_of: return self._deep_find(part_of.subject) else: return None def _execute_condition(self, cond, context): if cond.predicate == 'appearsIn': visual = self._deep_find(cond.subject) if visual: context.set('visual', visual) visobj = self.vision.encode(visual) context.set(cond.subject, visobj) return True return False def _execute_action(self, action, context): if action.subject == 'Subject': print('************** ' + action.predicate) if action.predicate == 'click': visual = context.get('visual') self.mouse.point_and_click(visual) elif action.predicate == 'remember': pass def execute(self, chunk, context): if chunk.isa == 'rule': cond = self.memory.recall(isa='condition', last=chunk.id) while cond: if not self._execute_condition(cond, context): return False cond = self.memory.recall(isa='condition', last=cond.id) act = self.memory.recall(isa='action', last=chunk.id) while act: self._execute_action(act, context) act = self.memory.recall(isa='action', last=act.id) return True def run(self, time=300): context = Item() chunk = None done = Query(predicate='isa', object='done') while not (chunk and done.matches(chunk)): text = self.audition.listen_for_and_encode() chunk = self.language.interpret(text) while self.time() < time: chunk = self.memory.recall(isa='rule') self.execute(chunk, context)
def _test_decay(self, decay, prob, time, output): agent = Agent(output=output) memory = Memory(agent, decay) chunk = Chunk(isa='cat', name='Whiskers', owner='Jane') memory.store(chunk) agent.wait(.5) memory.rehearse(chunk) agent.wait(2.5) memory.rehearse(chunk) agent.wait(3.7) memory.rehearse(chunk) agent.wait(6.2) memory.activation_noise = 0.5 if prob: self.assertAlmostEqual(prob, memory.compute_prob_recall(chunk), 2) self.assertAlmostEqual(memory.compute_recall_time(chunk), time, 2)
def test_memory(self): agent = Agent(output=False) memory = Memory(agent) memory.add(Chunk(isa='cat', name='Whiskers', owner='Jane')) chunk = memory.recall(Query(isa='cat')) self.assertEqual('Jane', chunk.get('owner')) self.assertEqual('Whiskers', chunk.id) memory.add(isa='dog', name='Spot', owner='John') self.assertEqual('Spot', memory.recall(isa='dog').name) self.assertEqual('Whiskers', memory.recall( Query().ne('isa', 'dog')).name) chunk = Chunk(isa='cat', name='Whiskers', owner='Jen') self.assertEqual('Whiskers', chunk.id) memory.add(chunk) self.assertEqual('Whiskers~2', chunk.id) self.assertEqual(chunk, memory.get(chunk.id))