Exemple #1
0
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
Exemple #2
0
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
Exemple #3
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()
Exemple #4
0
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']"""
        )
Exemple #5
0
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)
Exemple #6
0
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"]"""
        )
Exemple #7
0
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()
Exemple #8
0
 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
Exemple #9
0
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()
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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
Exemple #13
0
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
Exemple #14
0
    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
Exemple #15
0
    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)
Exemple #16
0
 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
Exemple #17
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),
     ]
Exemple #18
0
 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)]
Exemple #19
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()
Exemple #20
0
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
Exemple #21
0
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
Exemple #22
0
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
Exemple #23
0
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()
Exemple #24
0
 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)
Exemple #26
0
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)