11 Feb
Uma das estratégias de resolução algoritmica de problemas mais difíceis de ser aplicada, na minha opinião, é a programação dinâmica. Mas existem alguns truques que facilitam o desenvolvimento de algoritmos baseados nessa idéia.
A maior dificuldade de se usar este método é encontrar a poderosíssima fórmula de recorrência. Uma vez encontrada, o algoritmo está quase pronto. O problema é que, para encontrar a fórmula de recorrência, é preciso pensar recursivamente, afinal programação dinâmica é praticamente uma recursão memorizada.
Vejamos um exemplo: o jogo da velha (inspirado pelo Rafael Izbicki, que me enviou um jogo da velha). Como fazer a melhor jogada em um determinado momento? Uma solução possível é tentar todas as jogadas possíveis até o fim, usando recursão (a melhor jogada para agora é a que ganha supondo que meu adversário vai fazer a melhor depois da minha, e assim por diante), e então escolher uma que dê um bom resultado. Mas, sem guardar as contas, testaríamos muitas vezes as mesmas jogadas. Então por que não guardar todas as seqüências de jogadas possíveis? Se fizermos isso, podemos até manter uma base de dados com todas as melhores jogadas para cada situação.
Note que, podendo memorizar todos os resultados, basta executar o algoritmo apenas uma vez e já teremos todos os resultados. Sem memorização, além de calcular várias vezes as mesmas jogadas, teríamos que executar o algoritmo a cada jogada.
Lógico que nem todo caso é fácil de resolver que nem o exemplo acima. Mas a idéia fundamental por trás da programação dinâmica é a recursão. Então, quando surgir um problema para o qual você tem uma solução recursiva, veja se não é possível memorizar a recursão.
Veja mais exemplos aqui. Note que, em todos, a idéia é tentar dar um passo, ver o que acontece até o fim e aprender com o resultado.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
16 Jul
Neste Google Tech Talk, o Dr. Ben Goertzel explica suas visões de como o ramo de Inteligência Artificial deve ser explorado para alcançar o tão sonhado objetivo de criar programas com uma capacidade de aprendizado verossímil a de um ser humano.
Ele explica que devemos criar um “bebê” artificial que irá aprender as coisas mais básicas até crescer em capacidade e então aprender coisas mais sofisticadas. Para isso é necessário um ambiente que simule de forma muito aproximada a nossa realidade para que o programa aprenda coisas parecidas com o nosso próprio aprendizado. Ele sugerio o uso de ambientes 3D avançados, como o Second Life.
Esse assunto tem se tornado cada vez mais polêmico com o passar dos anos envolvendo não só questões ciêntificas para analisar como deve ser feito esse processo, mas também questões éticas e religiosas (se podemos imitar o cerebro humano se tivermos um espírito). Particularmente, penso que o objetivo de gerar um ser tão inteligente quanto o ser humano está ciêntificamente impedido pela nossa própria incapacidade de conhecer como o conhecimento deve ser aglutinado para formar conhecimentos superiores.
Hoje os algoritmos de Aprendizado Computacional tentam criar programas que aprendam novas coisas mas não os permite ser criativos ou encontrar a melhor solução, como nós somos capazes. Segundo Ian Millington, em seu livro Artificial Intelligence for Games, além desta incapacidade temos ainda que na maioria das vezes não podemos impedir que um algoritmo de Aprendizado Computacional aprenda coisas erradas (o que segundo o autor inviabiliza a larga utilização do mesmo em jogos).
De qualquer forma, sendo possível ou não o desenvolvimento de uma inteligência artificial tão avançada, vale dar uma olhada no video do Dr. Ben Goertzel. Você pode obter mais informações em KurzweilAI.net e Novamente.net.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.