"data_analysis_interval"] = data_analysis_interval

    anay_data: AnalyticalData = AnalyticalData()
    anay_data.settings_info_dict = game_raw_data.settings_info_dict
    anay_data.name_datalist_dict["mean"] = [0]
    anay_data.name_datalist_dict["standard_deviation"] = [0]

    if is_save_chart_data or is_save_analytica_data or is_save_raw_data:
        CommonUtil.make_dir(save_dir_path)
        CommonUtil.save_json_to_file(game_raw_data.__dict__,
                                     save_dir_path + "/settings_info.txt")

    env = gym.make('CartPole-v0')

    tabular_agent: BinaryOutputTabularAgent = BinaryOutputTabularAgent(
        initial_epsilon, epsilon_decay, episodes_per_drop, learning_rate,
        discount_rate)

    for episode_idx in range(episodes_to_run):
        if is_print_episode_idx:
            CommonUtil.print_on_same_line("episode: " + str(episode_idx + 1) +
                                          ".\t")

        cartpole_state = env.reset()
        is_game_over = False

        total_reward = 0
        time_step = 0

        while not is_game_over:
            time_step += 1
    tmp_interval_mean_list = [0]
    tmp_interval_stddev_list = [0]
    tmp_evaluation_msg_list = []
    if is_save_chart_data or is_save_analytica_data:
        CommonUtil.make_dir(save_dir_path)
        CommonUtil.save_json_to_file(game_raw_data.__dict__,
                                     save_dir_path + "/settings_info.txt")

    print("start running episodes")
    for episode_idx in range(num_of_iterations):
        if is_print_episode_idx:
            CommonUtil.print_on_same_line("episode " + str(episode_idx + 1) +
                                          ". ")

        exploration_rate = BinaryOutputTabularAgent.derive_explore_rate(
            episode_idx, initial_epsilon, epsilon_decay, episodes_per_drop)
        game_data.general_data_list.append(exploration_rate)

        # data analysis section
        if episode_idx == 0 or (episode_idx + 1) % update_interval == 0:
            print(f"Explore rate: {exploration_rate}")
            start_interval: int = episode_idx - update_interval + 2
            start_interval_str: str = CommonUtil.format_int_to_str_length(
                start_interval, len(str(num_of_iterations)))
            end_interval_str: str = CommonUtil.format_int_to_str_length(
                episode_idx + 1, len(str(num_of_iterations)))

            plt = PlotUtil.plot(plot_id=1,
                                plot_title="Exploration Rate Change",
                                x_label="Episodes",
                                y_label="Exploration Rate",