Ejemplo n.º 1
0

@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
Ejemplo n.º 2
0
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,
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
def test_genius_bridge_killing_forcibly(init_genius):
    GeniusBridge.kill_forced()
    assert not genius_bridge_is_running()
Ejemplo n.º 5
0
def test_genius_bridge_restarting():
    port = GeniusBridge.restart()
    assert port > 0
    assert genius_bridge_is_running(port)
Ejemplo n.º 6
0
def test_genius_bridge_killing_polietly(init_genius):
    GeniusBridge.kill()
    assert not genius_bridge_is_running()
Ejemplo n.º 7
0
def test_genius_bridge_killing_threads(init_genius):
    GeniusBridge.kill_threads()
    assert not genius_bridge_is_running()
Ejemplo n.º 8
0
def test_genius_bridge_shuttingdown(init_genius):
    GeniusBridge.shutdown()
    assert not genius_bridge_is_running()
Ejemplo n.º 9
0
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()

Ejemplo n.º 10
0
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)