A distância de Manhattan é monotônica quando usada como função heurística?


25

Eu tenho um mapa quadrado. Somente movimentos horizontais e verticais são permitidos (sem diagonais). O custo do movimento é sempre 1.

Estou implementando um algoritmo A * nesse mapa, usando a distância de Manhattan como uma heurística de distância. Essa heurística é consistente? Posso evitar a verificação g(node)nos nós que estão no conjunto FECHADO?

Edit: Por consistente eu quero dizer monotônico.


11
Se o seu custo de movimento é uniforme em cada telha, você poderia substituir A * com Ir Ponto Pesquisa
— Nick Caplinger

Ei, isso é legal!
— Emiliano

Respostas:


10

Para realmente responder à sua pergunta: a distância do manhatten é consistente quando você é obrigado a se deslocar vertical / horizontalmente ao longo de uma grade não ponderada (isso pode ser facilmente mostrado pela definição na wikipedia) . Portanto, sim, no seu caso, você pode evitar verificar novamente os nós no conjunto fechado.

No entanto, depois de permitir o movimento diagonal ou de qualquer ângulo, a distância de manhatten torna-se inadmissível porque superestima os custos diagonais, o que significa necessariamente que não é consistente.


Sim, esse é exatamente o tipo de resposta que eu estava procurando. Seria bom saber o que acontece se a função heurística for h(x) = min(manhattan(p1), manhattan(p2))(ou seja, p1 ou p2 são um bom ponto final e eu quero chegar ao mais próximo). Isso h(x)ainda é monotônico?
— Emiliano

11
@happy_emi: Sim, se h(x, p1)e h(x, p2)são consistentes, min(h(x,p1), h(x,p2))também será consistente. Isso é fácil de mostrar a partir da definição na wikipedia (precisaríamos mostrar isso min(h(x, p1), h(x, p2)) <= distance(x,y) + min(h(y, p1), h(y, p2))para todos os nós xe ycom uma borda entre eles. Agora suponha que h(x, p1)seja o mínimo; você pode mostrar que é definitivamente <=o lado direito, usando o fato de que as duas heurísticas são consistentes?)
— BlueRaja - Danny Pflughoeft 6/06

31

Sim, a distância de Manhattan entre dois pontos é sempre a mesma, assim como a distância regular entre eles. Você pode pensar na distância de Manhattan como sendo os componentes X e Y de uma linha que corre entre os dois pontos.

Esta imagem ( da Wikipedia ) ilustra bem isso:

Distâncias de Manhattan

A linha verde é a distância real.

As linhas azul , vermelha e amarela representam a mesma distância de Manhattan (12 unidades). Não importa qual combinação de movimentos para cima e para a direita você desenhe do ponto inferior esquerdo para o canto inferior direito, você terá a mesma distância total de Manhattan.


2
Ótima resposta: curta, doce, objetiva e com uma foto bonita.
— Tom 'Blue' Piddock

11
Esta resposta está próxima, mas incorreta. Esta imagem não mostra que a distância de Manhattan é consistente (na verdade, se você considerar a linha verde como a distância, ela não é consistente!) , E o raciocínio de que ele não precisa verificar novamente os nós porque "a distância de Manhattan entre dois pontos é sempre o mesmo " não se aplica (a afirmação também é verdadeira h(x) = 1000, o que obviamente não é consistente) . Ele pode evitar verificar novamente os nós, mas apenas porque a distância de Manhatten é consistente, o que esta resposta não mostra.
— BlueRaja - Danny Pflughoeft

2
Acredito que, pela definição que você vinculou, a distância de Manhattan é consistente. A distância da linha verde usaria uma heurística diferente. As linhas vermelha, azul e amarela mostram que a distância entre os dois nós permanece a mesma (ao usar a mesma heurística). Aproximar-se reduz a heurística e se afastar aumenta a heurística. Isso atende aos requisitos monotônicos do OP. À medida que o gráfico é construído, com um nó em cada "interseção", a distância de Manhattan é consistente. Se fosse um cenário diferente (como permitir movimento diagonal), a heurística seria ruim.
— MichaelHouse

2
Eu já disse que a distância de Manhatten é consistente, mas não pelos motivos mencionados. Sua resposta não mostra consistência, nem seu argumento nos comentários. "Heurística consistente / monótona" tem uma definição precisa (fornecida no meu link acima) , que não é o mesmo que uma função monotônica que você parece estar confundindo. Declarar "aproximar-se reduz a heurística e afastar-se aumenta a heurística" não é suficiente para mostrar que é consistente, por exemplo. 2*manhattensatisfaz isso, mas não é consistente.
— BlueRaja - Danny Pflughoeft

3
Não sei por que você diz que está incorreto , parece estar insistindo que esta resposta está incompleta . A prova em sua resposta parece ser igualmente fraca: "a distância do manhatten é consistente ...", você reitera as especificações originais da pergunta, seguindo como seria admissível se o cenário fosse diferente . Não achei que a resposta justificasse uma prova matemática completa. Se você acha que essa pergunta exige isso, inclua-a na sua resposta e votarei em seguida. Obrigado pela crítica construtiva.
— MichaelHouse

6

Como extensão da resposta de Byte56, gostaria de salientar que, em seu conjunto de dados específico, usar a Distância de Manhattan como sua função heurística será sempre uma heurística perfeita, no sentido em que sempre retornará o custo real do caminho (supondo que exista nada "bloqueando" os caminhos).

Você também deve observar que todos os nós na direção correta (horizontal ou verticalmente) produzirão a mesma distância esperada (porque existem muitos caminhos igualmente curtos para a meta). Você deve estar ciente de que sua fila de prioridades (conjunto aberto) deve, em caso de prioridades vinculadas, remover da fila o nó adicionado mais recente primeiro (LIFO - Último a entrar, primeiro a sair). Ao fazer isso, você examinará apenas os nós que terminarão no caminho ideal . Se você examinar nós igualmente adequados da maneira FIFO (primeiro a entrar, primeiro a sair), estará examinando efetivamente todos os nós que fazem parte do melhor caminho. Esse problema surge porque existem vários caminhos igualmente bons para o nó da meta.


"(assumindo que não há nada bloqueando o caminho)" - essa é uma suposição bastante grande. Se não há nada bloqueando o caminho, não há necessidade de um algoritmo para encontrar o caminho!
— BlueRaja - Danny Pflughoeft

@ BlueRaja-DannyPflughoeft: Isso é verdade, foi apenas um pensamento aparecendo ao olhar para a imagem do Byte56. O resto é verdade, no entanto.
— Thorkil Holm-Jacobsen

4

Não tenho certeza do que você quer dizer com "sempre" consistente. A distância de Manhattan em uma grade fixa é independente do caminho percorrido? Sim, como a resposta do Byte56 disse.

No entanto, por exemplo, a distância de Manhattan não é invariável em rotações. Por exemplo, a distância de Manhattan ( norma L1 ) entre a origem e um ponto (10,10)é |10-0| + |10-0| = 20. No entanto, se você girar suas coordenadas em 45 graus (agora o seu ponto fixo fica ao longo de uma das direções da grade), agora você encontrará o mesmo ponto agora (10sqrt(2),0), então há uma distância de Manhattan até a origem de 10sqrt(2)~14.14.


+1 por apontar isso; OTOH, a distância de Manhattan é invariável em rotações de 90 graus, que são realmente as únicas que podem ser feitas 'consistentemente' em uma grade discreta.
— Steven Stadnicki

11
Boa captura, embora ele tenha mencionado que apenas movimentos horizontais e verticais são permitidos.
— Thorkil Holm-Jacobsen

11
A pergunta original era consistente como em monotônica.
— Emiliano
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.