Files
tugo/alphago_policy_rl.py
T
2023-05-23 15:52:09 +08:00

73 lines
2.2 KiB
Python

import torch
from tqdm import tqdm
from tugo.agent.pg import PolicyAgent
from tugo.agent.predict import DeepLearningAgent
from tugo.encoders.alphago import AlphaGoEncoder
from tugo.rl.simulate import experience_simulation
encoder = AlphaGoEncoder()
# Load opponents
sl_agent = DeepLearningAgent.load('checkpoints/alphago_sl_policy.pt', encoder)
sl_opponent = DeepLearningAgent.load('checkpoints/alphago_sl_policy.pt', encoder)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
alphago_rl_agent = PolicyAgent(sl_agent.model.to(device), encoder)
opponent = PolicyAgent(sl_opponent.model.to(device), encoder)
# Run simulation
num_games = 1000
with tqdm(total=num_games) as pbar:
experience = experience_simulation(num_games, alphago_rl_agent, opponent, progress_callback=lambda: pbar.update(1))
alphago_rl_agent.train(experience)
# # Serialize RL agent
# alphago_rl_agent.save('checkpoints/alphago_rl_policy.pt')
# # Serialize experience
# experience.save('checkpoints/alphago_rl_experience.pt')
def generate_incremental_filepath(file_path):
import os
directory, filename = os.path.split(file_path)
filename_base, file_extension = os.path.splitext(filename)
# 查找保存目录下的最后一个文件序号
last_index = 0
file_exists = False
for file_name in os.listdir(directory):
if file_name.startswith(filename_base) and file_name.endswith(file_extension):
try:
index = int(file_name[len(filename_base):-len(file_extension)])
last_index = max(last_index, index)
file_exists = True
except ValueError:
continue
if not file_exists:
last_index = 0
# 生成带序号的新文件名
new_index = last_index + 1
new_filename = f"{filename_base}_{new_index}{file_extension}"
# 生成新文件的完整路径
new_file_path = os.path.join(directory, new_filename)
return new_file_path
# Serialize RL agent
alphago_rl_agent.save(generate_incremental_filepath('checkpoints/alphago_rl_policy.pt'))
# Serialize experience
experience.save(generate_incremental_filepath('checkpoints/alphago_rl_experience.pt'))