Qual é a diferença entre uma heurística e um algoritmo?

103

Qual é a diferença entre uma heurística e um algoritmo?

Desfile de rua
fonte
3
consulte en.wikipedia.org/wiki/Heuristic_algorithm
Nick Dandoulakis
1
Se você olhar para um algoritmo heurístico como uma espécie de estrutura de árvore, acho que poderia chamá-lo de um algoritmo de propósito especial.
James P.
Uma heurística é um algoritmo que (provavelmente) não funciona.
JeffE

Respostas:

99

Um algoritmo é a descrição de uma solução automatizada para um problema . O que o algoritmo faz é definido com precisão. A solução pode ou não ser a melhor possível, mas você sabe desde o início que tipo de resultado obterá. Você implementa o algoritmo usando alguma linguagem de programação para obter (uma parte de) um programa .

Agora, alguns problemas são difíceis e você pode não conseguir obter uma solução aceitável em um tempo aceitável. Nesses casos, você geralmente pode obter uma solução não muito ruim muito mais rápido, aplicando algumas escolhas arbitrárias (suposições educadas): isso é uma heurística .

Uma heurística ainda é uma espécie de algoritmo, mas não explorará todos os estados possíveis do problema ou começará explorando os mais prováveis.

Os exemplos típicos são de jogos. Ao escrever um programa de jogo de xadrez, você pode imaginar tentar todos os movimentos possíveis em algum nível de profundidade e aplicar alguma função de avaliação ao tabuleiro. Uma heurística excluiria ramificações completas que começam com movimentos obviamente ruins.

Em alguns casos, você não está procurando a melhor solução, mas sim qualquer solução que se ajuste a alguma restrição. Uma boa heurística ajudaria a encontrar uma solução em um curto espaço de tempo, mas também pode falhar em encontrar nenhuma se as únicas soluções estiverem nos estados que ela escolheu não tentar.

Kriss
fonte
3
Outro uso comum da heurística é na detecção de vírus, em que você pode não ter certeza de que existe um vírus, mas pode procurar os principais atributos específicos de um vírus.
Dana Holt
Isso é verdade e para quebrar programas
streetparade
1
@kriss, então .. uma heurística é uma espécie de algoritmo.
Pacerier
1
@Pacerier: sim. É um algoritmo que ajuda a navegar no espaço de solução de um problema específico. Você também pode vê-lo como uma estratégia para modificar um algoritmo para torná-lo prático (um meta-algoritmo). Ainda é um algoritmo, todos os métodos são, e uma Heurística é definitivamente um método.
Kriss
33
  • Um algoritmo é tipicamente determinístico e comprovado para produzir um resultado ideal
  • Uma heurística não tem prova de correção, freqüentemente envolve elementos aleatórios e pode não produzir resultados ideais.

Muitos problemas para os quais nenhum algoritmo eficiente para encontrar uma solução ótima é conhecido têm abordagens heurísticas que produzem resultados quase ótimos muito rapidamente.

Existem algumas sobreposições: "algoritmos genéticos" é um termo aceito, mas, estritamente falando, são heurísticas, não algoritmos.

Michael Borgwardt
fonte
2
Eu não diria que se provou que um algoritmo produz um resultado ótimo: depende do algoritmo com relação a qual problema.
nbro
Produzir um resultado ideal não é a qualidade essencial dos algoritmos, é precisão, ou seja, o resultado exato, enquanto a heurística fornece resultados aproximados.
Marina Dunst
22

Heurística, em poucas palavras, é um "palpite educado". Wikipedia explica isso muito bem. No final, um método de "aceitação geral" é considerado uma solução ótima para o problema especificado.

Heurística é um adjetivo para técnicas baseadas na experiência que ajudam na resolução de problemas, aprendizado e descoberta. Um método heurístico é usado para chegar rapidamente a uma solução que se espera estar próxima da melhor resposta possível, ou 'solução ótima'. Heurísticas são "regras práticas", suposições fundamentadas, julgamentos intuitivos ou simplesmente bom senso. Uma heurística é uma maneira geral de resolver um problema. Heurística como substantivo é outro nome para métodos heurísticos.

Em termos mais precisos, heurísticas representam estratégias que usam informações facilmente acessíveis, embora vagamente aplicáveis, para controlar a solução de problemas em seres humanos e máquinas.

Enquanto um algoritmo é um método que contém um conjunto finito de instruções usadas para resolver um problema. O método foi comprovado matematicamente ou cientificamente para funcionar para o problema. Existem métodos e provas formais.

Algoritmo heurístico é um algoritmo que é capaz de produzir uma solução aceitável para um problema em muitos cenários práticos, na forma de uma heurística geral, mas para o qual não há prova formal de sua correção.

Buhake Sindi
fonte
8

Um algoritmo é um conjunto de operações passo a passo autocontido a ser realizado 4 , normalmente interpretado como uma sequência finita de instruções (de computador ou humano) para determinar uma solução para um problema, como: há um caminho de A para B, ou qual é o menor caminho entre A e B. No último caso, você também pode ficar satisfeito com uma solução alternativa 'razoavelmente próxima'.

Existem certas categorias de algoritmos, das quais o algoritmo heurístico é uma delas. Dependendo das propriedades (comprovadas) do algoritmo, neste caso, ele se enquadra em uma dessas três categorias (nota 1):

  • Exato : a solução provou ser ótima (ousolução exata ) para o problema de entrada
  • Aproximação : o desvio do valor da solução provou nunca estar mais longe do valor ideal do que algum limite predefinido (por exemplo, nunca mais do que 50% maior do que o valor ideal)
  • Heurística : o algoritmo não provou ser ideal, nem dentro de um limite predefinido da solução ideal

Observe que um algoritmo de aproximação também é uma heurística, mas com a propriedade mais forte de que há um limite comprovado para a solução (valor) que ele produz.

Para alguns problemas, ninguém jamais encontrou um algoritmo 'eficiente' para calcular as soluções ótimas (nota 2). Um desses problemas é o conhecido Problema do Caixeiro Viajante. O algoritmo de Christophides para o Problema do Caixeiro Viajante, por exemplo, costumava ser chamado de heurística , pois não foi comprovado que estava a 50% da solução ótima. Uma vez que foi provado, entretanto, o algoritmo de Christophides é mais precisamente referido como um algoritmo de aproximação.

Devido às restrições sobre o que os computadores podem fazer, nem sempre é possível encontrar com eficiência a melhor solução possível. Se houver estrutura suficiente em um problema, pode haver uma maneira eficiente de percorrer o espaço da solução, mesmo que o espaço da solução seja enorme (ou seja, no problema do caminho mais curto).

As heurísticas são normalmente aplicadas para melhorar o tempo de execução dos algoritmos, adicionando 'informações de especialistas' ou 'suposições fundamentadas' para orientar a direção da pesquisa. Na prática, uma heurística também pode ser uma sub-rotina para um algoritmo ideal, para determinar onde olhar primeiro .

(nota 1) : Além disso, os algoritmos são caracterizados por incluírem elementos aleatórios ou não determinísticos. Um algoritmo que sempre executa da mesma maneira e produz a mesma resposta é chamado de determinístico.

(nota 2) : Isso é chamado de problema P vs NP, e os problemas classificados como NP-completos e NP-difíceis provavelmente não terão um algoritmo 'eficiente'. Nota; como @Kriss mencionou nos comentários, existem tipos de problemas ainda 'piores', que podem precisar de tempo ou espaço exponencial para serem computados.

Existem várias respostas que respondem a parte da pergunta. Eu os considerei menos completos e não precisos o suficiente, e decidi não editar a resposta aceita por @Kriss

Joost
fonte
Eu acredito que sua definição da palavra algoritmo é muito restritiva. O uso da palavra sequência implica não paralela? Algoritmos paralelos são bons e até comuns hoje em dia. Que tal resolver um problema usando uma rede neural? Ou uma ferramenta de propagação de restrição? Algoritmos? Meta-algoritmos?
Kriss
O leitor tem a sensação de que os problemas de NP são os piores que existe. Isso não é verdade. Existem problemas realmente difíceis que precisam de algoritmos realmente ruins, como os exponenciais ou pior. NP são especiais porque se temos uma solução é fácil e rápido verificá-la, ao passo que é muito difícil encontrá-la se ainda não a tivermos. É fácil verificar se temos instruções corretas para sair de um labirinto, é muito mais difícil encontrar a saída. Assim, NP são fáceis e difíceis se pudéssemos tentar todas as soluções possíveis ao mesmo tempo (não deterministicamente) resolvê-lo seria muito simples ... mas não podemos.
kriss de
Obrigado pelo feedback! Atualizei um pouco o fraseado e o abordei de maneira diferente. Em minha opinião, a propagação de restrição é uma técnica para abordar algo, mas ainda não é um algoritmo que descreve como chegar passo a passo à solução descrita na propagação de restrição. É claro que você está correto sobre as classes de expspace e 'pior', acrescentei uma nota sobre isso. BTW: por favor escreva NP-Completo e / ou NP-Difícil totalmente, pois o subconjunto de NP também contém problemas solucionáveis ​​'eficientemente', que não são (supostamente) a mesma classe.
Joost de
Claro que você está certo, eu deveria ter escrito NP-Completo. Foi mal.
Kriss de
É muito melhor do que o nome de um dos meus colegas: NP-ness (que soa simplesmente horrível e meio nojento ...)
Joost
6

Na verdade, não acho que haja muito em comum entre eles. Alguns algoritmos usam heurísticas em sua lógica (geralmente para fazer menos cálculos ou obter resultados mais rápidos). Normalmente, heurísticas são usadas nos chamados algoritmos gulosos.

Heurística é algum "conhecimento" que supomos ser bom usar a fim de obter a melhor escolha em nosso algoritmo (quando uma escolha deve ser feita). Por exemplo ... uma heurística no xadrez poderia ser (sempre pegue a rainha do oponente se puder, pois você sabe que esta é a figura mais forte). As heurísticas não garantem que você chegará à resposta correta, mas (se as suposições estiverem corretas) geralmente obtém respostas próximas da melhor em um tempo muito menor.

anthares
fonte
4

As heurísticas são algoritmos, portanto, nesse sentido, não há nenhum; no entanto, as heurísticas fazem uma abordagem de "suposição" para a solução de problemas, produzindo uma resposta "boa o suficiente", em vez de encontrar uma solução "melhor possível".

Um bom exemplo é quando você tem um problema muito difícil (leia NP-completo) para o qual deseja uma solução, mas não tem tempo para chegar a ele, então tem que usar uma solução boa o suficiente com base em um algoritmo heurístico, como encontrar uma solução para um problema de caixeiro viajante usando um algoritmo genético.

dsm
fonte
4

Algoritmo é uma sequência de algumas operações que, dada uma entrada, calcula algo (uma função) e produz um resultado.

O algoritmo pode produzir valores exatos ou aproximados.

Ele também pode calcular um valor aleatório com alta probabilidade próximo ao valor exato.

Um algoritmo heurístico usa algumas dicas sobre os valores de entrada e não calcula o valor exato (mas pode estar próximo do ideal). Em alguns casos especiais, a heurística pode encontrar a solução exata.

Slava
fonte
3

Um Algoritmo é um conjunto de instruções claramente definido para resolver um problema. A Heurística envolve a utilização de uma abordagem de aprendizagem e descoberta para chegar a uma solução.

Portanto, se você sabe como resolver um problema, use um algoritmo. Se você precisa desenvolver uma solução, então é a heurística.

Lázaro
fonte
2

Uma heurística geralmente é uma otimização ou estratégia que geralmente fornece uma resposta boa o suficiente, mas nem sempre e raramente a melhor resposta. Por exemplo, se você fosse resolver o problema do caixeiro viajante com força bruta, descartar uma solução parcial uma vez que seu custo exceda o da melhor solução atual é uma heurística: às vezes ajuda, outras vezes não, e definitivamente não para melhorar o tempo de execução teórico (notação big-oh) do algoritmo

IVlad
fonte
2

Eu acho que Heurística é mais uma restrição usada no Modelo Baseado em Aprendizagem em Inteligência Artificial, uma vez que os estados da solução futura são difíceis de prever.

Mas então minha dúvida depois de ler as respostas acima é "Como a heurística pode ser aplicada com sucesso usando técnicas de otimização estocástica? Ou elas podem funcionar como algoritmos completos quando usados ​​com otimização estocástica?"

http://en.wikipedia.org/wiki/Stochastic_optimization

A_tanA
fonte
oops !! erro de grafia deveria ser "Inteligência Artificial"
A_tanA
2

Uma das melhores explicações que li vem do ótimo livro Code Complete , que agora cito:

Uma heurística é uma técnica que o ajuda a encontrar uma resposta. Seus resultados estão sujeitos ao acaso porque uma heurística diz a você apenas como olhar, não o que encontrar. Não ensina como ir diretamente do ponto A ao ponto B; ele pode nem saber onde estão os pontos A e B. Com efeito, uma heurística é um algoritmo em um traje de palhaço. É menos previsível, é mais divertido e vem sem garantia de reembolso de 30 dias.

Aqui está um algoritmo para dirigir até a casa de alguém: Pegue a rodovia 167 para o sul até Puy-allup. Pegue a saída South Hill Mall e dirija 7,2 km colina acima. Vire à direita no semáforo do supermercado e depois na primeira à esquerda. Vire na garagem da grande casa bronzeada à esquerda, em 714 North Cedar.

Aqui está uma heurística para chegar à casa de alguém: Encontre a última carta que enviamos para você. Dirija até a cidade no endereço do remetente. Quando você chegar à cidade, pergunte a alguém onde fica nossa casa. Todo mundo nos conhece - alguém ficará feliz em ajudá-lo. Se você não conseguir encontrar ninguém, ligue para nós de um telefone público e iremos buscá-lo.

A diferença entre um algoritmo e uma heurística é sutil, e os dois termos se sobrepõem um pouco. Para os fins deste livro, a principal diferença entre os dois é o nível de indireção da solução. Um algoritmo fornece as instruções diretamente. Uma heurística informa como descobrir as instruções por si mesmo ou, pelo menos, onde procurá-las.

Edwin Dalorzo
fonte
Afirmar que existe uma diferença entre um algoritmo e uma heurística é como afirmar que existe uma diferença entre um pássaro e uma galinha. Heurísticas são um tipo de algoritmo.
Joost
0

Eles encontram uma solução subótimamente sem qualquer garantia quanto à qualidade da solução encontrada, é óbvio que faz sentido o desenvolvimento de heurísticas apenas polinomiais. A aplicação desses métodos é adequada para resolver problemas do mundo real ou grandes problemas tão incômodos do ponto de vista computacional que para eles não existe nem mesmo um algoritmo capaz de encontrar uma solução aproximada em tempo polinomial.

kafka
fonte