Algoritmo de localização de caminhos de triangulação A * (TA *)

11

Preciso de ajuda para entender o algoritmo Triangle A * (TA *) descrito por Demyen em seu artigo Pathfinding baseado em triangulação eficiente , nas páginas 76-81.

Ele descreve como adaptar o algoritmo A * regular para triangulação, para procurar outros caminhos possivelmente mais ideais, mesmo após o nó final ser alcançado / expandido. A * regular para quando o nó final é expandido, mas esse nem sempre é o melhor caminho quando usado em um gráfico triangulado. Este é exatamente o problema que estou tendo.

O problema está ilustrado na página 78, Figura 5.4: insira a descrição da imagem aqui

Eu entendo como calcular os valores de g e h apresentados no artigo (página 80).

E acho que a condição de parada de pesquisa é:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

onde currentNode é o nó de pesquisa exibido na lista aberta (fila de prioridade), que possui o menor f-score. shortestDistanceFound é a distância real do caminho mais curto encontrado até agora.

Mas como excluo os caminhos encontrados anteriormente de pesquisas futuras? Porque se eu fizer a pesquisa novamente, ela obviamente encontrará o mesmo caminho. Redefino a lista fechada? Preciso modificar algo, mas não sei o que é preciso mudar. O papel não possui pseudocódigo, o que seria útil.

Morrowless
fonte

Respostas:

3

Eu não implementei isso, mas ao ler, acho que você faria algo assim:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

A diferença é que, mesmo que você encontre um caminho para a meta, não é necessariamente o caminho mais curto . Mas você continuará melhorando os limites superiores no caminho mais curto, o que significa que não precisará abrir todos os nós. Eventualmente, o seu conjunto aberto deve estar vazio, e o melhor caminho que você encontrou até agora deve ser o mais curto.

O custo g modificado que ele descreve parece ser uma grande subestimação, por isso estou cético sobre o quão bem ele funciona na prática.

celion
fonte
Hmm, eu posso estar errado, mas estou interpretando isso como a condição de parada, e não a condição para adicionar à lista aberta. O seguinte soa como a condição para adicionar à lista aberta: "Como observação lateral, um filho de um estado de pesquisa não será gerado para um triângulo adjacente específico se um estado correspondente a esse triângulo já for um ancestral desse estado. Isso a exclusão pode ser feita porque nunca eliminará um caminho ideal, apenas um que poderia se tornar mais curto removendo parte dele, conforme declarado no Teorema 4.3.4. "
Morrowless