Overview
Golly and LifeViewer support defining cellular automata using weighted neighbourhoods ("NW..."): https://golly.sourceforge.io/Help/Algor ... l#weighted
Instead of simply counting alive neighbours, here every neighbour gets an integer weight. (Currently, every weight must be less than 128, to be able to run the CA in Golly/LifeViewer.)
To compute the condition of a cell, weights of all alive neighbours of the cell are added together.
Let s be the sum of weights of alive neighbours of a cell. Let c be the current state of that cell. Then the condition of that cell can be communicated by giving/telling/writing down the ordered pair (c; s).
Then the birth/survival conditions listed in the rulestring are given in the same sense (as conditions needed for a cell to be alive in the next generation).
An example
Here is a two-state isotropic CA using a range-2 weighted neighbourhood:
Code: Select all
x = 24, y = 5, rule = R2,C0,S2-3,172-252,B3,245-253,NW01090109010951515109015100510109515151090109010901
21bo2$bo21bo$2bo$3o16bobobo!
#C [[ GRID THEME MCell ]]
Code: Select all
01 09 01 09 01
09 81 81 81 09
01 81 -- 81 01
09 81 81 81 09
01 09 01 09 01
Crossposting/linking some of previous relevant discussion:
confocaloid wrote: February 12th, 2025, 3:17 pmBasically, by spending some time trying to understand which CA can be defined using weighted neighbourhoods, and by writing a bunch of scripts in unreleasable state to brute-force answers to several questions.
I think range 3 is roughly as far as one can get by brute-forcing possibilities. Beyond that, there are way too many different neighbourhood partitions (even restricting to only fully-symmetric partitions, like those I used above) to generate and test them all directly. One would need a faster algorithm.
Golly currently supports only weights smaller than 128, which implies that a Golly-compatible fully-symmetric weighted neighbourhood on the square tiling can have at most four distinct positive weights. (For example 1, 5, 25, 125 with each of these weights assigned to four different neighbours.) For range 3, that means investigating partitions of the setinto 2, 3, 4 or 5 subsets; one of these subsets gets weight 0 (i.e. not considered a neighbour at all) and each of the other subsets gets its own positive weight. (For simplicity, a cell is not considered its own neighbour, so the subset containing (0,0) is the one that gets weight 0.)Code: Select all
{ (0,0), (1,0), (1,1), (2,0), (2,1), (2,2), (3,0), (3,1), (3,2), (3,3) }
The above is only a simplification that assumes weights are chosen and assigned in an appropriate way to allow distinguishing all conditions that can be distinguished in principle (with a given partition). The reality is more complicated than that, because there are weighted neighbourhoods such as NW121202121 or NW212101212 which distinguish fewer conditions than the corresponding "canonical forms" NW151505151 or NW515101515. The advantage of non-canonical weighted neighbourhoods is that they can be supported in Golly/LifeViewer (they have sufficiently small weights) even if the corresponding "canonical form" would require too large weights and is not supported in Golly/LifeViewer.
For range 4 or higher there would be way too many partitions into 2, 3, 4 or 5 subsets to test them explicitly, so some additional algorithmic trickery will be necessary.
confocaloid wrote: April 15th, 2024, 4:21 amIt's possible to go a bit closer to isotropic range-3 cross, using an "atlas" of multiple overlapping rulespaces, with each "chart" in the "atlas" defined by a weighted neighbourhood like this:H. H. P. M. P. Cole wrote: April 15th, 2024, 1:21 am[...] My wish was to explore INT R3 Cross, but since LifeViewer does not support CAViewer or Durnak-Cole, this is the closest I can go. [...]
The range-1 neighbours and the range-3 neighbours are treated as before. The four range-2 neighbours are split into two pairs, allowing to distinguish the situation "two alive range-2 neighbours opposite each other" from the situation "two non-opposite alive range-2 neighbours". One needs to be careful to choose living conditions so that the resulting CA is isotropic (for example if B58 is included then B78 also should be). Otherwise it seems to work: [...]Code: Select all
00 00 00 01 00 00 00 00 00 00 0F 00 00 00 00 00 00 2D 00 00 00 01 05 2D 00 2D 05 01 00 00 00 2D 00 00 00 00 00 00 0F 00 00 00 00 00 00 01 00 00 00
That "distinguishing trick" could be performed for any one of three ranges, and would work in Golly/LifeViewer.
I think it's also possible to do that for two ranges at once. However, one would need to use the highest weight on the remaining range where all four neighbours have the same weight.
It appears to be impossible to perform the "distinguishing trick" on all three ranges at once. That would require some cells to be weighted 243. [...]
Other linksconfocaloid wrote: October 27th, 2023, 9:55 pm [...] Related:
CWCFSMNCA https://web.archive.org/web/20150422212 ... words.html
A discussion of CA definition formats https://web.archive.org/web/19990224055 ... /0007.html
Naszvadi wrote: April 22nd, 2019, 7:10 am Moore-neighbourhood, E^2 lattice:
There is a nontrivial set of cellular automata rules between isotropic nontotalistic and outer-totalistic set, where only the number of diagonal and orthogonal neigbours count. Using Hensel-notation, only the following rulestring parts are valid in a birth or survival section:and so on.
- 0 diagonal, 0 orthogonal: 0
- 1 d., 0 o.: 1c
- 0 d., 1 o.: 1e
- 2 d., 0 o.: 2cn
- 1 d., 1 o.: 2ak
- 0 d., 2 o.: 2ei
- 3 d., 0 o.: 3c
- 2 d., 1 o.: 3inqy
- 1 d., 2 o.: 3akjr
- 0 d., 3 o.: 3e
- ...
Is it worth to list already investigated nontotalistic rules if they fit into the above category?
- viewtopic.php?f=11&t=6736 "666 rules" (hexagonal tiling, range 2, three distinct weights 1, 7, 49)
- viewtopic.php?f=11&t=936 "Non-totalistic Rules - notations, projects, & discussion"
- viewtopic.php?f=11&t=477 "Rule Tables + Weighted Life + Larger than Life"