Miscellaneous topics in Conway's Game of Life -- unfinished projects of all kinds and conditions

09 September 2006

Brice Due's Game-of-Life Metapixel -- Sample Patterns

Here are a few sample screenshots showing "metapatterns" created using Brice Due's new Conway's Life metacell and displayed with Golly 1.0. Click on the images to see them at full size:
Download this file


Download this file



A metacell is a large pattern that "simulates" a single cell in Conway's Game of Life or another similar CA rule; that is, when a grid of metacells is run for the right number of ticks -- one "metatick", so to speak -- a metacell will turn ON or OFF according to the rules it's programmed to follow, just as a single cell does.

David Bell's original unitcell was the first example of a metacell, followed by Jared Prince's modification which allowed multiple independent cell states in a single "Deep Cell". Both of these unitcells were hard-coded to simulate only the Conway's Life rule (which is also the only rule that allows the patterns to function.)

One of these days, Brice Due will probably get around to finishing the work of documenting his recent OTCAMP [Outer Totalistic Cellular Automaton Meta-Pixel] construction, which showed up as a star feature of the Golly 1.0 pattern collection. This new 2048-cell-square pattern is capable of acting like a single CA cell following any "outer totalistic" rule -- i.e., birth and survival can be programmed to depend on any combination of number of ON neighbors, from zero to eight, in the metacell's immediate neighborhood. The official OTCAMP weblog describes the new signal-processing technology (mostly period 46) included in the construction.

But the most impressive feature is the "metapixel" behavior: where Bell's and Prince's designs relied on a single glider in a particular spacetime location to signal an ON or OFF state for the metacell, Brice's metapixel quickly switches rows and columns of LWSSs on and off across a large area -- so the state of a metacell can be seen even when a viewer is zoomed out so far that it's impossible to distinguish individual circuit elements, let alone single cells.

The effect is that Golly can run a large metapixel pattern at surprisingly high speeds (after some initial warmup time to build up the hash table) -- and if the zoom level is high enough to show the whole metapattern, the effect is fairly similar to watching a regular pattern in a conventional Life player. When I started zooming in for the first time, the effect was thoroughly jaw-dropping -- it takes several successive magnifications before the individual components become visible.

The OTCAMP weblog is currently [as of 2/5/2007] a work in progress, and since Brice is also working on another very interesting Game-of-Life project (reworking Paul Callahan's 'ptbsearch' signal-conduit search program) I don't want to distract him... so I figured I'd make the ON and OFF metapixel patterns available here, along with a few pictures and sample metapatterns -- just in case anyone wanted to look at some of the metapatterns that didn't make it into the Golly "top-100" collection.

A full archive of the metapatterns Brice sent me, plus one or two that I generated myself with a Golly Python script (metafier.py, now included in the Golly 1.1 Scripts folder), can be downloaded from http://cranemtn.com/life/weblog/metablog.tar.gz. And here are the base patterns from which any metapattern in any outer totalistic rule can be composed -- a single OFF cell and a single ON cell. Notes on programming these metacells to simulate any rule of the form B??/S?? [each cell's birth and survival depending on the number of ON cells in its eight-cell neighborhood] can be found in the comments of the OFF and ON cells; I've also reproduced the header at the bottom of this posting.

Here's a detail from a metapattern made out of copies of Jason Summers' p156 gun:
B3/S23 p156 sigma-guns metapattern detail
Download this file or click on it to see a full-sized image.

Here's a detail of one particularly interesting phase of the p156 tiling:
detail of p156 geometric design



Here's a sample metapattern showing what happens when the tiles are programmed to run the B1/S1234568 rule instead of B3/S23:B1-S1234568 tree metapattern
Download this file to open it in Golly, or click on the image to see a full-sized screenshot. Detail after the pattern runs several metacycles:
B1-S1234568 tree metapattern detail



Here are a couple of simple B3/S23 patterns, generated with the Golly 'metafier' script (left) and Brice's original Perl script (right), showing what metapixels look like at various scales. The Perl script works on HistoricalLife three-state rule patterns from MCell 4.20, so the presence or absence of a metapixel cell can be used to denote the third state -- a "history" state that is used for cells that are currently OFF but have been ON in the past:





Here's an MWSS -- a middle-weight spaceship from Conway's Life, B3/S23 -- made out of metapixel tiles. However, the tiles are programmed to simulate a completely different rule, B3-S12345, which uses the MWSS as a seed for an expanding maze pattern: MWSS maze metapattern starting detail
Download this file

Here's the same pattern after it has run for a few hundred meta-generations:


Header (slightly modified) for metapixel ON and OFF base tiles:



------------------------------------------------------------------
OTCAmetapixel unit cell by Brice Due (fall 2005 - spring 2006). For info, base patterns, and a perl script to automate tilings, see b3s23life.blogspot.com/2006/09/brice-dues-game-of-life-metapixel.html

Both ON and OFF tiles must be programmed identically before tiling a model pattern. See below for programming instructions.
------------------------------------------------------------------
OTCAmetapixel tilings require Golly hashlife to run. Get Golly at http://golly.sourceforge.net

USAGE: Speed steps 8^3 - 8^6 are good. Be patient after changing the speed step; the hashlife cache needs time to warm up. Try increasing the maximum hash memory setting if the meta-pattern continues to run haltingly.
------------------------------------------------------------------
OTCAmetapixel = Outer Totalistic Cellular Automata Meta Pixel = OTCAMP

Period: p35328 = 2^9 * 3 * 23
Dimensions: 2048x2048 but physically 2058x2058 (see TILING below)
Pixel Area: 1720x1720 = 70% of the tile area
Duty Cycle: 90% (1720 / lwss c/2 = 3440 gens to transition pixel display)

TILING: To tile by hand, place tiles so that the cornermost blocks overlap. The tiles will physically overlap by 5 cells in every direction. The overlap will place tubs inside cross-corner neighbors. When tiling by script the tiles can be trimmed to 2048x2048 and the corner blocks and tubs removed. But the script MUST place the tubs inside cross-corner neighbor tiles.

PROGRAMMING: There are three different programmings. Two must be done explicitly by the user while the third is done implicitly during tiling.

B/S RULE: Any outer totalistic rule can be programmed. The lookup tables in the SW corner of the tile are in the familiar B/S format. The presence of an eater denotes membership of {B,S}n within the active rule set. To aid programming by hand, defective eaters have been placed at all 18 positions. These defective eaters burn cleanly. Thus, programming a rule is as simple as completing the eaters at the desired positions within the lookup tables. The lookup tables have been graphically annotated to make things clear. (Note: to study a single tile, program the rule B0/S = B0/Snone.)

CONNECTIVITY: There are eight glider output channels {NW, N, NE, E, SE, S, SW, W}. These channels are initially closed by eaters. The physical presence of a neighbor tile will trigger the appropriate proximity fuses and open the necessary glider channels. This programming is done automatically when tiles are placed.

NEIGHBORHOOD: Any subset of a Moore neighbrhood can be programmed. Initially there are 8 active proximity fuses {NW, N, NE, E, SE, S, SW, W}. Disabling a fuse results in that glider *output* channel remaining permanently closed. To disable the corner fuses, remove the lwss for that corner. To disable edge fuses, remove the block in the middle of that edge. Do not remove the eater near the block. For example, a von Neumann neighborhood is programmed by disabling the four corner fuses, leaving the four edge fuses active.

No comments: