FunnyBeginner wrote:OK, I looked up in Dean Hickerson's collecton and found my oscillators, but not the 9x9 Smiley.
This may very well be a new oscillator. Billiard-tables whose sides temporarily collapse aren't technically billiard tables (although, in this case, with the addition of the snakes that totally encapsulate the sides it IS a true billiard table). Nevertheless, such oscillators can be quite interesting on their own. Dave Buckingham's "Extremely Impressive" was the first such oscillator found.
You can also make this one slightly smaller (and also more symmetrical) by using two blocks on each side rather than three:
Code: Select all
x = 17, y = 17, rule = B3/S23
4bob2ob2obo$4b2obobob2o2$4b3o3b3o$3bobo5bobo$3b2o2b3o2b2o$2obo2bo3bo2b
ob2o$2obobobobobobob2o$3bo3bobo3bo$2obobobobobobob2o$2obo2bo3bo2bob2o$
3b2o2b3o2b2o$3bobo5bobo$4b3o3b3o2$4b2obobob2o$4bob2ob2obo!
FunnyBeginner wrote:As you wrote a programm, did it use simple brute force on a given area or can it use a sort of backtracking, which also finds all solutions, but much faster.
No, it uses brute force searching. It does have one optional optimization that should only be turned on for rules with single monolithic birth or survival conditions (e.g. birth on 3-6 is OK, but not 3-4 and 6-7): if any non-viable over-population is found anywhere, it is pointless to add more cells, because over-population can never be remedied. (This is not the case in rules with more than one set of conditions; for example, with birth on 3-4 and 6-7, 5 is not viable, but adding one additional cell yields 6, which is.)
FunnyBeginner wrote:By the way i wrote a simple still life finder base on a genetic algorithm which finds a still life for a given number of cells. The fitness i measured in the number of unwanted born cells and unwanted dieing cells.
My still-life enumerator does not use genetic algorithms (i.e. it uses a single non-adjustable pre-programmed algorithm), but does something similar. Every cell contains a state (0=dead, 1=alive, -1=unspecified - i.e. presumed dead, but may later be changed to definitely dead or definitely alive), a number of living neighbors, and a number of degrees of freedom (i.e. the number of unspecified neighbors). In addition to being arranged in a matrix in the usual way, unspecified cells are also placed in a linked list, in order of stability (which is determined based on state and neighbors) and degrees of freedom.
The program then takes guesses (i.e. try 0 and recurse, then try 1 and recurse) for every unspecified cell. The order ensures that the program attempts to correct unstable cells before stable ones, and then, whenever possible, ones close to the center of the pattern (i.e. with the least degrees of freedom) rather than ones near the edges - it doesn't make sense to have an un-rescuable lump and then attempt to grow longer and longer snake arms on the edges, since that will also be un-rescuable. In most cases, unstable cells with few degrees of freedom cannot be rescued by adding adjacent neighbors, so such cells usually cause subsequent recursion to be abandoned early, before much time is wasted on it. The algorithm is fairly optimal; Peter Raynham's original still-life searcher used to require computation of around O(4^n), while mine is arund O(2.45^n), and since the number of still-lifes appears to be arond O(2.45^n) also, this cannot be improved.
The program essentially grows patterns like crystals that must obey certain rules, fixing the structure in the center, and experimenting with the edges, and fixing them later as the edges expand.
FunnyBeginner wrote:Do you know how to use a genetic algorithm for oscillations or spaceships?
I'm not really that familiar with genetic algorithms. However, my program is currently adapted to find oscillators (and spaceships are partially implemented, but not currently working). Oscillators may be viewed as still-lifes in a cylindrical asymmetric 3D automata, with the three axes of x, y, time, with time looping around. Every cell at position ((t+1)%period,x,y) has 9 neighbors at (t,x+[-1,0,1],y+[-1,0,1]) and relies solely on them, and not itself. This is very similar to growing three-dimensional crystals, as above. The only difference from still-lifes is the neighborhood (and dimension), and the rule used - otherwise, it's the same.
Spaceships are virtually identical to oscillators, except the cylinder has an offset before being joined.
Both oscillators and spaceships with glide symmetry could be searched by adding a twist or a flip where the cylinder connects. This could be especially useful for spaceships - e.g. the four basic Life spaceships are period 4, but modulo 2, so a P2 search could find them.
I can't speak for other search programs, but I've found that mine works well up for still-lifes around 24 bits; in the low 20s, some minor issues arise that need to be addressed manually (e.g. certain pattern geometries for which searching explicitly would greatly increase the search space, and the order of magnitude). For period-2 oscillators, the computation time increases dramatically (since every added bit effectively adds two - one in each generation), and 21 bits took around a week or more to compute. Higher periods are even worse - I've never even be able to search up to 12 bits, at which the first known higher-period oscillators appear. The next smallest ones currently known are 18 bits (pseudo-object - LWSS on LWSS), so unless you have a program that can search significantly learger sizes, the search results will be very sparse.