Arthur O'Dwyer ae0434d910 codeletMethods.py: Replace some random.random()s with coinFlip().
There is a bugfix in here as well: one of the probabilities was
being taken the wrong way around. The result should have been to
make single-letter groups very often, I guess? Fixing this bug
doesn't show any change in Copycat's macro behavior, except that
it seems like average temperatures have gotten hotter.
2017-04-18 01:12:22 -07:00
2012-11-20 21:53:54 +00:00
2014-12-22 16:56:53 +00:00

co.py.cat

An implementation of Douglas Hofstadter's copycat algorithm. The copycat algorithm is explained on Wikipedia, and that page has many links for deeper reading.

This implementation is a copycat of Scott Boland's Java implementation, but re-written into Python. It's not a direct translation - but based on his code. I did not carry over the GUI, as this version can more usefully be run from command line, or imported for use by other Python scripts.

In cases where I could not grok the Java implementation easily I took ideas from the LISP implementation, or directly from Melanie Mitchell's "Analogy-Making as Perception"

I also tried to make the code more pythonic.

Installation

There are no particular installation instructions, just clone and run, e.g.

$ git clone https://github.com/jalanb/co.py.cat.git
$ cd co.py.cat/copycat
$ python main.py abc abd ijk

Running

The script takes three arguments. The first two are a pair of triplets with some change, for example "abc" and "abd". The third is a triplet which the script should try to change analogously

For example the following invocation will probably display "ijl"

$ python main.py abc abd ijk
Description
Open Source copycat (python)
Readme MIT 8.6 MiB
Languages
Python 75.7%
TeX 23.7%
Jupyter Notebook 0.6%