Qual é a diferença entre uma heurística e um algoritmo?
Qual é a diferença entre uma heurística e um algoritmo?
Respostas:
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.
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.
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.
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):
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
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.
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.
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.
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.
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
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?"
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.
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.