Douglas Hofstadter の Copycat アルゴリズムの実装。 Copycat アルゴリズムについては Wikipedia で説明されており、そのページにはさらに深く読むためのリンクが多数あります。ファーグレキサンドリアも参照。
この実装は、Scott Boland の Java 実装の模倣です。オリジナルの Java から Python への翻訳作業は、J Alan Brogan (GitHub の @jalanb) によって行われました。 Java バージョンには、オリジナルの Lisp に似た GUI があります。この Python バージョンには GUI コードが組み込まれていませんが、より大きな GUI プログラムに組み込むことができます。
J・アラン・ブローガンは次のように書いています。
Java 実装を簡単に理解できない場合は、LISP 実装からアイデアを取り入れたり、Melanie Mitchell の著書「Analogy-Making as Perception」から直接アイデアを取り入れたりしました。
リポジトリのクローンをローカルに作成するには、次のコマンドを実行します。
$ git clone https://github.com/fargonauts/copycat.git
$ cd copycat/copycat
$ python main.py abc abd ppqqrr --iterations 10
スクリプトは 3 つまたは 4 つの引数を取ります。最初の 2 つは、「abc」と「abd」など、何らかの変更を加えた文字列のペアです。 3 番目は、スクリプトが同様に変更しようとする文字列です。 4 番目 (デフォルトは「1」) は反復回数です。
これにより、次のような出力が生成される場合があります。
ppqqss: 6 (avg time 869.0, avg temp 23.4)
ppqqrs: 4 (avg time 439.0, avg temp 37.3)
最初の数字は、Copycat がその文字列を答えとして選択した回数を示します。高いということは「より明白な」という意味です。最後の数字は、ワークスペースの最終的な平均温度を示します。低いということは「よりエレガントな」という意味です。
Python モジュールをインストールして使用を開始するには、次のコマンドを実行します。
$ 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}}
run
の結果は、上記のmain.py
によって出力されたものと同じ情報を含む dict です。