我正在玩一点勺子,我想知道我是否可以分发简单的问题,比如在有限状态机中回溯以获得所有状态。
例如:
但我想打印所有解决方案。
solutions = []
def backtraking(state)
for new_state in state.get_new_states():
if new_state.is_terminal():
solutions.append(new_state)
else:
futures.submit(backtraking,new_state)
def main():
task = futures.submit(backtracking,state)
if __name__ == "__main__":
main()
现在在解决方案中,我将拥有回溯计算的所有解决方案,但是在分布式系统中。
这段代码不起作用,有没有人有Python和Scoop解决这个问题的经验?
答案 0 :(得分:1)
来自Scoope小组
声明" futures.map(回溯(new_state))"将使用new_state作为参数调用backtraking(),然后使用前一个调用的结果作为参数调用futures.map。 我怀疑那是你想要做的。
使用SCOOP并行化程序的最简单方法是将您的递归调用替换为futures.submit()以进行回溯。
有些事情:
def backtraking(state)
for new_state in state.get_new_states():
if new_state.is_terminal():
print "A solution"
valid_list.append(new_state)
else:
futures.submit(backtraking, new_state)
这将为每个节点创建一个Future(基本上可以同时执行的任务)。然后,如果您为程序分配了多个核心,则会并行执行树遍历。
如果您正在寻求最佳性能,您可以通过仅在第一次深度级别上执行提交来改进它,例如(未经测试!): def backtraking(state,depth = 0)
for new_state in state.get_new_states():
if new_state.is_terminal():
print "A solution"
valid_list.append(new_state)
else:
if depth < 3:
futures.submit(backtraking, new_state, depth + 1)
else:
backtraking(new_state, depth + 1)
希望它能澄清一切。