更新导入文件中的变量

问题描述 投票:0回答:0

我有一个程序

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
文件中调用的函数中,但这仍然不起作用。

有没有办法正确地实现我想做的事情?

附言: 因为我把所有的代码都翻译成法语,可能会有一些拼写错误,但在原始代码中是没有的。

python import python-multithreading
© www.soinside.com 2019 - 2024. All rights reserved.