我正在开发一个名为monte carlo tree search(MCTS)的项目。在我的项目中,有一个时间有限的主循环。 MCTS模块的psudo代码如下:
import time
class mctsagent:
def select_node(self):
# do sth
def expand(self):
# do sth
def roll_out(self):
# do sth
def backup(self):
# do sth
def search(self, time_budget):
# main loop
startTime = time.clock()
num_rollouts = 0
while (time.clock() - startTime < time_budget):
result1 = self.select_node()
result2 = self.expand(result1)
result3 = self.roll_out(result2)
self.backup(result3)
num_rollouts += 1
我想使用线程来尽可能多地进行迭代 问题是如何开发一个可以利用线程模块在不同线程中运行搜索功能的类。
例如开发这样的模块:
class MCTS_Thread:
def __init__(self, agent, time_budget):
self.agent = agent # MCTS module
self.time_budget = time_budget # The time for running loop
def run(self):
self.agent.search(self.time_budget)
然后而不是搜索功能(#main loop)我用这个:
def search(self, time_budget):
threads = []
for i in range(3):
# 3 threads running search
t = MCTS_Thread(self, time_budget)
threads.append(t)
for thread in threads:
thread.start()
for thread in threads:
thread.join()
唯一重要的是搜索功能中的函数必须在每个线程中以相同的顺序运行。