def test_neg_sync_loop(keep_order): # from pprint import pprint n_outcomes, n_steps = 10, 10 waste_center = 0.1 c1 = MySyncController(sleep_seconds=waste_center, name="c1") c2 = MySyncController(sleep_seconds=waste_center, name="c2") mechanisms = [] for m in range(2): mechanism = SAOMechanism( outcomes=n_outcomes, n_steps=n_steps, ignore_negotiator_exceptions=False, avoid_ultimatum=False, name=f"{m}", ) ufuns = MappingUtilityFunction.generate_random(2, outcomes=mechanism.outcomes) mechanism.add(c1.create_negotiator(ufun=ufuns[0], id=f"0-{m}", name=f"0-{m}")) mechanism.add(c2.create_negotiator(ufun=ufuns[1], id=f"1-{m}", name=f"1-{m}")) mechanisms.append(mechanism) SAOMechanism.runall(mechanisms, keep_order=keep_order) for mechanism in mechanisms: assert mechanism.state.started assert mechanism.state.agreement is None assert not mechanism.state.has_error assert not mechanism.state.broken assert mechanism.state.timedout assert mechanism.state.step == n_steps assert not mechanism.state.waiting assert len(mechanism.history) == n_steps
def test_neg_run_sync(n_negotiators): n_outcomes, n_steps = 10, 10 waste_edge, waste_center = 0.2, 0.1 c = MySyncController(sleep_seconds=waste_center) mechanisms, edge_names = [], [] for _ in range(n_negotiators): mechanism = SAOMechanism( outcomes=n_outcomes, n_steps=n_steps, ignore_negotiator_exceptions=True, avoid_ultimatum=False, ) ufuns = MappingUtilityFunction.generate_random(2, outcomes=mechanism.outcomes) edge_names.append(f"f{0}") mechanism.add( TimeWaster( name=f"agent{0}", id=f"a{0}", sleep_seconds=waste_edge, ufun=ufuns[0] ) ) mechanism.add(c.create_negotiator(ufun=ufuns[1])) mechanisms.append(mechanism) SAOMechanism.runall(mechanisms) for mechanism in mechanisms: assert mechanism.state.started assert mechanism.state.agreement is None assert not mechanism.state.has_error assert not mechanism.state.broken assert mechanism.state.timedout, print(f"Did not timeout!!\n{mechanism.state}") assert mechanism.state.step == n_steps assert not mechanism.state.waiting assert len(mechanism.history) == n_steps delay_center = 0.0 for k, v in mechanism.stats["times"].items(): if k in edge_names: assert v >= waste_edge * n_steps else: delay_center += v assert delay_center > n_steps * waste_center assert c.n_counter_all_calls == n_steps
def test_mechanism_runall(n_negotiators, oia): n_outcomes = 5 mechanisms = [] for _ in range(10): mechanism = SAOMechanism( outcomes=n_outcomes, n_steps=random.randint(3, 20), offering_is_accepting=oia, avoid_ultimatum=False, ) ufuns = MappingUtilityFunction.generate_random(1, outcomes=n_outcomes) for i in range(n_negotiators): mechanism.add(AspirationNegotiator(name=f"agent{i}"), ufun=ufuns[0]) mechanisms.append(mechanism) states = SAOMechanism.runall(mechanisms) assert len(states) == 10 assert not any(_.running for _ in states)
def test_sync_controller(n_negotiations, n_negotiators, oia): n_outcomes = 2 mechanisms = [] controller = MySAOSync() for i in range(n_negotiators): mechanisms.append( SAOMechanism( outcomes=n_outcomes, n_steps=5, offering_is_accepting=oia, avoid_ultimatum=False, ) ) ufuns = MappingUtilityFunction.generate_random( n_negotiators, outcomes=n_outcomes ) for i in range(n_negotiators): mechanisms[-1].add(AspirationNegotiator(name=f"agent{i}"), ufun=ufuns[i]) mechanisms[-1].add(controller.create_negotiator()) states = SAOMechanism.runall(mechanisms) assert all(_.agreement is not None for _ in states)