Una implementación del algoritmo Copycat de Douglas Hofstadter. El algoritmo Copycat se explica en Wikipedia y esa página tiene muchos enlaces para una lectura más profunda. Véase también Farglexandria.
Esta implementación es una copia de la implementación Java de Scott Boland. El trabajo de traducción original de Java a Python fue realizado por J Alan Brogan (@jalanb en GitHub). La versión Java tiene una GUI similar a la del Lisp original; Esta versión de Python no tiene código GUI incorporado, pero se puede incorporar a un programa GUI más grande.
J. Alan Brogan escribe:
En los casos en los que no podía asimilar fácilmente la implementación de Java, tomé ideas de la implementación de LISP o directamente del libro de Melanie Mitchell "Analogy-Making as Perception".
Para clonar el repositorio localmente, ejecute estos comandos:
$ git clone https://github.com/fargonauts/copycat.git
$ cd copycat/copycat
$ python main.py abc abd ppqqrr --iterations 10
El guión lleva tres o cuatro argumentos. Los dos primeros son un par de cadenas con algún cambio, por ejemplo "abc" y "abd". La tercera es una cadena que el script debería intentar cambiar de manera análoga. El cuarto (que por defecto es "1") es una serie de iteraciones.
Esto podría producir resultados como
ppqqss: 6 (avg time 869.0, avg temp 23.4)
ppqqrs: 4 (avg time 439.0, avg temp 37.3)
El primer número indica cuántas veces Copycat eligió esa cadena como respuesta; más alto significa "más obvio". El último número indica la temperatura final promedio del espacio de trabajo; más bajo significa "más elegante".
Para instalar el módulo Python y comenzar con él, ejecute estos 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}}
El resultado de run
es un dict que contiene la misma información que imprimió main.py
arriba.