def test_importing_all_without_exceptions(capsys, scenarios_folder): with capsys.disabled(): base = scenarios_folder nxt = 1 for root, dirs, files in walk(base): if len(files) == 0 or len(dirs) != 0: continue # print(f'{nxt:05}: Importing {root}', flush=True) load_genius_domain_from_folder(root) nxt += 1
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)] , keep_issue_names=True, keep_value_names=True, time_limit=20) assert len(p.negotiators) > 1 issue_list = [f'{k}:{v}' for k, v in enumerate(issues)] assert issue_list == [ "0:Atmosphere: ['Cultural heritage', 'Local traditions', 'Political stability', 'Security (personal)'" ", 'Liveliness', 'Turistic activities', 'Hospitality']", "1:Amusement: ['Nightlife and entertainment', 'Nightclubs', 'Excursion', 'Casinos', 'Zoo', 'Festivals'" ", 'Amusement park']", "2:Culinary: ['Local cuisine', 'Lunch facilities', 'International cuisine', 'Cooking workshops']", "3:Shopping: ['Shopping malls', 'Markets', 'Streets', 'Small boutiques']", "4:Culture: ['Museum', 'Music hall', 'Theater', 'Art gallery', 'Cinema', 'Congress center']", "5:Sport: ['Bike tours', 'Hiking', 'Indoor activities', 'Outdoor activities', 'Adventure']", "6:Environment: ['Parks and Gardens', 'Square', 'Historical places', 'See, river, etc.', 'Monuments'" ", 'Special streets', 'Palace', 'Landscape and nature']"] atlas3, agentx = p.negotiators[0], p.negotiators[1] p.run() # print(f'{len(p.history)} bids exchanged') u1 = np.array([float(atlas3.ufun(s.current_offer)) for s in p.history]) u2 = np.array([float(agentx.ufun(s.current_offer)) for s in p.history]) welfare = u1 + u2 # print( # f'Negotiator 1: {u1.mean()}({u1.std()})[{u1.min()}, {u1.max()}]\nNegotiator 2: {u2.mean()}({u2.std()})[{u1.min()}, {u1.max()}]' # f'\nWelfare: {welfare.mean()}({welfare.std()})[{welfare.min()}, {welfare.max()}]') # print(p.state) assert len(u1) > 0
def test_encoding_decoding_all(capsys, scenarios_folder): from negmas.genius import AgentX, Atlas3 # from random import sample with capsys.disabled(): base = scenarios_folder for root, dirs, files in walk(base): if len(files) == 0 or len(dirs) != 0: continue # print(f'{nxt:05}: Importing {root}', flush=True) m, ufun_info, _ = load_genius_domain_from_folder(root) assert m is not None if genius_bridge_is_running(): for info in ufun_info: n1 = Atlas3( domain_file_name=f"{root}/{m.name}.xml", ufun=info["ufun"], ) n2 = AgentX( domain_file_name=f"{root}/{m.name}.xml", utility_file_name=info["ufun_name"], ) m.add(n1) m.add(n2) u1, u2 = n1.ufun, n2.ufun outcomes = m.discrete_outcomes(n_max=50) for outcome in outcomes: assert abs(u1(outcome) - u2(outcome)) < 1e-3 n1.destroy_java_counterpart() n2.destroy_java_counterpart()
def test_convert_dir_no_names(tmpdir): from negmas import convert_genius_domain_from_folder dst = tmpdir.mkdir("sub") src = pkg_resources.resource_filename("negmas", resource_name="tests/data/Laptop") dst = pkg_resources.resource_filename( "negmas", resource_name="tests/data/LaptopConv") 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=False, keep_value_names=False, normalize_utilities=True, ) mechanism, agent_info, issues = load_genius_domain_from_folder(dst) assert len(issues) == 1 for k, v in enumerate(issues): assert ( f"{k}:{v}" == """0:0: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26']""" )
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 , 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) if neg is None: raise ValueError(f'Failed to lead domain from {base_folder}') 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_convert_dir_keep_names(tmpdir): from negmas import convert_genius_domain_from_folder dst = tmpdir.mkdir("sub") src = pkg_resources.resource_filename("negmas", resource_name="tests/data/Laptop") dst = pkg_resources.resource_filename( "negmas", resource_name="tests/data/LaptopConv") 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=True, keep_value_names=True, normalize_utilities=True, ) mechanism, agent_info, issues = load_genius_domain_from_folder(dst) assert len(issues) == 1 for k, v in enumerate(issues): assert ( f"{k}:{v}" == """0:Laptop-Harddisk-External Monitor: ["Dell+60 Gb+19'' LCD", "Dell+60 Gb+20'' LCD", "Dell+60 Gb+23'' LCD", "Dell+80 Gb+19'' LCD", "Dell+80 Gb+20'' LCD", "Dell+80 Gb+23'' LCD", "Dell+120 Gb+19'' LCD", "Dell+120 Gb+20'' LCD", "Dell+120 Gb+23'' LCD", "Macintosh+60 Gb+19'' LCD", "Macintosh+60 Gb+20'' LCD", "Macintosh+60 Gb+23'' LCD", "Macintosh+80 Gb+19'' LCD", "Macintosh+80 Gb+20'' LCD", "Macintosh+80 Gb+23'' LCD", "Macintosh+120 Gb+19'' LCD", "Macintosh+120 Gb+20'' LCD", "Macintosh+120 Gb+23'' LCD", "HP+60 Gb+19'' LCD", "HP+60 Gb+20'' LCD", "HP+60 Gb+23'' LCD", "HP+80 Gb+19'' LCD", "HP+80 Gb+20'' LCD", "HP+80 Gb+23'' LCD", "HP+120 Gb+19'' LCD", "HP+120 Gb+20'' LCD", "HP+120 Gb+23'' LCD"]""" )
def test_old_agent(): from negmas.inout import load_genius_domain_from_folder from negmas.genius import GeniusNegotiator from pathlib import Path folder_name = pkg_resources.resource_filename( "negmas", resource_name="tests/data/cameradomain") mechanism, ufuns, issues = load_genius_domain_from_folder( folder_name, n_steps=None, time_limit=TIMELIMIT) a1 = GeniusNegotiator( java_class_name="agents.anac.y2012.AgentLG.AgentLG", domain_file_name=f"{folder_name}/{mechanism.name}.xml", utility_file_name=ufuns[0]["ufun_name"], ) a2 = GeniusNegotiator( java_class_name="agents.anac.y2016.yxagent.YXAgent", domain_file_name=f"{folder_name}/{mechanism.name}.xml", utility_file_name=ufuns[1]["ufun_name"], ) mechanism.add(a1) mechanism.add(a2) mechanism.run() # print(a1.ufun.__call__(mechanism.agreement), a2.ufun.__call__(mechanism.agreement)) GeniusBridge.clean()
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
def test_simple_run_with_aspiration_agents(): file_name = pkg_resources.resource_filename('negmas', resource_name='tests/data/Laptop') assert os.path.exists(file_name) mechanism, agents, issues = load_genius_domain_from_folder( file_name, n_steps=100, time_limit=30 , force_single_issue=True, keep_issue_names=False , keep_value_names=False, agent_factories=AspirationNegotiator) assert mechanism is not None state = mechanism.run()
def test_genius_agents_run_using_hypothesis( agent_name1, agent_name2, single_issue, keep_issue_names, keep_value_names, ): from negmas import convert_genius_domain_from_folder # TODO remove this limitation. if keep_issue_names != keep_value_names: return 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, time_limit=TIMELIMIT, n_steps=None, ) if neg is None: raise ValueError(f"Failed to lead domain from {base_folder}") a1 = GeniusNegotiator( java_class_name=agent_name1, ufun=agent_info[0]["ufun"], keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) a2 = GeniusNegotiator( java_class_name=agent_name2, ufun=agent_info[1]["ufun"], keep_issue_names=keep_issue_names, keep_value_names=keep_value_names, ) neg._enable_callbacks = True neg.add(a1) neg.add(a2) neg.run() GeniusBridge.clean()
def test_genius_agents_run_using_hypothesis( agent_name1, agent_name2, single_issue, keep_issue_names, keep_value_names, ): from negmas import convert_genius_domain_from_folder utils = (1, 2) 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, time_limit=5, ) if neg is None: raise ValueError(f"Failed to lead domain from {base_folder}") a1 = 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, ) a2 = 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._enable_callbacks = True neg.add(a1) neg.add(a2) neg.run()
def test_importing_all_single_issue_without_exceptions(capsys, scenarios_folder): with capsys.disabled(): base = scenarios_folder nxt, success = 0, 0 for root, dirs, files in walk(base): if len(files) == 0 or len(dirs) != 0: continue try: domain, _, _ = load_genius_domain_from_folder(root, force_single_issue=True , max_n_outcomes=10000) except Exception as x: print(f'Failed on {root}') raise x nxt += 1 success += domain is not None
def generate_genius_ufuns_1d(folder=os.path.expanduser("~/datasets/genius/1d"), max_n_outcomes=None) -> List[np.array]: ufuns = [] folder = os.path.abspath(folder) for dir in sorted(os.listdir(folder)): full_name = os.path.join(folder, dir) if not os.path.isdir(full_name): continue if max_n_outcomes is not None and int(dir[:6]) > max_n_outcomes: continue mechanism, agent_info, issues = negmas.load_genius_domain_from_folder( folder_name=full_name) for negotiator in agent_info: ufuns.append(np.asarray(list(negotiator["ufun"].mapping.values()))) return ufuns
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
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_elicitor_can_run_from_genius_domain(self, data_folder): domain, agents_info, issues = load_genius_domain_from_folder( os.path.join(data_folder, "Laptop"), force_single_issue=True, keep_issue_names=False, keep_value_names=False, ) domain.add(LimitedOutcomesNegotiator(), ufun=agents_info[0]["ufun"]) # domain.n_steps = 10 user = User(ufun=agents_info[0]["ufun"], cost=0.2) strategy = EStrategy(strategy="titration-0.5") strategy.on_enter(ami=domain.ami) elicitor = PandoraElicitor(strategy=strategy, user=user) domain.add(elicitor) front, _ = domain.pareto_frontier() domain.run() assert len(domain.history) > 0
def test_loading_laptop_no_names(self, data_folder): domain, agents_info, issues = load_genius_domain_from_folder( os.path.join(data_folder, "Laptop"), force_single_issue=True, keep_issue_names=False, keep_value_names=False, agent_factories=lambda: AspirationNegotiator(), ) # [domain.add(LimitedOutcomesNegotiator(outcomes=n_outcomes) # , ufun=_['ufun']) for _ in agents_info] front, _ = domain.pareto_frontier(sort_by_welfare=True) assert front == [ (0.7715533992081258, 0.8450562871935449), (0.5775524426410947, 1.0), (1.0, 0.5136317604069089), (0.8059990434329689, 0.6685754732133642), ]
def test_elicitor_can_get_frontier(self, data_folder): domain, agents_info, issues = load_genius_domain_from_folder( os.path.join(data_folder, "Laptop"), force_single_issue=True, keep_issue_names=False, keep_value_names=False, normalize_utilities=True, ) assert len(issues) == 1 assert len(agents_info) == 2 domain.add(LimitedOutcomesNegotiator(), ufun=agents_info[0]["ufun"]) user = User(ufun=agents_info[0]["ufun"], cost=cost) strategy = EStrategy(strategy="titration-0.5") strategy.on_enter(ami=domain.ami) elicitor = FullKnowledgeElicitor(strategy=strategy, user=user) domain.add(elicitor) front, _ = domain.pareto_frontier() assert front == [(1.0, 1.0)]
def test_genius_agents_run_example(): from random import randint agents = [ "agents.anac.y2015.Atlas3.Atlas3", "agents.anac.y2015.AgentX.AgentX" ] for _ in range(5): agent_name1 = agents[randint(0, 1)] agent_name2 = agents[randint(0, 1)] # print(f"{agent_name1} - {agent_name2}") utils = (1, 2) base_folder = pkg_resources.resource_filename( "negmas", resource_name="tests/data/Laptop") neg, agent_info, issues = load_genius_domain_from_folder( base_folder, keep_issue_names=True, keep_value_names=True, n_steps=None, time_limit=TIMELIMIT, ) if neg is None: raise ValueError(f"Failed to lead domain from {base_folder}") 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=True, keep_value_names=True, ) 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=True, keep_value_names=True, ) neg.add(atlas) neg.add(agentx) neg.run() GeniusBridge.clean()
def test_reading_writing_linear_ufun(tmp_path): from negmas.utilities import LinearUtilityAggregationFunction, UtilityFunction from negmas.outcomes import Issue base_folder = pkg_resources.resource_filename( "negmas", resource_name="tests/data/Laptop") _, agent_info, issues = load_genius_domain_from_folder( base_folder, keep_issue_names=True, keep_value_names=True, ) ufuns = [_["ufun"] for _ in agent_info] for ufun in ufuns: assert isinstance(ufun, LinearUtilityAggregationFunction) dst = tmp_path / "tmp.xml" print(dst) UtilityFunction.to_genius(ufun, issues=issues, file_name=dst) ufun2, _ = UtilityFunction.from_genius(dst) assert isinstance(ufun2, LinearUtilityAggregationFunction) for outcome in Issue.enumerate(issues): assert abs(ufun2(outcome) - ufun(outcome)) < 1e-3
def generate_genius_ufuns( folder=os.path.expanduser("~/datasets/genius/nd"), max_n_outcomes=None ) -> Tuple[List[np.array], List[str], List[List[negmas.Issue]]]: folder = os.path.abspath(folder) names, issue_lists, ufuns = [], [], [] for dir in sorted(os.listdir(folder)): full_name = os.path.join(folder, dir) if not os.path.isdir(full_name): continue if max_n_outcomes is not None and int(dir[:6]) > max_n_outcomes: continue mechanism, agent_info, issues = negmas.load_genius_domain_from_folder( folder_name=full_name, ignore_discount=True, ignore_reserved=True, force_numeric=True, ) for negotiator in agent_info: ufuns.append(negotiator["ufun"]) names.append(negotiator["ufun_name"]) issue_list = mechanism.issues issue_lists.append(issue_list) return ufuns, names, issue_lists
def test_genius_agent_same_utility(): from negmas import load_genius_domain_from_folder p, ufuns, issues = load_genius_domain_from_folder( dom_folder, keep_issue_names=True, keep_value_names=True, time_limit=300000, normalize_utilities=True, ) assert p is not None, "Could not create a mechanism" issue_list = [f"{k}:{v}" for k, v in enumerate(issues)] assert issue_list == [ "0:Atmosphere: ['Cultural heritage', 'Local traditions', 'Political stability', 'Security (personal)'" ", 'Liveliness', 'Turistic activities', 'Hospitality']", "1:Amusement: ['Nightlife and entertainment', 'Nightclubs', 'Excursion', 'Casinos', 'Zoo'" ", 'Festivals', 'Amusement park']", "2:Culinary: ['Local cuisine', 'Lunch facilities', 'International cuisine', 'Cooking workshops']", "3:Shopping: ['Shopping malls', 'Markets', 'Streets', 'Small boutiques']", "4:Culture: ['Museum', 'Music hall', 'Theater', 'Art gallery', 'Cinema', 'Congress center']", "5:Sport: ['Bike tours', 'Hiking', 'Indoor activities', 'Outdoor activities', 'Adventure']", "6:Environment: ['Parks and Gardens', 'Square', 'Historical places', 'See, river, etc.'" ", 'Monuments', 'Special streets', 'Palace', 'Landscape and nature']", ] a1 = AgentX(ufun=ufuns[0]["ufun"]) a2 = Atlas3(ufun=ufuns[0]["ufun"]) p.add(a1) p.add(a2) final = p.run() u1 = [float(a1.utility_function(o)) for o in p.offers] u2 = [float(a2.utility_function(o)) for o in p.offers] assert len(u1) >= 1 or len(u2) >= 1 u1, u2 = a1.ufun(final.agreement), a2.ufun(final.agreement) welfare = u1 + u2 assert p.state.agreement is not None assert p.state.broken is False assert welfare > 1
def test_genius_agent_gets_ufun(): agents = [ "agents.anac.y2015.Atlas3.Atlas3", "agents.anac.y2015.AgentX.AgentX" ] base_folder = pkg_resources.resource_filename( "negmas", resource_name="tests/data/Laptop") neg, agent_info, issues = load_genius_domain_from_folder( base_folder, keep_issue_names=True, keep_value_names=True, n_steps=None, time_limit=TIMELIMIT, ) a1 = 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-prof1.xml", keep_issue_names=True, keep_value_names=True, ) assert a1.ufun is not None assert not a1._temp_ufun_file assert not a1._temp_domain_file a2 = GeniusNegotiator( java_class_name="agents.anac.y2015.Atlas3.Atlas3", domain_file_name=base_folder + "/Laptop-C-domain.xml", ufun=agent_info[0]["ufun"], keep_issue_names=True, keep_value_names=True, ) neg.add(a1) neg.add(a2) assert a2.ufun is not None assert a2._temp_ufun_file assert not a2._temp_domain_file neg.run() GeniusBridge.clean()
def do_run( opponent_ufun, agent_ufun, agent_starts, opponent_type=AspirationNegotiator, n_steps=None, time_limit=TIMELIMIT, outcome_type=dict, must_agree_if_same_ufun=True, ): neg, agent_info, issues = load_genius_domain_from_folder( base_folder, keep_issue_names=outcome_type == dict, keep_value_names=outcome_type == dict, time_limit=time_limit, n_steps=n_steps, outcome_type=outcome_type, ) neg._avoid_ultimatum = False if neg is None: raise ValueError(f"Failed to load domain from {base_folder}") if isinstance(opponent_type, GeniusNegotiator): opponent = opponent_type( ufun=agent_info[opponent_ufun]["ufun"], keep_issue_names=outcome_type == dict, keep_issue_values=outcome_type == dict, ) else: opponent = opponent_type(ufun=agent_info[opponent_ufun]["ufun"]) theagent = AgentClass(ufun=agent_info[agent_ufun]["ufun"]) if agent_starts: neg.add(theagent) neg.add(opponent) else: neg.add(opponent) neg.add(theagent) return neg.run()
def get_outcomes(name): mechanism, agent_info, issues = negmas.load_genius_domain_from_folder( folder_name=name) return negmas.num_outcomes(issues)
def test_importing_file_without_exceptions(scenarios_folder): folder_name = scenarios_folder + "/other/S-1NIKFRT-1" domain = load_genius_domain_from_folder(folder_name, n_discretization=10)