Intro

This project was inspired by Joshua Klein's Crow Box, a self-described "experimentation platform designed to autonomously train corvids." However, as various biologists/corvid researchers pointed out, this project's lack of results while working with wild birds was due in large part to the fact that crows, in all their intelligence, couldn't be bothered to expend energy solving puzzles in order to get small payouts of food when they could just as well hunt around elsewhere for their usual sources of calories that were both easily accessible and plentiful. To its credit, the Crow Box was proven to be successful with captive birds as food options were inherently restricted. Because I don't have pet corvids, which require specialized licenses to keep and in all honesty don't make great pets  (Peter Caine succinctly explains why here and here [heads-up: strong language]), I decided to build a similar project for training my cat and learning more about cat intelligence.

After doing research on similar efforts as well as cat intelligence I learned several things that further motivated this specific project: 

First of all, not a whole lot of research has been done about domestic cats in general. Relative to the amount of experiments/studies done on dogs there are a lot fewer papers that I could draw on when designing learning progressions for the domestic cat. As any cat owner reading this may have already guessed, this seems to be due, in part, to the fact that as experiment participants cats can be hard to work with and tend to "drop out" of studies. Unlike dogs who can enthusiastically drill a target behavior during training over and over, cats do better when trained consistently for much shorter intervals where cues are extra clear, they are set up for success from the start, and smaller steps in complexity are taken as their behavior is shaped toward the target. 

Second of all, the historic domestication of cats came about much more passively (and recently) than it did for dogs. While dogs were quite early on bred for specific roles: hunting, searching, herding with a specific focus on intelligence, etc., cats were valued initially for behaviors similar to those that they had while wild (e.g. by "just doing their thing" cats were killing mice and protecting grain stores for example). Additionally, even when the breeding of cats became more rigorous and intentional it was, and still is, all but completely focused on appearance and general domesticity alone. Because of this, cat intelligence hasn't been as carefully documented or selected for. We really don't have a good understanding of the cognitive limits and abilities of cats at the species level, let alone across breeds and individuals.

Lastly, I came across a propriety product that markets itself as a game console designed to stimulate pets mentally as well as teach them to solve challenges (CleverPet) that was exactly what I was looking for. Unfortunately, it is somewhat cost prohibitive for many including myself. For a much, much, smaller cost I think any tinkerer can build something similarly effective, especially if it's developed openly and allows for each and every parameter to be optimally tweaked and fine-tuned to the needs and abilities of an individual pet. 

Arduino Cat Console Prototype: The Cat Box

The console is still being actively developed but so far it's basic functionality is as follows: 

Once powered up, a start screen is displayed until the input button is pressed. Pressing the button additional times will cycle through the available stages and repeatedly start a short timer (visualized with a loading bar) until timeout confirms your selection. A short delay occurs before symbols are shown on the LED matrix. The initial delay, symbols to be displayed, max duration a symbol is shown, the fixed or randomly varied wait time between symbols, which symbol is rewarded, etc. are currently set to defaults but should be played around with to adapt the learning progression to the observed cats' abilities and performance. As the stage runs, the LCD screen displays the number of treats remaining (as a health bar) , the moving average response time for successful hits, the number of misses (the count of rewarded symbols that timed out without a response), the number of wrong responses (the count of times when a click was made during a non-rewarded symbol, if any), and the number of whiffs (the count of clicks when no symbol was even displayed at all). Finally, if all the treats are consumed, an animated win screen is shown on the LCD with the total time it took to complete the stage. 

Active tasks that I am working on currently and would love help with:

Game Stages

Currently, only a few stages are complete. Below is the descriptions of what's been done so far and the general outline of how the learning progression is currently structured. I just copied this from the GitHub repository linked in this project, please check there for the most recent updates and activity. 

Stage 1 [Complete]

Purpose: Get the cat used to operating the machine.

Description: A simple 'X' is shown, near constantly, and each successful press while the 'X' is illuminated is rewarded with a treat. (I say ‘near constantly’ because the LED matrix is cleared temporarily during motor operation/when extraneous inputs are blocked after a successful button press).

Rationale: For this to go anywhere the cat must first learn that a pushing of the button, specifically when a symbol is displayed, is rewarded. I chose to start with the 'X' because I thought perhaps it was the slightly more distinguishable starting point.

Stage 2 [Complete]

Purpose: Help the cat learn to wait for the LED display.

Description: The same simple ‘X’ is shown for a set time (e.g. three seconds max without a response) before getting cleared for a set period (e.g. five seconds). Only successful clicks made while the ‘X’ is displayed are rewarded.

Rationale: The cat must also learn that the button isn’t just a wand for summoning snacks and is in actuality associated with the LED matrix display, specifically this repeated symbol ‘X.’

Stage 3.A [Benched]

Purpose: Introduce random timing earlier to the learning process.

Description: The same basic conditions as Stage 2, however the wait time in between displays is now a random variable that is normally distributed (Two parameters, maybe the mean is kept at the previous wait time (e.g. 5 seconds) and the standard deviation is played with to generate desired variability.

Rationale: This should be an easy transition from the previous stage and strengthens the association between successful button presses and the LED display independent of timing.

Stage 3.B [Complete]

Purpose: Introduce symbol discrimination earlier to the learning process.

Description: The same display/wait times as Stage 2 (e.g. 3 seconds/5 seconds), but there is a random (50-50) chance that either an ‘X’ or an ‘O’ is displayed. Only button presses when the ‘X’ is shown will be rewarded.

Rationale: This demonstrates that not all LED displays are equal and this first challenge in symbol discrimination is perhaps aided by the previously learned timing regularity (assuming that the cat picked up much on the regularity of wait times in the first place, likely a negligible influence).

Stage 4

Purpose: Train discrimination between two symbols shown at random, with random wait times between display events.

Description: At random either an ‘X’ or ‘O’ is shown for the previous set times with random wait times in between. Only button presses when the ‘X’ is shown will be rewarded.

Rationale: This the natural progression from either option A or B for Stage 3, where both display unpredictability and discrimination are now at play. Whether Stage 3.A or 3.B is a better intermediate isn’t immediately clear and depends on whether we think introducing random wait times or symbol discrimination earlier (and in isolation) would be a more helpful learning progression.

Ideas for Additional Stages

A Note On Parts/The Basic Physical Build

Due to the lockdown I did not have access to the local maker space and therefore most of the tools/3D printing capabilities that would of made this something I could've built in a day instead of the week and a half it actually took. I had to scavenge things from around the house and get all the precision I could out of a metal ruler, scissors, wood glue, duct tape, and a utility knife while trying more than a few times to build a successfully working version of what I needed using material out of the recycling bin. A few of the solutions I came up with (beyond the Arduino kit components I had on hand to use):