用勺子和蟒蛇回溯微积分的例子

时间:2014-07-23 15:30:10

标签: python distributed-computing backtracking

我正在玩一点勺子,我想知道我是否可以分发简单的问题,比如在有限状态机中回溯以获得所有状态。

例如:

但我想打印所有解决方案。

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解决这个问题的经验?

1 个答案:

答案 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) 

希望它能澄清一切。