Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用迭代深化的Python3 RushHour解算器_Python 3.x_Artificial Intelligence_Puzzle - Fatal编程技术网

Python 3.x 使用迭代深化的Python3 RushHour解算器

Python 3.x 使用迭代深化的Python3 RushHour解算器,python-3.x,artificial-intelligence,puzzle,Python 3.x,Artificial Intelligence,Puzzle,我正在尝试使用迭代深化深度优先搜索创建一个RushHour谜题解算器。现在,当我执行脚本时,它会生成太多的节点,并迅速消耗大约20MB/s的整个内存分配速度。我知道我存储电路板状态的解决方案并不完美,但它不应该占用太多内存。整个项目可以在这里找到 问题是is_solved map.py中的一个bug。即使出现最终状态,它也返回0,因此它从未停止搜索。现在它可以工作了,虽然速度很慢,但这是一个不同的问题。我只是快速阅读了您的所有代码,但似乎您构建了很多列表。你需要到处使用列表吗,或者你能尝试使用生

我正在尝试使用迭代深化深度优先搜索创建一个RushHour谜题解算器。现在,当我执行脚本时,它会生成太多的节点,并迅速消耗大约20MB/s的整个内存分配速度。我知道我存储电路板状态的解决方案并不完美,但它不应该占用太多内存。整个项目可以在这里找到


问题是is_solved map.py中的一个bug。即使出现最终状态,它也返回0,因此它从未停止搜索。现在它可以工作了,虽然速度很慢,但这是一个不同的问题。

我只是快速阅读了您的所有代码,但似乎您构建了很多列表。你需要到处使用列表吗,或者你能尝试使用生成器吗?是的,我知道我使用列表太多了。我以前没用过发电机,我会调查的。
import map from node import Node


def all_moves(node):  # returns all valid moves for node
    state = node.state
    output = []
    for i in state.cars:
        car_id = i[0]
        y = i[1]
        x = i[2]
        for action in actions:
            movement = state.is_movable(action, y, x)
            if movement[1] != 0:
                movement.append(car_id)
                movement.append(action)
                output.append(movement)
    return output


def generate_all_child(node):  # creates every new state based on list of valid moves and makes it a child
    for move in all_moves(node):
        action = move[-1]
        car = move[0]
        car_id = move[-2]
        for step in range(1, move[1]+1):
            child_state = node.state.action(car_id, car, action, step)
            child_node = Node(child_state, node)
            node.add_child(child_node)


def dls(node, node_depth):
    if node_depth >= 0:
        generate_all_child(node)
        if node.state.is_solved():
            return node
        for child in node.children:
            dls(child, node_depth-1)


stack = [] actions = ["left", "right", "up", "down"]

mapa = map.Map() mapa.load("krizovatka.csv") mapa.display_matrix() mapa.load_cars() root = Node(mapa, None) stack.append(root)

depth = 5 for i in range(1, depth+1):
    print(i)
    final = dls(root, i)
    print(len(root.children))