Example #1
0
def test_yaml_scenario_one_event_two_actions():
    events = [
        DcopEvent(
            "1",
            actions=[
                EventAction("remove_agent", agent="a01"),
                EventAction("remove_agent", agent="a05"),
            ],
        )
    ]
    scenario = Scenario(events)

    scenario_str = yaml_scenario(scenario)

    obtained = load_scenario(scenario_str)

    assert len(obtained.events) == 1
    assert len(obtained.events[0].actions) == 2
    assert obtained.events[0].actions[1].type == "remove_agent"
    assert obtained.events[0].actions[1].args["agent"] == "a05"
Example #2
0
def test_yaml_scenario_two_events():
    events = [
        DcopEvent(
            "1",
            actions=[
                EventAction("remove_agent", agent="a01"),
                EventAction("remove_agent", agent="a05"),
            ],
        ),
        DcopEvent("2", delay=30),
    ]
    scenario = Scenario(events)

    scenario_str = yaml_scenario(scenario)

    obtained = load_scenario(scenario_str)

    assert len(obtained.events) == 2
    assert obtained.events[1].is_delay
    assert not obtained.events[0].is_delay
Example #3
0
def test_yaml_scenario_one_event():
    events = [
        DcopEvent("1", actions=[EventAction("remove_agent", agent="a01")])
    ]
    scenario = Scenario(events)

    scenario_str = yaml_scenario(scenario)

    obtained = load_scenario(scenario_str)

    assert len(obtained.events) == 1
    assert len(obtained.events[0].actions) == 1
Example #4
0
def load_scenario(scenario_str) -> Scenario:
    """
    Load a scenario from a yaml string.
    :param scenario_str:
    :return:
    """
    loaded = yaml.load(scenario_str, Loader=yaml.FullLoader)
    evts = []
    for evt in loaded["events"]:
        id_evt = evt["id"]
        if "actions" in evt:
            actions = []
            for a in evt["actions"]:
                args = dict(a)
                args.pop("type")
                actions.append(EventAction(a["type"], **args))
            evts.append(DcopEvent(id_evt, actions=actions))
        elif "delay" in evt:
            evts.append(DcopEvent(id_evt, delay=evt["delay"]))

    return Scenario(evts)
Example #5
0
def generate_scenario(evts_count, actions_count, delay, initial_delay,
                      end_delay, agents) -> Scenario:
    agents = set(agents)
    events: List[DcopEvent] = []

    events.append(generate_delay("init", initial_delay))

    for i in range(evts_count):
        removed_agents = random.sample(agents, actions_count)
        agents.difference_update(removed_agents)
        actions = [
            EventAction("remove_agent", agent=agent)
            for agent in removed_agents
        ]

        events.append(DcopEvent(f"e{i}", actions=actions))
        if i != evts_count - 1:
            events.append(generate_delay(f"d{i}", delay))

    events.append(generate_delay("end", end_delay))

    return Scenario(events)
Example #6
0
def load_scenario(scenario_str) -> Scenario:
    """
    Load a scenario from a yaml string.
    :param scenario_str:
    :return:
    """
    loaded = yaml.load(scenario_str)
    evts = []
    for evt in loaded['events']:
        id = evt['id']
        if 'actions' in evt:
            actions = []
            for a in evt['actions']:
                type = a['type']
                args = dict(a)
                args.pop('type')
                actions.append(EventAction(a['type'], **args))
            evts.append(DcopEvent(id, actions=actions))
        elif 'delay' in evt:
            evts.append(DcopEvent(id, delay=evt['delay']))

    return Scenario(evts)