Uma implementação do algoritmo Copycat de Douglas Hofstadter. O algoritmo Copycat é explicado na Wikipedia, e essa página possui muitos links para uma leitura mais aprofundada. Veja também Farglexandria.
Esta implementação é uma cópia da implementação Java de Scott Boland. O trabalho original de tradução de Java para Python foi feito por J Alan Brogan (@jalanb no GitHub). A versão Java possui uma GUI semelhante ao Lisp original; esta versão do Python não possui código GUI integrado, mas pode ser incorporada em um programa GUI maior.
J. Alan Brogan escreve:
Nos casos em que não consegui entender a implementação Java facilmente, tirei ideias da implementação LISP ou diretamente do livro "Analogy-Making as Perception" de Melanie Mitchell.
Para clonar o repositório localmente, execute estes comandos:
$ git clone https://github.com/fargonauts/copycat.git
$ cd copycat/copycat
$ python main.py abc abd ppqqrr --iterations 10
O script leva três ou quatro argumentos. Os dois primeiros são um par de strings com algumas alterações, por exemplo "abc" e "abd". A terceira é uma string que o script deve tentar alterar de forma análoga. A quarta (cujo padrão é "1") é um número de iterações.
Isso pode produzir resultados como
ppqqss: 6 (avg time 869.0, avg temp 23.4)
ppqqrs: 4 (avg time 439.0, avg temp 37.3)
O primeiro número indica quantas vezes o Copycat escolheu aquela string como resposta; superior significa "mais óbvio". O último número indica a temperatura média final do espaço de trabalho; inferior significa "mais elegante".
Para instalar o módulo Python e começar a usá-lo, execute estes comandos:
$ pip install -e git+git://github.com/fargonauts/copycat.git#egg=copycat
$ python
>>> from copycat import Copycat
>>> Copycat().run('abc', 'abd', 'ppqqrr', 10)
{'ppqqrs': {'count': 4, 'avgtime': 439, 'avgtemp': 37.3}, 'ppqqss': {'count': 6, 'avgtime': 869, 'avgtemp': 23.4}}
O resultado da run
é um ditado contendo as mesmas informações impressas por main.py
acima.