@pytest.fixture(scope='module') def init_genius(): try: # init_genius_bridge(pkg_resources.resource_filename('negmas', resource_name='external/genius-8.0.4.jar')) pass except: pass def test_init_genius(init_genius): pass @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') @settings(max_examples=100) @given(agent_name1=st.sampled_from(GeniusNegotiator.negotiators()), agent_name2=st.sampled_from(GeniusNegotiator.negotiators()), utils=st.tuples(st.integers(1, 2), st.integers(1, 2)), single_issue=st.booleans(), keep_issue_names=st.booleans(), keep_value_names=st.booleans()) def test_genius_agents_run_using_hypothesis(init_genius, agent_name1, agent_name2, utils, single_issue , keep_issue_names, keep_value_names): from negmas import convert_genius_domain_from_folder src = pkg_resources.resource_filename('negmas', resource_name='tests/data/Laptop') dst = pkg_resources.resource_filename('negmas', resource_name='tests/data/LaptopConv1D') if single_issue: assert convert_genius_domain_from_folder(src_folder_name=src , dst_folder_name=dst
dom_folder = pathlib.Path( pkg_resources.resource_filename( "negmas", resource_name="tests/data/scenarios/anac/y2010/Travel")) dom = dom_folder / "travel_domain.xml" util1 = dom_folder / "travel_chox.xml" util2 = dom_folder / "travel_fanny.xml" @pytest.fixture(scope="module") def init_genius(): pass @pytest.mark.skipif( condition=not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agent(init_genius): p, _, issues = load_genius_domain_from_folder( dom_folder, agent_factories=[ lambda: GeniusNegotiator( java_class_name="agents.anac.y2015.Atlas3.Atlas3", domain_file_name=dom, utility_file_name=util1, ), lambda: GeniusNegotiator( java_class_name="agents.anac.y2015.AgentX.AgentX", domain_file_name=dom, utility_file_name=util2,
class TestGeniusAgentSessions: def prepare(self, utils=(1, 1), single_issue=True, keep_issue_names=True, keep_value_names=True): from negmas import convert_genius_domain_from_folder src = pkg_resources.resource_filename('negmas', resource_name='tests/data/Laptop') dst = pkg_resources.resource_filename('negmas', resource_name='tests/data/LaptopConv1D') if single_issue: assert convert_genius_domain_from_folder(src_folder_name=src , dst_folder_name=dst , force_single_issue=True , cache_and_discretize_outcomes=True , n_discretization=10 ) base_folder = dst else: base_folder = src neg, agent_info, issues = load_genius_domain_from_folder(base_folder , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names) # atlas = GeniusNegotiator.random_negotiator( atlas = GeniusNegotiator(java_class_name='agents.anac.y2015.Atlas3.Atlas3', domain_file_name=base_folder + '/Laptop-C-domain.xml' , utility_file_name=base_folder + f'/Laptop-C-prof{utils[0]}.xml' , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names) # agentx = GeniusNegotiator.random_negotiator( agentx = GeniusNegotiator(java_class_name='agents.anac.y2015.AgentX.AgentX', domain_file_name=base_folder + '/Laptop-C-domain.xml' , utility_file_name=base_folder + f'/Laptop-C-prof{utils[1]}.xml' , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names ) neg.add(atlas) neg.add(agentx) return neg @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agents_can_run_on_converted_single_issue_ufun1(self, init_genius): neg = self.prepare(utils=(1, 1), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [(1.0, 1.0)] state = neg.run() # pprint(neg.history) assert neg.agreement is not None # assert len(neg.history) <= 3 assert neg.agreement == {'Laptop-Harddisk-External Monitor': "HP+60 Gb+19'' LCD"} @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agents_can_run_on_converted_single_issue_ufun2(self, init_genius): neg = self.prepare(utils=(2, 2), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [(1.0, 1.0)] state = neg.run() assert neg.agreement is not None assert len(neg.history) <= 3 assert neg.agreement == {'Laptop-Harddisk-External Monitor': "Macintosh+80 Gb+19'' LCD"} @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agents_can_run_on_converted_single_issue(self, init_genius): neg = self.prepare(utils=(1, 2), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [(0.7715533992081258, 0.8450562871935449), (0.5775524426410947, 1.0), (1.0, 0.5136317604069089), (0.8059990434329689, 0.6685754732133642) ] state = neg.run() # assert len(neg.history) >= 2 assert neg.agreement is not None @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agents_can_run_on_converted_multiple_issues(self, init_genius): neg = self.prepare(utils=(1, 1), single_issue=False) frontier = neg.pareto_frontier(sort_by_welfare=True)[0] true_frontier = [(1.0, 1.0)] assert len(frontier) == len(true_frontier) for a, b in zip(frontier, true_frontier): assert abs(a[0] - b[0]) < 1e-5 and abs(a[1] - b[1]) < 1e-5 state = neg.run() assert len(neg.history) < 3 assert neg.agreement is not None assert neg.agreement == {'Laptop': 'HP', 'Harddisk': '60 Gb', 'External Monitor': "19'' LCD"} @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agents_can_run_on_converted_multiple_issues_no_names(self, init_genius): neg = self.prepare(utils=(1, 1), single_issue=False, keep_issue_names=False) frontier = neg.pareto_frontier(sort_by_welfare=True)[0] true_frontier = [(1.0, 1.0)] assert len(frontier) == len(true_frontier) for a, b in zip(frontier, true_frontier): assert abs(a[0] - b[0]) < 1e-5 and abs(a[1] - b[1]) < 1e-5 state = neg.run() assert len(neg.history) < 3 assert neg.agreement is not None assert neg.agreement == ('HP', '60 Gb', "19'' LCD") @pytest.mark.skipif(condition=not genius_bridge_is_running(), reason='No Genius Bridge, skipping genius-agent tests') def test_genius_agent_example(self, init_genius): agent_name1 = 'agents.anac.y2015.Atlas3.Atlas3' agent_name2 = 'agents.anac.y2015.Atlas3.Atlas3' single_issue = False keep_issue_names, keep_value_names = False, False utils = (1, 1) from negmas import convert_genius_domain_from_folder src = pkg_resources.resource_filename('negmas', resource_name='tests/data/Laptop') dst = pkg_resources.resource_filename('negmas', resource_name='tests/data/LaptopConv1D') if single_issue: assert convert_genius_domain_from_folder(src_folder_name=src , dst_folder_name=dst , force_single_issue=True , cache_and_discretize_outcomes=True , n_discretization=10 ) base_folder = dst else: base_folder = src neg, agent_info, issues = load_genius_domain_from_folder(base_folder , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names) # atlas = GeniusNegotiator.random_negotiator( atlas = GeniusNegotiator(java_class_name=agent_name1, domain_file_name=base_folder + '/Laptop-C-domain.xml' , utility_file_name=base_folder + f'/Laptop-C-prof{utils[0]}.xml' , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names) agentx = GeniusNegotiator(java_class_name=agent_name2, domain_file_name=base_folder + '/Laptop-C-domain.xml' , utility_file_name=base_folder + f'/Laptop-C-prof{utils[1]}.xml' , keep_issue_names=keep_issue_names , keep_value_names=keep_value_names ) neg.add(atlas) neg.add(agentx)
def test_genius_bridge_killing_forcibly(init_genius): GeniusBridge.kill_forced() assert not genius_bridge_is_running()
def test_genius_bridge_restarting(): port = GeniusBridge.restart() assert port > 0 assert genius_bridge_is_running(port)
def test_genius_bridge_killing_polietly(init_genius): GeniusBridge.kill() assert not genius_bridge_is_running()
def test_genius_bridge_killing_threads(init_genius): GeniusBridge.kill_threads() assert not genius_bridge_is_running()
def test_genius_bridge_shuttingdown(init_genius): GeniusBridge.shutdown() assert not genius_bridge_is_running()
import pytest from negmas import genius_bridge_is_running from negmas.genius import GeniusBridge SKIP_IF_NO_BRIDGE = True @pytest.fixture(scope="module") def init_genius(): GeniusBridge.start(0) @pytest.mark.skipif( condition=not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_bridge_cleaning(init_genius): GeniusBridge.clean() @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_bridge_shuttingdown(init_genius): GeniusBridge.shutdown() assert not genius_bridge_is_running()
class TestGeniusAgentSessions: def prepare( self, utils=(0, 0), single_issue=True, keep_issue_names=True, keep_value_names=True, ): from negmas import convert_genius_domain_from_folder src = pkg_resources.resource_filename( "negmas", resource_name="tests/data/Laptop" ) dst = pkg_resources.resource_filename( "negmas", resource_name="tests/data/LaptopConv1D" ) if single_issue: assert convert_genius_domain_from_folder( src_folder_name=src, dst_folder_name=dst, force_single_issue=True, cache_and_discretize_outcomes=True, n_discretization=10, keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, normalize_utilities=True, ) base_folder = dst else: base_folder = src neg, agent_info, issues = load_genius_domain_from_folder( base_folder, normalize_utilities=True, keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) # atlas = GeniusNegotiator.random_negotiator( atlas = GeniusNegotiator( java_class_name="agents.anac.y2015.Atlas3.Atlas3", ufun=agent_info[utils[0]]["ufun"], ) # agentx = GeniusNegotiator.random_negotiator( agentx = GeniusNegotiator( java_class_name="agents.anac.y2015.AgentX.AgentX", ufun=agent_info[utils[1]]["ufun"], ) neg.add(atlas) neg.add(agentx) return neg @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agents_can_run_on_converted_single_issue_ufun1(self, init_genius): neg = self.prepare(utils=(0, 0), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [ # (30.001554125152623, 30.001554125152623) (1.0, 1.0) ] state = neg.run() # pprint(neg.history) assert neg.agreement is not None # assert len(neg.history) <= 3 assert neg.agreement == { "Laptop-Harddisk-External Monitor": "HP+60 Gb+19'' LCD" } @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agents_can_run_on_converted_single_issue_ufun2(self, init_genius): neg = self.prepare(utils=(1, 1), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [(1.0, 1.0)] state = neg.run() assert neg.agreement is not None assert len(neg.history) <= 3 assert neg.agreement == { "Laptop-Harddisk-External Monitor": "Macintosh+80 Gb+19'' LCD" } @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agents_can_run_on_converted_single_issue(self, init_genius): neg = self.prepare(utils=(0, 1), single_issue=True) assert neg.pareto_frontier(sort_by_welfare=True)[0] == [ (0.7715533992081258, 0.8450562871935449), (0.5775524426410947, 1.0), (1.0, 0.5136317604069089), (0.8059990434329689, 0.6685754732133642), ], neg.pareto_frontier(sort_by_welfare=True)[0] state = neg.run() # assert len(neg.history) >= 2 assert neg.agreement is not None @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agents_can_run_on_converted_multiple_issues(self, init_genius): neg = self.prepare(utils=(0, 0), single_issue=False) frontier = neg.pareto_frontier(sort_by_welfare=True)[0] true_frontier = [(1.0, 1.0)] assert len(frontier) == len(true_frontier) for a, b in zip(frontier, true_frontier): assert abs(a[0] - b[0]) < 1 and abs(a[1] - b[1]) < 1 # neg.set_sync_call(True) neg.run() assert len(neg.history) < 3 assert neg.agreement is not None assert neg.agreement == { "Laptop": "HP", "Harddisk": "60 Gb", "External Monitor": "19'' LCD", } # @pytest.mark.skipif( # condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), # reason="No Genius Bridge, skipping genius-agent tests", # ) # def test_genius_agents_can_run_on_converted_multiple_issues_no_names( # self, init_genius # ): # neg = self.prepare( # utils=(0, 0), # single_issue=False, # keep_issue_names=True, # keep_value_names=True, # ) # frontier = neg.pareto_frontier(sort_by_welfare=True)[0] # true_frontier = [(1.0, 1.0)] # assert len(frontier) == len(true_frontier) # for a, b in zip(frontier, true_frontier): # assert abs(a[0] - b[0]) < 1 and abs(a[1] - b[1]) < 1 # # state = neg.run() # assert len(neg.history) < 4, len(neg.history) # assert neg.agreement is not None # # assert neg.agreement == { # # "External Monitor": "19'' LCD", # # "Harddisk": "60 Gb", # # "Laptop": "HP", # # } # assert (neg.agreement.values()) == ("HP", "60 Gb", "19'' LCD"), neg.agreement @pytest.mark.skipif( condition=SKIP_IF_NO_BRIDGE and not genius_bridge_is_running(), reason="No Genius Bridge, skipping genius-agent tests", ) def test_genius_agent_example(self, init_genius): agent_name1 = "agents.anac.y2015.Atlas3.Atlas3" agent_name2 = "agents.anac.y2015.Atlas3.Atlas3" single_issue = False keep_issue_names, keep_value_names = False, False utils = (1, 1) from negmas import convert_genius_domain_from_folder src = pkg_resources.resource_filename( "negmas", resource_name="tests/data/Laptop" ) dst = pkg_resources.resource_filename( "negmas", resource_name="tests/data/LaptopConv1D" ) if single_issue: assert convert_genius_domain_from_folder( src_folder_name=src, dst_folder_name=dst, force_single_issue=True, cache_and_discretize_outcomes=True, n_discretization=10, ) base_folder = dst else: base_folder = src neg, agent_info, issues = load_genius_domain_from_folder( base_folder, keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) # atlas = GeniusNegotiator.random_negotiator( atlas = GeniusNegotiator( java_class_name=agent_name1, domain_file_name=base_folder + "/Laptop-C-domain.xml", utility_file_name=base_folder + f"/Laptop-C-prof{utils[0]}.xml", keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) agentx = GeniusNegotiator( java_class_name=agent_name2, domain_file_name=base_folder + "/Laptop-C-domain.xml", utility_file_name=base_folder + f"/Laptop-C-prof{utils[1]}.xml", keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) neg.add(atlas) neg.add(agentx)