コード例 #1
0
def main():
    cards_path = setting_exp.get('cards')
    field_vocabulary_path = setting_exp.get('field_vocabulary_path')
    spymaster_vocabulary_path = setting_exp.get('spymaster_vocabulary_path')
    keep_similarities_table = setting_exp.getint('keep_similarities_table')
    metrics_path = os.path.join(log_dir_path, "metrics.json")
    penalize_negative = setting_exp.getint('add_penalize_negative_for_clue_score')
    normalize_negative = setting_exp.getint('normalize_negative_for_score')
    # if not normalize_negative:
    #     normalize_negative = 0

    games_averaging = setup_averaging()
    wv_noise_std_range = setup_noise_params()
    threshold_delta_range = setup_threshold_delta()
    alpha_range = setup_alpha()

    # load embeddings.
    embeddings_spymaster, embeddings_guesser = setup_embeddings()

    # Create field, not initialized with cards yet.
    field = Field(field_logger, metrics_path, vocabulary_path=field_vocabulary_path)

    for game_count in range(games_averaging):
        # generate the field.

        similarities_table_path = os.path.join(model_dir_path, "game{}.pkl".format(game_count))
        field.generate_cards()

        for wv_noise_std in wv_noise_std_range:
            # prepare dict for guesser
            noised_embeddings_dict = add_noise(model=embeddings_guesser, mean=0, std=wv_noise_std) # seems to be super slow, TBD
            field.logger.info("------Noise std set to {0:.2f}.-------\n".format(wv_noise_std))

            for threshold_delta in threshold_delta_range:
                field.logger.info("------Delta set to {0:.3f}.-------\n".format(threshold_delta))
                # For each noise level, play multiple games on different fields.
                for alpha in alpha_range:
                    field.reset_scores()

                    field.logger.info("------Alpha set to {0:.3f}.-------\n".format(alpha))
                    play_one_game(field, embeddings_spymaster, noised_embeddings_dict, spymaster_vocabulary_path,
                    keep_similarities_table, similarities_table_path, threshold_delta, penalize_negative,
                    normalize_negative, alpha, field_logger, team_logger,
                    game_count)

                    # Play games with different noise level.
                    multiple_game_metrics = {"RED": defaultdict(list), "BLUE": defaultdict(list)}
                    hparams = {"hparams_alpha": alpha,
                               "hparams_delta": threshold_delta,
                               "hparams_noise": wv_noise_std,
                               "game_count": game_count+1
                               }
                    for key, val in hparams.items():
                        multiple_game_metrics.update({key: val})
                    multiple_game_metrics = field.append_game_metrics(multiple_game_metrics)
                    # Dump metrics of the games along with the hparams.
                    field.dump_external_metrics(multiple_game_metrics)

    '''