From 8199bf86e1e4f984693c8c8e3700c9a6de16587f Mon Sep 17 00:00:00 2001 From: lan-haozhong <2313034612@qq.com> Date: Fri, 10 Jun 2022 20:58:32 +0800 Subject: [PATCH 1/3] policy_selector_finished --- run/enemy_policy_selection.py | 82 +++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 run/enemy_policy_selection.py diff --git a/run/enemy_policy_selection.py b/run/enemy_policy_selection.py new file mode 100644 index 0000000..d505bc9 --- /dev/null +++ b/run/enemy_policy_selection.py @@ -0,0 +1,82 @@ +import os +import sys + +import random +import datetime +import time + +import shutil + +from policy.policy_loader import PolicyLoader + +# 新版本占比 +new_version_percentage = 0; + +# 其他地方导入的模型文件路径 +existed_version_models = ["E:/系统/下载/rl-python-master/UnmannedSys_models"] + +# 训练所得新版本模型文件保存路径 +new_model_files = "./save/versions/new_version" + +# 训练所得旧版本模型文件保存路径 +old_model_files = "./save/versions/old_version" + +# 定义新版本转化为旧版本的时间(单位:h) +time_from_newest_to_old = 24 + + +def move_new_to_old(): + tmp = [] + + # 读入目前新版本文件夹里的所有模型 + for root, dirs, files in os.walk(new_model_files): + if "saved_model.pb" in files: + if os.path.exists(root): + tmp.append((os.stat(root).st_ctime, root)) + sorted_list = sorted(tmp, key=lambda x: (x[0], x[1]), reverse=True) + + # 根据时间将应该被划分为旧版本的文件筛选出来,转移到旧版本文件夹里面 + for model in sorted_list: + if (sorted_list[0][0] - model[0]) / 3600 > time_from_newest_to_old: + if os.path.exists(model[1]): + create_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(model[0])) + shutil.move(model[1], old_model_files + '/' + create_time + '/eval_policy') + + +# 根据上述路径和百分比,选择一个现有的策略,并返回保存该策略的路径,用于env_constructor() +def generate_enemy_policy(): + existed_models_path = [] + old_models_path = [] + new_models_path = [] + + # 调整新旧版本文件 + move_new_to_old() + + # 读入其他地方导入的模型路径 + for current_file in existed_version_models: + for root, dirs, files in os.walk(current_file): + if "saved_model.pb" in files: + if os.path.exists(root): + existed_models_path.append(root) + + # 读入新版本模型的路径 + for root, dirs, files in os.walk(new_model_files): + if "saved_model.pb" in files: + if os.path.exists(root): + new_models_path.append((os.stat(root).st_ctime, root)) + + # 读入旧版本模型的路径 + for root, dirs, files in os.walk(old_model_files): + if "saved_model.pb" in files: + if os.path.exists(root): + old_models_path.append(root) + + if random.random() < new_version_percentage: + return new_models_path[0][1] + else: + return old_models_path[random.randint(0, len(old_models_path)) - 1] + + +if __name__ == '__main__': + for i in range(5): + print(generate_enemy_policy()) \ No newline at end of file -- Gitee From 2114cecc61e808125bb6440f6a5fe7d3dd22bb77 Mon Sep 17 00:00:00 2001 From: lan-haozhong <2313034612@qq.com> Date: Fri, 10 Jun 2022 21:40:12 +0800 Subject: [PATCH 2/3] multithread_bug_fix --- run/enemy_policy_selection.py | 82 ----------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 run/enemy_policy_selection.py diff --git a/run/enemy_policy_selection.py b/run/enemy_policy_selection.py deleted file mode 100644 index d505bc9..0000000 --- a/run/enemy_policy_selection.py +++ /dev/null @@ -1,82 +0,0 @@ -import os -import sys - -import random -import datetime -import time - -import shutil - -from policy.policy_loader import PolicyLoader - -# 新版本占比 -new_version_percentage = 0; - -# 其他地方导入的模型文件路径 -existed_version_models = ["E:/系统/下载/rl-python-master/UnmannedSys_models"] - -# 训练所得新版本模型文件保存路径 -new_model_files = "./save/versions/new_version" - -# 训练所得旧版本模型文件保存路径 -old_model_files = "./save/versions/old_version" - -# 定义新版本转化为旧版本的时间(单位:h) -time_from_newest_to_old = 24 - - -def move_new_to_old(): - tmp = [] - - # 读入目前新版本文件夹里的所有模型 - for root, dirs, files in os.walk(new_model_files): - if "saved_model.pb" in files: - if os.path.exists(root): - tmp.append((os.stat(root).st_ctime, root)) - sorted_list = sorted(tmp, key=lambda x: (x[0], x[1]), reverse=True) - - # 根据时间将应该被划分为旧版本的文件筛选出来,转移到旧版本文件夹里面 - for model in sorted_list: - if (sorted_list[0][0] - model[0]) / 3600 > time_from_newest_to_old: - if os.path.exists(model[1]): - create_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(model[0])) - shutil.move(model[1], old_model_files + '/' + create_time + '/eval_policy') - - -# 根据上述路径和百分比,选择一个现有的策略,并返回保存该策略的路径,用于env_constructor() -def generate_enemy_policy(): - existed_models_path = [] - old_models_path = [] - new_models_path = [] - - # 调整新旧版本文件 - move_new_to_old() - - # 读入其他地方导入的模型路径 - for current_file in existed_version_models: - for root, dirs, files in os.walk(current_file): - if "saved_model.pb" in files: - if os.path.exists(root): - existed_models_path.append(root) - - # 读入新版本模型的路径 - for root, dirs, files in os.walk(new_model_files): - if "saved_model.pb" in files: - if os.path.exists(root): - new_models_path.append((os.stat(root).st_ctime, root)) - - # 读入旧版本模型的路径 - for root, dirs, files in os.walk(old_model_files): - if "saved_model.pb" in files: - if os.path.exists(root): - old_models_path.append(root) - - if random.random() < new_version_percentage: - return new_models_path[0][1] - else: - return old_models_path[random.randint(0, len(old_models_path)) - 1] - - -if __name__ == '__main__': - for i in range(5): - print(generate_enemy_policy()) \ No newline at end of file -- Gitee From c34a33f185ac9c360805b2528dbf1e13c80d7b48 Mon Sep 17 00:00:00 2001 From: lan-haozhong <2313034612@qq.com> Date: Fri, 10 Jun 2022 21:40:21 +0800 Subject: [PATCH 3/3] multithread_bug_fix --- policy/enemy_policy_selection.py | 33 +++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/policy/enemy_policy_selection.py b/policy/enemy_policy_selection.py index 3c8c239..3350340 100644 --- a/policy/enemy_policy_selection.py +++ b/policy/enemy_policy_selection.py @@ -41,14 +41,16 @@ def move_new_to_old(): # 读入目前新版本文件夹里的所有模型 for root, dirs, files in os.walk(new_model_files): if "saved_model.pb" in files: - tmp.append((os.stat(root).st_ctime, root)) + if os.path.exists(root): + tmp.append((os.stat(root).st_ctime, root)) sorted_list = sorted(tmp, key=lambda x: (x[0], x[1]), reverse=True) # 根据时间将应该被划分为旧版本的文件筛选出来,转移到旧版本文件夹里面 for model in sorted_list: if (sorted_list[0][0] - model[0]) / 3600 > time_from_newest_to_old: create_time = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(model[0])) - shutil.move(model[1], old_model_files + '/' + create_time + '/eval_policy') + if os.path.exists(model[1]): + shutil.move(model[1], old_model_files + '/' + create_time + '/eval_policy') # # for model in existed_models_path: # if(sorted_list[0][0] - model[0]) / 3600 <= time_from_newest_to_old: @@ -70,30 +72,39 @@ def generate_enemy_policy(): for path in existed_version_models: for root, dirs, files in os.walk(path): if "saved_model.pb" in files: - existed_models_path.append(root) + if os.path.exists(root): + existed_models_path.append(root) # 读入新版本模型的路径 for root, dirs, files in os.walk(new_model_files): if "saved_model.pb" in files: - new_models_path.append((os.stat(root).st_ctime, root)) + if os.path.exists(root): + new_models_path.append((os.stat(root).st_ctime, root)) new_models_path = sorted(new_models_path, key=lambda x: (x[0], x[1]), reverse=True) # 读入旧版本模型的路径 for root, dirs, files in os.walk(old_model_files): if "saved_model.pb" in files: - old_models_path.append(root) + if os.path.exists(root): + old_models_path.append(root) rand = random.random() if rand < new_version_rate: - print("env_constructed with new_version") - return new_models_path[0][1] + if os.path.exists(new_models_path[0][1]): + print("env_constructed with new_version") + return new_models_path[0][1] if len(old_models_path) > 0 and new_version_rate <= rand < new_version_rate + old_version_rate: + idx = random.randint(0, len(old_models_path) - 1) print("env_constructed with old_version") - return old_models_path[random.randint(0, len(old_models_path) - 1)] - - print("env_constructed with existed_version") - return existed_models_path[random.randint(0, len(existed_models_path) - 1)] + if os.path.exists(old_models_path[idx]): + return old_models_path[idx] + + if len(existed_models_path) > 0: + print("env_constructed with existed_version") + idx = random.randint(0, len(existed_models_path) - 1) + if os.path.exists(existed_models_path[idx]): + return existed_models_path[idx] if __name__ == '__main__': -- Gitee