コード例 #1
0
def write_train_default_config():
    """
    在每次训练之前,修改 default.yaml 文件中的 checkpoint_path 和 cal_max_expectation_tasks 配置项,
    修改 qmix.yaml 中的 epsilon_finish 的配置项
    :return:
    """
    default = ModifyYAML(os.path.join(os.path.dirname(__file__), "config", "default.yaml"))
    alg_config = ModifyYAML(os.path.join(os.path.dirname(__file__), "config", "algs", "qmix.yaml"))
    default_data = default.data
    default_data["checkpoint_path"] = ""
    default_data["cal_max_expectation_tasks"] = False
    alg_config.data["epsilon_finish"] = 0.1
    default.dump()
    alg_config.dump()
コード例 #2
0
def write_gen_default_config(checkpoint_path):
    """
    在生成数据之前,修改 default.yaml 文件中的 checkpoint_path 和 cal_max_expectation_tasks 配置项,
    修改 qmix.yaml 中的 epsilon_finish 的配置项
    :param checkpoint_path:
    :return:
    """
    default = ModifyYAML(os.path.join(os.path.dirname(__file__), "config", "default.yaml"))
    alg_config = ModifyYAML(os.path.join(os.path.dirname(__file__), "config", "algs", "qmix.yaml"))
    default_data = default.data
    default_data["checkpoint_path"] = os.path.join(os.path.dirname(__file__), "results", "models", checkpoint_path)
    default_data["cal_max_expectation_tasks"] = True
    alg_config.data["epsilon_finish"] = 0
    default.dump()
    alg_config.dump()
コード例 #3
0
def plot_weight_load():
    flag = "heavy_load"
    random_mean_reward, all_local_max_expectation, all_offload_max_expectation, rl_max_expectation = get_reward_data(
        flag)
    print(random_mean_reward.tolist())
    print(all_local_max_expectation.tolist())
    print(all_offload_max_expectation.tolist())
    print(rl_max_expectation.tolist())
    x = ModifyYAML(get_ec_config_file_path()).data["light_load_prob"]
    png_file_path = os.path.join(os.path.dirname(__file__), "envs", "ec", "output", "heavy_load.png")
    eps_file_path = os.path.join(os.path.dirname(__file__), "envs", "ec", "output", "heavy_load.eps")
    plot(x, random_mean_reward, all_local_max_expectation, all_offload_max_expectation,
         rl_max_expectation, "probability of heavy load", r"normalized $\bar{\psi}$", png_file_path, eps_file_path,
         (5.6, 5.6), 16)
コード例 #4
0
def plot_scale():
    flag = "cc_cl"
    random_mean_reward, all_local_max_expectation, all_offload_max_expectation, rl_max_expectation = get_reward_data(
        flag)
    print(random_mean_reward.tolist())
    print(all_local_max_expectation.tolist())
    print(all_offload_max_expectation.tolist())
    print(rl_max_expectation.tolist())
    x = ModifyYAML(get_ec_config_file_path()).data["cc_cl_scale"]
    png_file_path = os.path.join(os.path.dirname(__file__), "envs", "ec", "output", "cc_cl.png")
    eps_file_path = os.path.join(os.path.dirname(__file__), "envs", "ec", "output", "cc_cl.eps")
    plot(x, random_mean_reward, all_local_max_expectation, all_offload_max_expectation,
         rl_max_expectation, r"$C_c / C_l$", r"normalized $\bar{\psi}$", png_file_path, eps_file_path,
         (8, 6), 12)
コード例 #5
0
def cal_max_expectation_tasks(args, mac, learner, runner):
    """
    加载已经训练好的模型,来生成 state-action-reward 数据,用来评价训练好的模型
    :param args:
    :param mac:
    :param learner:
    :param runner:
    :return:
    """
    algs_modify = ModifyYAML(
        os.path.join(os.path.dirname(__file__), "config", "algs", "qmix.yaml"))
    algs_modify.data["epsilon_finish"] = 0
    algs_modify.dump()

    modify = ModifyYAML(
        os.path.join(os.path.dirname(__file__), "config", "envs", "ec.yaml"))
    global_state = []
    global_action = []
    global_reward = []
    episode = int(modify.data["gen_t_max"] /
                  modify.data["env_args"]["max_steps"])
    for i in range(episode):
        episode_batch = runner.run(test_mode=False)
        episode_data = episode_batch.data.transition_data
        global_state += get_episode_state(episode_data)
        global_action += get_episode_action(episode_data)
        global_reward += get_episode_reward(episode_data)

    expected_reward = ExpectedReward(global_state,
                                     global_reward).get_expected_reward()

    label = get_label(modify)
    file_path = os.path.join(os.path.dirname(__file__), "envs", "ec", "output",
                             "rl_" + label + ".txt")
    with open(file_path, "a") as f:
        f.write(str(expected_reward) + "\n")
コード例 #6
0
    all_offload_max_expectation = np.divide(all_offload_max_expectation, max_reward)
    rl_max_expectation = np.divide(rl_max_expectation, max_reward)

    return random_mean_reward, all_local_max_expectation, all_offload_max_expectation, rl_max_expectation


def my_main():
    """
    主函数,系统调用 main.py
    :return:
    """
    os.system("python3 /home/csyi/pymarl/src/main.py --env-config=ec --config=qmix")


if __name__ == '__main__':
    ec_modify = ModifyYAML(os.path.join(os.path.dirname(__file__), "config", "envs", "ec.yaml"))

    # 当 train_cc_cl_scale 为 true 时, 表示此时会修改 cc 和 cl 参数,并且训练模型
    # 此时必须设置 cc_cl_scale 参数,而且 cc/cl 的比例会依次为 cc_cl_scale 中的值
    if ec_modify.data["train_cc_cl_scale"] is True:
        cc_cl_scale(ec_modify)

    # 当 train_light_load_prob 为 true 时,表示此时会修改 prob 参数,并且训练模型
    # 此时必须设置 light_load_prob 参数, 从 light_load_prob 中依次取值来当做轻载的概率
    if ec_modify.data["train_light_load_prob"] is True:
        light_load_prob(ec_modify)

    # 当 train_mid_load_prob 为 true 时,表示此时会修改 prob 参数,并且训练模型
    # 此时必须设置 mid_load_prob 参数, 从 mid_load_prob 中依次取值来当做中载的概率
    if ec_modify.data["train_mid_load_prob"] is True:
        mid_load_prob(ec_modify)