1
resposta

[Dúvida] Resultado do melhor caminho na solução sugerida

A solução do instrutor apresentada aponta como solução de melhor caminho entre os produtos A e C o caminho A -> B ->C. No entanto, me parece ser um resultado equivocado. Dado os valores de probabilidade de conversão utilizados como heurística o melhor caminho não deveria ser A -> C? Apesar de o primeiro passo do A* identificar a escolha do caminho A -> B como mais vantajoso na primeira iteração do loop de avaliação de F(x), a partir da segunda iteração ele se torna mais custoso do que o caminho A -> C.

Sendo assim, existe falha no meu entendimento do funcionamento do A* ou na solução proposta?

1 resposta

Olá, Caina!

Muito obrigado pela sua pergunta. É uma excelente observação, e mostra que você está pensando de forma crítica sobre a aplicação do algoritmo, o que é fundamental para um bom engenheiro de software.

Para o algoritmo A*, o melhor caminho não é necessariamente o de menor custo total no final, mas sim aquele que, a cada iteração, tem a menor soma de f(n) = g(n) + h(n), onde:

  • g(n) é o custo real do caminho do ponto de partida até o nó atual.

  • h(n) é o custo estimado (a heurística) do nó atual até o destino.

Você está correto ao dizer que em um primeiro momento o caminho A -> B pode parecer mais vantajoso, mas é preciso analisar todos os passos da expansão do A*.

O algoritmo A* explora os nós com base na menor f(n). Se a soma dos custos (g(n) e h(n)) do caminho A -> B -> C for menor do que a do caminho A -> C em algum momento da exploração, o A* vai seguir por esse caminho. Pode ser que o custo real (g(n)) de A -> B seja pequeno, e a heurística (h(n)) de B -> C também seja baixa, fazendo com que a soma f(n) do caminho A -> B seja mais atrativa inicialmente, e ele continue por ali.

Se a solução apresentada no curso está em conflito com o seu entendimento, pode haver três motivos:

  1. A heurística (h(n)) não é admissível: Uma heurística admissível nunca superestima o custo real até o objetivo. Se a heurística usada no curso superestimou o custo de A -> C em algum ponto, o A* pode ter sido levado a escolher um caminho não ideal.

  2. A implementação do A possui um erro:* É possível que o código tenha alguma falha.

  3. A minha interpretação do problema está incorreta: Precisaria rever os valores de g(n) e h(n) para cada passo do algoritmo para confirmar qual caminho realmente seria o de menor custo.

O seu raciocínio está correto, e é o cerne do funcionamento do A*. A melhor forma de tirar a dúvida é refazendo a simulação do algoritmo passo a passo, calculando f(n) para cada nó expandido, para ver se os valores da solução do curso se sustentam. Se você puder compartilhar os valores de g(n) e h(n) usados no exemplo do instrutor, eu posso te ajudar a verificar.