Eine Implementierung des Copycat-Algorithmus von Douglas Hofstadter. Der Copycat-Algorithmus wird auf Wikipedia erklärt, und auf dieser Seite gibt es viele Links zum tieferen Lesen. Siehe auch Farglexandria.
Diese Implementierung ist eine Nachahmung der Java-Implementierung von Scott Boland. Die ursprüngliche Java-zu-Python-Übersetzungsarbeit wurde von J Alan Brogan (@jalanb auf GitHub) durchgeführt. Die Java-Version verfügt über eine GUI, die der des ursprünglichen Lisp ähnelt. Diese Python-Version verfügt über keinen integrierten GUI-Code, kann aber in ein größeres GUI-Programm integriert werden.
J. Alan Brogan schreibt:
In Fällen, in denen ich die Java-Implementierung nicht einfach verstehen konnte, habe ich Ideen aus der LISP-Implementierung oder direkt aus Melanie Mitchells Buch „Analogy-Making as Perception“ übernommen.
Führen Sie die folgenden Befehle aus, um das Repo lokal zu klonen:
$ git clone https://github.com/fargonauts/copycat.git
$ cd copycat/copycat
$ python main.py abc abd ppqqrr --iterations 10
Das Skript benötigt drei oder vier Argumente. Die ersten beiden sind ein Zeichenfolgenpaar mit einigen Änderungen, zum Beispiel „abc“ und „abd“. Der dritte ist eine Zeichenfolge, die das Skript analog zu ändern versuchen sollte. Die vierte (der Standardwert ist „1“) besteht aus einer Anzahl von Iterationen.
Dies kann zu einer Ausgabe wie z. B. führen
ppqqss: 6 (avg time 869.0, avg temp 23.4)
ppqqrs: 4 (avg time 439.0, avg temp 37.3)
Die erste Zahl gibt an, wie oft Copycat diese Zeichenfolge als Antwort ausgewählt hat. höher bedeutet „offensichtlicher“. Die letzte Zahl gibt die durchschnittliche Endtemperatur des Arbeitsbereichs an; niedriger bedeutet „eleganter“.
Führen Sie die folgenden Befehle aus, um das Python-Modul zu installieren und damit zu beginnen:
$ 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}}
Das Ergebnis von run
ist ein Diktat, das dieselben Informationen enthält, die oben von main.py
ausgegeben wurden.