我有一个程序
snake.py
与使用强化学习进步的代理一起玩贪吃蛇。
代理/模型使用的所有变量(HIDDEN_SIZE
、DISCOUNT_RATE
等)都位于名为 variables.py
. 的文件中
我想测试这些变量的多个值,例如使用更新变量值的嵌套循环:
#...
LEARNING_RATE = 0.001
EPSILON_NB_GAMES = 80
GAMMA_DISCOUNT_RATE = 0.9
HIDDEN_SIZE = 256
gamma_values = [0.8, 0.9, 0.95]
learning_rate_values = [0.001, 0.01]
hidden_size_values = [256, 512, 1024]
epsilon_nb_games_values = [80, 100, 150]
if __name__ == "__main__":
for gamma in gamma_values:
for learning_rate in learning_rate_values:
for hidden_size in hidden_size_values:
for epsilon_nb_games in epsilon_nb_games_values:
LEARNING_RATE = learning_rate
EPSILON_NB_GAMES = epsilon_nb_games
GAMMA_DISCOUNT_RATE = gamma
HIDDEN_SIZE = hidden_size
print(f"Training with : gamma={gamma}, learning_rate={learning_rate}, epsilon_nb_games={epsilon_nb_games}, hidden_size={hidden_size}")
snake.trainAgent()
我没有执行我
snake.py
的from variables import *
文件,而是执行variables.py
文件,因为它有检查if __name__ == "__main__"
,然后调用snake.trainAgent()
但是,随着
snake.trainAgent()
的不同调用继续,参数没有更新(我认为这是因为文件只导入一次,当我调用snake.trainAgent()
时的事件)。
我试图在一个单独的文件
parameters.py
中执行循环,将所有变量写入一个文件,并在variables.py
文件中读取它们。
# parameters.py
#...
for gamma in gamma_values:
for learning_rate in learning_rate_values:
for hidden_size in hidden_size_values:
for epsilon_nb_games in epsilon_nb_games_values:
with open(f"entrainement/parameters.txt", "w") as f:
f.write(f"{TIME_KEY}\n")
f.write(f"{gamma}\n")
f.write(f"{learning_rate}\n")
f.write(f"{epsilon_nb_games}\n")
f.write(f"{hidden_size}")
#...
# variables.py
# ...
GAMMA_DISCOUNT_RATE = 0.9
if os.path.exists("training_parameters.txt"):
params = [line.strip() for line in open("training_parameters.txt", "r")]
TIME_KEY = params[0]
GAMMA_DISCOUNT_RATE = float(params[1])
VITESSE_APPRENTISSAGE = float(params[2])
EPSILON_NB_GAMES = int(params[3])
HIDDEN_SIZE = int(params[4])
那也不行(可能是因为和之前一样的原因)
我还尝试将读取文件的代码放在我在
snake.py
文件中调用的函数中,但这仍然不起作用。
有没有办法正确地实现我想做的事情?
附言: 因为我把所有的代码都翻译成法语,可能会有一些拼写错误,但在原始代码中是没有的。