def test_main(): resource = Resource('poison in body', ['amount', 'kind']) resource.set_values([10.0, 'mercury']) agent = Agent('thin agent', strict_engine=True) agent.set_scaffold(resource) ams = AgentManagementSystem('exterior laws', [agent]) mapper = ResourceMap('scale down', 'scale', 'amount', ('factor', )) kwargs = { 'poison_amount_getter': lambda: agent.resource['amount'], 'doodle': 2.0 } compulsion = Compulsion('natural decay', simple_decline, mapper, compel_func_kwargs=kwargs) ams.set_law(compulsion) count = 0 for agent in ams.shuffle_nodes(True, 5, False): before = agent.resource['amount'] ams.compel(agent, 'natural decay') after = agent.resource['amount'] assert (before == REF[count][0]) assert (after == REF[count][1]) count += 1
def test_main(set_random): essence = Essence('inclinations', ['t_1', 't_2', 't_3', 't_4', 't_5']) essence.set_values([0.0, 0.0, 0.0, 0.0, 0.0]) agent = Agent('thin agent', strict_engine=True) agent.set_scaffold(essence) ams = AgentManagementSystem('exterior laws', [agent]) mapper_1 = EssenceMap('tweak', 'wiener', 't_1', ('range_step', )) mapper_2 = EssenceMap('tweak', 'wiener', 't_2', ('range_step', )) mapper_3 = EssenceMap('tweak', 'wiener', 't_3', ('range_step', )) mapper_4 = EssenceMap('tweak', 'wiener', 't_4', ('range_step', )) mapper_5 = EssenceMap('tweak', 'wiener', 't_5', ('range_step', )) mapper = MapCollection([mapper_1, mapper_2, mapper_3, mapper_4, mapper_5]) mutate = MultiMutation('jumps', lambda: 1.0, mapper, mutation_prob=0.5) ams.set_law(mutate) vals = agent.essence.values() assert (all([x == pytest.approx(y) for x, y in zip(vals, REF[0])])) ams.mutate(agent, 'jumps') vals = agent.essence.values() assert (all([x == pytest.approx(y) for x, y in zip(vals, REF[1])])) ams.mutate(agent, 'jumps') vals = agent.essence.values() assert (all([x == pytest.approx(y) for x, y in zip(vals, REF[2])])) ams.mutate(agent, 'jumps') vals = agent.essence.values() assert (all([x == pytest.approx(y) for x, y in zip(vals, REF[3])])) ams.mutate(agent, 'jumps') vals = agent.essence.values() assert (all([x == pytest.approx(y) for x, y in zip(vals, REF[4])]))
def test_main(set_random): essence = Essence('inclinations', ['t_1', 't_2', 'volatility']) essence.set_values([0.7, 1.5, 0.5]) agent = Agent('thin agent', strict_engine=True) agent.set_scaffold(essence) ams = AgentManagementSystem('exterior laws', [agent]) mapper_1 = EssenceMap('tweak_1', 'wiener', 't_1', ('range_step', )) mapper_2 = EssenceMap('tweak_2', 'wiener', 't_2', ('range_step', )) mutate_1 = Mutation('jumps_1', essence.__getitem__, mapper_1, mutation_prob=0.5, mutate_func_kwargs={'key': 'volatility'}) mutate_2 = Mutation('jumps_2', essence.__getitem__, mapper_2, mutation_prob=0.5, mutate_func_kwargs={'key': 'volatility'}) ams.set_laws(mutate_1, mutate_2) assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[0]) ])) ams.mutate(agent, 'jumps_1') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[1]) ])) ams.mutate(agent, 'jumps_1') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[2]) ])) ams.mutate(agent, 'jumps_1') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[3]) ])) ams.mutate(agent, 'jumps_1') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[4]) ])) ams.mutate(agent, 'jumps_2') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[5]) ])) ams.mutate(agent, 'jumps_2') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[6]) ])) ams.mutate(agent, 'jumps_2') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[7]) ])) ams.mutate(agent, 'jumps_2') assert (all([ a == pytest.approx(b) for a, b in zip(agent.essence.values(), REF[8]) ]))
def test_main(): # # Define Messages # belief = Belief('stressed', ('degree', )) belief.set_values(10.0) direction1 = Direction('collect_amount', ('intake_volume', )) # # Define Scaffold and Map for it # agent_resources = Resource('internal_molecules', ('A', 'B', 'C')) agent_resources.set_values([2.0, 1.0, 0.5]) added_a = ResourceMap('get_A', 'delta_scale', 'A', ( 'add', 'dilute', )) added_b = ResourceMap('get_B', 'delta_scale', 'B', ( 'add', 'dilute', )) added_c = ResourceMap('get_C', 'delta_scale', 'C', ( 'add', 'dilute', )) add_internal = MapCollection([added_a, added_b, added_c]) # # Define Organs and their associated messages # moulder1 = Moulder('discard_or_not', make_decision, belief, direction1) env = Env() actuator1 = Actuator('collect', env.excretor, direction1, add_internal) # # Initialize Agent # agent = Agent('test_agent', strict_engine=True) agent.set_organ(moulder1) agent.set_organ(actuator1) agent.set_scaffold(agent_resources) # # Decide on direction and execute action # agent.mould('discard_or_not') agent.act('collect') for mol in REF: assert (isclose(REF[mol], agent.resource[mol], abs_tol=0.0001)) try: agent.act('collect') raise AssertionError( 'Acting twice in sequence did not raise correct exception') except EmptyFlashError: pass
def test_main(): resource = Resource('harvest', ('wheat', 'rye', 'barley', 'oats')) resource.set_values([35.0, 12.0, 8.0, 6.0]) agent1 = Agent('farmer Joe', strict_engine=True) agent1.set_scaffold(resource) resource = Resource('food producer', ('wheat', 'rye', 'barley', 'oats', 'cash_on_hand')) resource.set_values([0.0, 0.0, 0.0, 0.0, 100.0]) agent2 = Agent('yummy Inc', strict_engine=True) agent2.set_scaffold(resource) ams = AgentManagementSystem('food market', [agent1, agent2]) uuid_of_yummy = list(ams.agents_in_scope.values())[1].agent_id_system mapper = ResourceMap('cash loss', 'scale', 'cash_on_hand', ('factor',)) amort = Compulsion('amortization', interest_rate, mapper) ams.set_law(amort) mapper_wheat = ResourceMap('loss of wheat', 'scale', 'wheat', ('factor',)) mapper_rye = ResourceMap('loss of rye', 'scale', 'rye', ('factor',)) mapper_barley = ResourceMap('loss of barley', 'scale', 'barley', ('factor',)) mapper_oats = ResourceMap('loss of oats', 'scale', 'oats', ('factor',)) mapper_cereal = MapCollection([mapper_wheat, mapper_rye, mapper_barley, mapper_oats]) sloppy = Compulsion('sloppy', lambda : 4*[0.88], mapper_cereal) ams.set_law(sloppy) ams.make_lawbook_entry(['sloppy'], agent_name_selector=farm_name_test) ams.make_lawbook_entry(['amortization'], agent_ids=[uuid_of_yummy]) for agent in ams.cycle_nodes(True, 2): ams.engage_all_verbs(agent, validate_lawbook=True) vals1 = agent1.resource.values() vals2 = agent2.resource.values() assert (vals1 == REF1) assert (vals2 == REF2) ams.compel(agent2, 'sloppy') try: ams.compel(agent2, 'sloppy', validate_lawbook=True) except RuntimeError as e: if 'Compulsion sloppy is not in law book' in str(e): pass else: raise AssertionError('Exception was not properly raised') try: ams.compel(agent1, 'amortization') except KeyError as e: if 'cash_on_hand' in str(e): pass else: raise AssertionError('Exception was not properly raised')
def test_main(): # Not fully implemented assert 1==2 battery = Resource('battery power', ('potential',)) battery.set_values(0.401) suck_power = ResourceMap('suck power', 'delta', 'potential', ('reduction',)) b1 = Buzz('sound stimulation', ('band_1', 'band_2', 'band_3')) s1 = Sensor('sound in surrounding', listen, b1, suck_power) belief_1 = Belief('The word was spoken', ('probability',)) int1 = Interpreter('Was the word spoken?', word_estimator, b1, belief_1) dir_1 = Direction('follow up request', ('word_section_1', 'word_section_2', 'word_section_3', 'word_section_4')) moul1 = Moulder('What response to give', responder, belief_1, dir_1) a1 = Actuator('loudspeaker vibrations', loudspeaker_api, dir_1, suck_power) moul2 = Moulder('Select warn statement', warn_statement, None, dir_1, resource_op_input=battery) bc = AutoBeliefCondition('Sufficiently confident of word spoken', lambda p: p > 0.75, 'The word was spoken') rc = AutoResourceCondition('Sufficient power left', lambda pot: pot > 0.2, 'potential') clausul_1 = Clause('listen for the word', [('sense', 'sound in surrounding'), ('interpret', 'Was the word spoken?')], condition=bc) clausul_2 = Clause('say something to the user', [('mould', 'What response to give'), ('act', 'loudspeaker vibrations')]) clausul_3 = Clause('power check', condition=rc) clausul_4 = Clause('power warn', [('mould', 'Select warn statement'), ('act', 'loudspeaker vibrations')]) plan = Plan('Clever stuff') plan.add_cargo('pronounce', 'listen for the word') plan.add_cargo('pronounce', 'say something to the user') plan.add_cargo('pronounce', 'power check') plan.add_cargo('pronounce', 'power warn') plan.add_dependency(2, 0, 3) plan.add_dependency(0, 1) plan.stamp_and_approve() agent = Agent('smart loudspeaker') agent.set_organs(s1, int1, moul1, moul2, a1) agent.set_messages(b1, belief_1, dir_1) agent.set_scaffold(battery) agent.set_policies(clausul_1, clausul_2, clausul_3, clausul_4, plan) agent.enact('Clever stuff') agent.enact('Clever stuff') agent.enact('Clever stuff') agent.enact('Clever stuff')
def test_main(): # # Define Messages # feature = Feature('colour', ('hue', 'saturation', 'lightness')) # # Define Scaffold # agent_essence = Essence('my_parameters', ('hue', 'saturation', 'lightness', 'mood')) agent_essence.set_values([0.9, 0.4, 1.0, 'jubilant']) slicer_of_essence = MessageOperator( agent_essence, slice_labels=['hue', 'saturation', 'lightness']) # # Define Organs and their associated messages # cortex = Cortex('colour_revealer', expose_distort, slicer_of_essence, feature, cortex_func_kwargs={'distort_degree': 0.05}) # # Initialize Agent # agent = Agent('test_agent', strict_engine=True) agent.set_organ(cortex) agent.set_scaffold(agent_essence) # # Tickle the cortex # tickle_me_1 = agent.tickle('colour_revealer') for val, ref_val in zip(tickle_me_1.values(), REF1): assert (val == pytest.approx(ref_val, abs=1e-3)) tickle_me_2 = agent.tickle('colour_revealer') for val, ref_val in zip(tickle_me_2.values(), REF2): assert (val == pytest.approx(ref_val, abs=1e-3)) agent_essence.set_values([0.0, 0.0, 0.0, 'hey']) tickle_me_3 = agent.tickle('colour_revealer') for val, ref_val in zip(tickle_me_3.values(), REF3): assert (val == pytest.approx(ref_val, abs=1e-3))
def test_main(): # # Define Messages # belief = Belief('Projectile status', ('speed', 'height', 'angle')) belief.set_values([100.0, 0.3, 0.2]) direction = Direction('motion', ('horizontal direction', 'horizontal magnitude', 'vertical direction', 'vertical magnitude')) # # Define Scaffold and Map for it # agent_resources = Resource('internal_resource', ('internal_energy',)) agent_resources.set_values(20.0) change_energy = ResourceMap('adjust_energy', 'delta', 'internal_energy', ('expend_energy',)) # # Define Organs and their associated messages # moulder = Moulder('take evasive action?', make_decision, belief, direction, change_energy) splitter_1 = MessageOperator(direction, slice_labels=['horizontal direction', 'horizontal magnitude']) splitter_2 = MessageOperator(direction, slice_labels=['vertical direction', 'vertical magnitude']) actuator1 = Actuator('move left right', move_rule_horizontal, splitter_1) actuator2 = Actuator('move up down', move_rule_vertical, splitter_2) # # Initialize Agent # agent = Agent('test_agent', strict_engine=True) agent.set_organ(moulder) agent.set_organ(actuator1) agent.set_organ(actuator2) agent.set_scaffold(agent_resources) agent.set_message(belief) # # Decide on direction and execute action # agent.mould('take evasive action?') agent.act('move up down') agent.act('move left right') assert (agent.resource['internal_energy'] == REF_E[0]) belief.set_values([100.0, 1.3, -0.5]) agent.mould('take evasive action?') agent.act('move up down') agent.act('move left right') assert (agent.resource['internal_energy'] == REF_E[1]) for e1, e2 in zip(REPO, REF_REPO): assert(e1 == e2) try: agent.act('move up down') raise AssertionError('Action without preceding moulding did not raise exception') except EmptyFlashError: pass else: raise AssertionError('Action without preceding moulding did not raise expected exception') try: agent.act('move left right') raise AssertionError('Action without preceding moulding did not raise exception') except EmptyFlashError: pass else: raise AssertionError('Action without preceding moulding did not raise expected exception')
def test_main(): # # Define Messages # buzz = Buzz('nerve_endings', ('first', 'second')) belief_1 = Belief('chance_of_rain', ('probability', )) belief_2 = Belief('ambiguity_kills_me', ('mood', )) direction = Direction('get_which_umbrella', ('any', 'colour')) # # Define Scaffold and Map for it # agent_resources = Resource('internal_resource', ('energy', )) agent_resources.set_values([100.0]) change_energy = ResourceMap('adjust_energy', 'delta', 'energy', ('how_much', )) # # Define Organs and their associated messages # interpreter_1 = Interpreter('will_it_rain', rain_predictor, buzz, belief_1, resource_map_output=change_energy) interpreter_2 = Interpreter('am_i_unlucky', mood_maker, belief_1, belief_2, resource_map_output=change_energy) total_belief = MessageOperator([belief_1, belief_2], extend=True) moulder = Moulder('fetch_umbrella_type', make_decision, total_belief, direction, change_energy) # # Initialize Agent # agent = Agent('test_agent', strict_engine=True) agent._set('buzz', 'nerve_endings', buzz) agent.set_organ(moulder) agent.set_organ(interpreter_1) agent.set_organ(interpreter_2) agent.set_scaffold(agent_resources) # # Decide on direction and execute action # agent.buzz['nerve_endings'].set_values([0.2, 0.2]) agent.interpret('will_it_rain') agent.interpret('am_i_unlucky') agent.mould('fetch_umbrella_type') assert (agent.direction['get_which_umbrella'].values() == REF[0]) assert (agent.resource.values()[0] == pytest.approx(REF_RESOURCE[0])) agent.buzz['nerve_endings'].set_values([1.0, 0.6]) agent.interpret('will_it_rain') agent.interpret('am_i_unlucky') agent.mould('fetch_umbrella_type') assert (agent.direction['get_which_umbrella'].values() == REF[1]) assert (agent.resource.values()[0] == pytest.approx(REF_RESOURCE[1])) agent.buzz['nerve_endings'].set_values([1.0, 2.6]) agent.interpret('will_it_rain') agent.interpret('am_i_unlucky') agent.mould('fetch_umbrella_type') assert (agent.direction['get_which_umbrella'].values() == REF[2]) assert (agent.resource.values()[0] == pytest.approx(REF_RESOURCE[2]))
def test_main(): # # Define Messages # belief = Belief('rich_environment', ('stuff_1', 'stuff_2', 'stuff_3', 'stuff_4')) belief.set_values([0.7, 0.3, 0.6, 0.1]) direction1 = Direction('grab_this_much', ('grab_volume', )) direction2 = Direction('shout_loud', ('volume', )) # # Define Scaffold and Map for it # agent_resources = Resource('internal_resource', ('internal_energy', 'carrot', 'leek')) agent_resources.set_values([100.0, 4, 5]) change_energy = ResourceMap('adjust_energy', 'delta', 'internal_energy', ('expend_energy', )) change_carrot = ResourceMap('adjust_carrot', 'delta', 'carrot', ('tweak_carrot', )) change_leek = ResourceMap('adjust_leek', 'delta', 'leek', ('tweak_leek', )) hoarding_food = MapCollection([change_carrot, change_leek]) # # Define Organs and their associated messages # moulder1 = Moulder('reach_and_grab', make_decision, belief, direction1, change_energy) moulder2 = Moulder('shout_how_much', shouter, belief, direction2) env = Env() actuator1 = Actuator('grab_it', env.grabber, direction1, hoarding_food) actuator2 = Actuator('shout', env.shout_into_void, direction2) # # Initialize Agent # agent = Agent('test_agent', strict_engine=True) agent.set_organ(moulder1) agent.set_organ(moulder2) agent.set_organ(actuator1) agent.set_organ(actuator2) agent.set_scaffold(agent_resources) # # Decide on direction and execute action # agent.mould('reach_and_grab') agent.act('grab_it') assert (agent.resource.values() == REF_RESOURCE_OUTCOME) agent.mould('shout_how_much') agent.act('shout') agent.mould('shout_how_much') agent.act('shout') assert (isclose(env.loud_cumsum, 3.4)) try: agent.act('shout') raise AssertionError( 'Action without preceding moulding did not raise exception') except EmptyFlashError: pass else: raise AssertionError( 'Action without preceding moulding did not raise expected exception' )
def test_main(): belief = Belief('dummy', ('a1', )) resource = Resource('internal energy', ('level', )) mapper = ResourceMap('eat energy', 'delta', 'level', ('shift', )) interpreter1 = Interpreter('thinker', lambda x: (x + 1, -1), belief, belief, resource_map_output=mapper) interpreter2 = Interpreter('thinker X', lambda x: (x + 1, -3), belief, belief, resource_map_output=mapper) battery = AutoResourceCondition('battery left', lambda x: x > 0) heart_1 = Heartbeat('big heart', battery, ticker_arithmetic=lambda: 2, max_ticker=4) heart_2 = Heartbeat('small heart', battery, ticker_arithmetic=lambda: 1, max_ticker=4) agent_1 = Agent('A1') agent_1.set_organs(interpreter1, interpreter2) belief.set_values([1]) resource.set_values([10]) agent_1.set_message(belief) agent_1.set_scaffold(resource) agent_1.set_policies(heart_1, heart_2) assert (agent_1.belief['dummy'].values()[0] == REF_B1[0]) assert (agent_1.inert == REF_I1[0]) agent_1.pump('big heart') agent_1.interpret('thinker') assert (agent_1.belief['dummy'].values()[0] == REF_B1[1]) assert (agent_1.inert == REF_I1[1]) agent_1.pump('big heart') agent_1.interpret('thinker') assert (agent_1.belief['dummy'].values()[0] == REF_B1[2]) assert (agent_1.inert == REF_I1[2]) agent_1.pump('big heart') agent_1.interpret('thinker') assert (agent_1.belief['dummy'].values()[0] == REF_B1[3]) assert (agent_1.inert == REF_I1[3]) agent_1.revive() assert (agent_1.inert == False) agent_1.pump('small heart') agent_1.interpret('thinker X') assert (agent_1.belief['dummy'].values()[0] == REF_B2[0]) assert (agent_1.inert == REF_I2[0]) agent_1.pump('small heart') agent_1.interpret('thinker X') assert (agent_1.belief['dummy'].values()[0] == REF_B2[1]) assert (agent_1.inert == REF_I2[1]) agent_1.pump('small heart') agent_1.interpret('thinker X') assert (agent_1.belief['dummy'].values()[0] == REF_B2[2]) assert (agent_1.inert == REF_I2[2]) agent_1.pump('small heart') agent_1.interpret('thinker X') assert (agent_1.belief['dummy'].values()[0] == REF_B2[3]) assert (agent_1.inert == REF_I2[3]) agent_1.pump('small heart') agent_1.interpret('thinker X') assert (agent_1.belief['dummy'].values()[0] == REF_B2[4]) assert (agent_1.inert == REF_I2[4])