示例#1
0
文件: models.py 项目: lpkirwin/cicada
def short_pass_inner_function(log, n_steps=60):

    filtered_log = data.filter_log(
        log,
        type=(
            "SHORT_PASS_ATTEMPT",
            "NEW_POSSESSION",
            "OPP_POSSESSION",
            "KICK_RELEASE",
            "GOAL_SCORED",
        ),
    )
    df = data.parse_log_to_df(filtered_log)

    if len(df):

        if "player" not in df.columns:
            df["player"] = -1

        df["target"] = (
            (df.type == "SHORT_PASS_ATTEMPT")
            & (
                (df.type.shift(-1).isin(["NEW_POSSESSION", "KICK_RELEASE"]))
                | (df.type.shift(-1) == "GOAL_SCORED")
                | ((df.type.shift(-1) == "OPP_POSSESSION") & (df.player.shift(-1) == 0))
            )
            & (df.step.shift(-1) - df.step <= n_steps)
        ).astype(int)
        df = df[df.type == "SHORT_PASS_ATTEMPT"]

    return df
示例#2
0
文件: models.py 项目: lpkirwin/cicada
def position_score_inner_function(log):

    filtered_log = data.filter_log(
        log,
        type=("ACTIVE_POS_SCORE", "GOAL_SCORED", "OPP_POSSESSION"),
    )
    df = data.parse_log_to_df(filtered_log)

    if len(df):

        df["reward"] = 0

        goal_steps = df.step[df.type == "GOAL_SCORED"]
        for step in goal_steps:
            mask = (df.step < step) & (df.step >= (step - 20))
            df.loc[mask, "reward"] = 1.0

        opp_pos_steps = df.step[df.type == "OPP_POSSESSION"]
        for step in opp_pos_steps:
            mask = (df.step < step) & (df.step >= (step - 10))
            df.loc[mask, "reward"] = -0.025

        df = df[df.type == "ACTIVE_POS_SCORE"]

    return df
示例#3
0
文件: models.py 项目: lpkirwin/cicada
def handle_inner_function(log, n_steps=10):

    filtered_log = data.filter_log(
        log,
        type=(
            "MOVE_WITH_BALL_ATTEMPT",
            "LOST_POSSESSION",
            "NEW_POSSESSION",
            "OPP_POSSESSION",
            "SHOT_ATTEMPT",
        ),
    )
    df = data.parse_log_to_df(filtered_log)

    if len(df):

        df["target"] = 1

        bad_steps = df.step[df.type.isin(("LOST_POSSESSION", "OPP_POSSESSION"))]
        for step in bad_steps:

            mask = (df.step < step) & (df.step >= (step - n_steps))
            df.loc[mask, "target"] = 0  # failed if lost possession

        df = df[df.type == "MOVE_WITH_BALL_ATTEMPT"]

    return df
示例#4
0
def simulate_one_game(game_num):

    agent_obj = agent.Agent(noise_sd=NOISE_SD)

    def action(obs):
        return agent_obj.action_wrapper(obs)

    env = make(
        environment="football",
        configuration={
            "save_video": False,
            "scenario_name": "11_vs_11_kaggle",
            "agentTimeout": 60,
            "actTimeout": 60,
            "runTimeout": 1200,
        },
    )
    env.reset()
    env.run([action, "cicada/simple_rules_based_agent.py"])

    log_types_to_keep = [
        "SHOT_ATTEMPT",
        "GOAL_SCORED",
        "OPP_GOAL_SCORED",
        "MOVE_WITH_BALL_ATTEMPT",
        "SHORT_PASS_ATTEMPT",
        "LONG_PASS_ATTEMPT",
        "LOST_POSSESSION",
        "NEW_POSSESSION",
        "OPP_POSSESSION",
        "ACTIVE_POS_SCORE",
        "KICK_WITH_NO_ATTEMPT_EVENT",
        "KICK_RELEASE",
    ]
    filtered_log = data.filter_log(agent_obj.state.log, type=log_types_to_keep)
    data.add_to_log_file(filtered_log)

    record_type_counts = data.count_record_types(filtered_log)

    score = env.state[0]["observation"]["players_raw"][0]["score"]
    data.add_to_score_file(score)

    to_print = f"game_num: {str(game_num):>4}, score: {str(score):>8}, steps: {str(len(env.steps)):>4}, "
    rec_count_strings = list()
    for rec_type, short_name in [
        ("SHOT_ATTEMPT", "shot"),
        ("MOVE_WITH_BALL_ATTEMPT", "move"),
        ("SHORT_PASS_ATTEMPT", "short"),
        ("LONG_PASS_ATTEMPT", "long"),
        ("ACTIVE_POS_SCORE", "poss"),
    ]:
        rec_count_strings.append(
            f"{short_name}: {str(record_type_counts.get(rec_type, 0)):>4}"
        )
    to_print += ", ".join(rec_count_strings)
    print(to_print)
示例#5
0
def save_score_and_log(agent_obj, score):

    log_types_to_keep = [
        "SHOT_ATTEMPT",
        "GOAL_SCORED",
        "OPP_GOAL_SCORED",
        "MOVE_WITH_BALL_ATTEMPT",
        "SHORT_PASS_ATTEMPT",
        "LONG_PASS_ATTEMPT",
        "LOST_POSSESSION",
        "NEW_POSSESSION",
        "OPP_POSSESSION",
        "ACTIVE_POS_SCORE",
        "KICK_WITH_NO_ATTEMPT_EVENT",
        "KICK_RELEASE",
    ]
    filtered_log = data.filter_log(agent_obj.state.log, type=log_types_to_keep)
    data.add_to_log_file(filtered_log)
    data.add_to_score_file(score)
示例#6
0
文件: models.py 项目: lpkirwin/cicada
def shot_inner_function(log, n_steps=30):

    filtered_log = data.filter_log(
        log,
        type=("SHOT_ATTEMPT", "GOAL_SCORED"),
    )
    df = data.parse_log_to_df(filtered_log)

    if len(df):

        df["target"] = (
            (df.type == "SHOT_ATTEMPT")
            & (df.type.shift(-1) == "GOAL_SCORED")
            & (df.step.shift(-1) - df.step <= n_steps)
        ).astype(int)
        df = df[df.type == "SHOT_ATTEMPT"]
        if "eval_data.dist_to_goalie" in df.columns:
            df = df[df["eval_data.dist_to_goalie"].isna()]

        if "eval_data.pos" in df.columns:
            df["posx"] = df["eval_data.pos"].str[0]
            df["posy"] = df["eval_data.pos"].str[1]

    return df