Por que é IDA $ ^ * $ mais rápido que um $ ^ * $?Por que a IDA $ ^ * $ visita mais nós do que um $ ^ * $?

cs.stackexchange https://cs.stackexchange.com/questions/118121

Pergunta

Eu usei IDA $ ^ * $ para resolver otimamente o 8-enigma e meus amigos usados uma $ ^ * $ para ele também (com a mesma distância de Manhattan Heuristic).

Eu calculei o tempo médio de funcionamento e o número de nós do meu algoritmo para 20 exemplos e o algoritmo do meu amigo.A média da média para o meu algoritmo foi muito mais rápido do que o algoritmo do meu amigo, mas meu número médio de nós visitados é muito mais do que o meu amigo.

eu sei ida $ ^ * $ visita cada nó mais de uma vez, mas por que é mais rápido que uma $ ^ * $ ?

Foi útil?

Solução

Desde que você já implementou IDA $ ^ * $ você certamente entende por que expande mais nós do que uma $ ^ * $ , isto é, ele começa a partir do estado de início com uma nova profundidade-primeira travessia em cada iteração. Nota primeiro que, o número geral de nós visitados pela IDA $ ^ * $ , enquanto necessariamente maior que uma $ ^ * $ não é muito maior. A razão é que o número de nós em cada profundidade progride de acordo com uma série geométrica com fator $ B $ , o fator de ramificação. Como resultado, o número de nós em profundidade $ D $ , $ b ^ d $ , é muito Maior do que a soma de todos os nós expandidos para as iterações anteriores, ou seja, $ b ^ d> \ sum_ {i= 0} ^ {d-1} b ^ i $ . Dessa diferença, aparece que Ida $ ^ * $ requer $ \ frac {b} {b-1} $ Expansões adicionais que são assintoticamente ideais como o limite para grandes $ B $ é 1. Concluindo, para qualquer algoritmo algoritmo visitando todos os nós Na profundidade $ D $ é muito mais difícil do que visitar todos os nós nas profundezas precedentes.

No caso de você querer aprofundar mais nesse problema, recomendo fortemente que você ler o papel original: Korf, Richard E. Profundidade - Primeiro ITerativo - Improdutando: Uma pesquisa de árvore admissível ideal. Inteligência artificial (27), 97-109, 1985. Ver em particular Teorema 4.2:

.

profundidade - o primeiro profundição iterativo é assintoticamente ideais entre Árvore Brute-Force procura em termos de tempo, espaço e comprimento de solução.

Claro, proporciona soluções ideais para que seja admissível e, portanto, assintoticamente ótima. Ele só pratica a profundidade - primeiro travessias e, portanto, é assintoticamente ideal em termos de espaço (exigindo com uma boa implementação apenas $ O (d) $ ).

como para o tempo, eu já delineei a principal razão teórica, mas deixe-me saber destacar três principais razões pelas quais é tão rápido na prática:

    .
  1. Primeiro de tudo, para quase todos os propósitos, o tempo total de execução de qualquer algoritmo é dominado pelo tempo necessário para expandir nós (outras operações são bastante simples e atômicas). É de fato ao expandir os nós que IDA $ ^ * $ pode ser extraordinariamente rápido porque:

    1.1. IDA $ ^ * $ é implementado recursivamente para que tudo que você precisa é levar o estado dado como um argumento e gerar uma criança de cada vez (para o seu caso específico simplesmente significa trocar o espaço em branco com uma telha adjacente, essa é apenas uma declaração!). No entanto, para uma $ ^ * $ A operação de expansão requer: primeiro, estalando um estado da fila e, em seguida, gerando todos os seus filhos (ou seja, movendo a telha em branco em todos os possíveis direções).

    1.2. Enquanto a operação precedente faz alguma diferença, o realmente importante é que uma $ ^ * $ requer nós de classificação em aberto. Mesmo se você fizer isso com um 1-balde (que levaria $ o (1) $ ), note que Ida $ ^ * $ não requer para classificar os nós, para que, enquanto uma $ ^ * $ leva tempo que é linear no número de nós expandidos, IDA $ ^ * $ não leva nenhum.

  2. Em terceiro lugar, uma das contribuições dos melhores algoritmos de busca (como uma $ ^ * $ ) é que eles evitam nós de expansão Usando uma lista fechada (que apesar de seu nome é geralmente implementada como um conjunto !!). IDA $ ^ * $ não tem mecanismos de detecção duplicada e, portanto, novamente, uma $ ^ * $ executa uma operação extra que não é executada em tudo pela IDA $ ^ * $ . Se você quiser saber mais sobre Duplicar-detecção na IDA $ ^ * $ Veja: reinefeld, a.; Marsland, T. aprimorou a pesquisa de profundidade iterativa. Transações IEEE na análise de padrões e inteligência de máquina (16) 7, 701-710, 1994.

  3. O último ponto é verdadeiramente relevante. No caso do quebra-cabeça de ladrilho de deslizamento, não há muitas transposições de fato e o ciclo mais curto consiste em 12 movimentos, de modo que o número de re-expansões não é tão grande. Colocando todos os estes juntos, IDA $ ^ * $ é uma máquina assassina para todos os tamanhos do quebra-cabeça de ladrilho de deslizamento.

    No entanto, apesar de todas as suas vantagens, pode não ser de interesse prático nessas aplicações que têm um grande número de transposições. Houve várias tentativas de superar essa dificuldade

com sucesso limitado, ver por exemplo:

Dow, P. Alex;Korf, Richard E. Duplicar evitação em profundidade - primeira pesquisa com aplicativos à largura da árvore.Conferência conjunta internacional sobre inteligência artificial, 480-485, 2009.

Espero que isso ajude,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top