Difference between revisions of "Tutorials/Glider syntheses"
m (Consistent spelling of "synthesise") |
(More details about how to format syntheses) |
||
Line 272: | Line 272: | ||
*The rule must be either B3/S23 or [[LifeHistory]] (in the latter case only states 0 and 1 are allowed). | *The rule must be either B3/S23 or [[LifeHistory]] (in the latter case only states 0 and 1 are allowed). | ||
*The pattern must not exceed a [[bounding box]] of 9999×9999, a [[population]] of 100,000, or a file size of 400 kilobytes. | *The pattern must not exceed a [[bounding box]] of 9999×9999, a [[population]] of 100,000, or a file size of 400 kilobytes. | ||
*[[xWSS]]es ''are'' allowed to substitute for gliders, and will be automatically converted into their respective three-glider collisions. | *[[xWSS]]es ''are'' allowed to substitute for gliders, and will be automatically converted into their respective three-glider collisions. The only time this does ''not'' work correctly is when two or more xWSSes come from the same direction during the same synthesis step, in which case the gliders cannot come from infinity and the synthesis is therefore invalid. | ||
*Each individual step, including the gliders/xWSSes, must be separated by at least 20 empty rows/columns. | *Each individual step, including the gliders/xWSSes, must be separated by at least 20 empty rows/columns. | ||
*Every glider/xWSS must begin interacting before generation 200, and each step should overall stabilize by generation 4000. | *Every glider/xWSS must begin interacting before generation 200, and each step should overall stabilize by generation 4000. If your synthesis does not meet this requirement, there's unfortunately not much that can be done about it other than posting it somewhere else (e.g. the forums or Discord). | ||
*The initial pattern in each step must match the resulting pattern of the previous step (though rotations/reflections are allowed). | *The initial pattern in each step must match the resulting pattern of the previous step (though rotations/reflections are allowed). | ||
*Although the synthesis RLEs on Mark Niemiec's website have the final object displayed next to the synthesis for each individual step, these are technically redundant and should be removed from the pattern when submitting to Catagolue. | *Although the synthesis RLEs on Mark Niemiec's website have the final object displayed next to the synthesis for each individual step, these are technically redundant and should be removed from the pattern when submitting to Catagolue. |
Revision as of 18:00, 1 June 2019
Glider synthesis is the process of colliding gliders – the smallest spaceship in Conway's Game of Life – in a specific way to construct a specific object. It is one of the few areas in the Game of Life that many discoveries can still be made without using scripts.
This is an example of a glider synthesis:
It is a 13 glider synthesis of Achim Flammenkamp's pseudo-barberpole, which, at the time of writing, is the cheapest synthesis known of that object. Note that this particular synthesis can be divided into two stages which can take place arbitrarily far apart; multi-stage synthesis are typically shown this way to make it easier to see what is happening in each step. The three still life syntheses are independent and could also be moved into separate stages, so this is really a four-stage synthesis. Simple well-separated still lifes tend to be trivial to construct, and often the order of construction doesn't matter, so several stages are sometimes left combined in cases like this.
Locating known glider syntheses
To locate a known glider synthesis, there are three main places you should look:
- The "Syntheses" page on Catagolue, showing the current synthesis data from Shinjuku
- Mark Niemiec's synthesis database,
- 2718281828's 3G collision database (see 3-glider collision database below)
As of May 2019, many of the syntheses in Niemiec's database are out of date, but the site does have some that aren't on Catagolue yet.
Also, there's a very important difference between the two databases. Shinjuku/Catagolue focuses on documenting the single synthesis of each object that takes the smallest number of gliders. By contrast, Niemiec's database collects many types of syntheses for a large number of objects, including more expensive ones. For example, there may be syntheses of two combined objects where each type of object is added to an already existing instance of the other type. Or there might be syntheses where all gliders come from one side of the object (useful in building the object near other existing objects), and so on.
Sometimes you will not find a synthesis for a particular object in either of these places. That could be because:
- There does exist a known synthesis, but it is hidden somewhere obscure. Your best bet is to ask on the ConwayLife.com forums.
- No syntheses are known because no-one has decided to synthesise that specific object before. These are usually pretty easy to make a synthesis for yourself.
- No syntheses are known because the object is very difficult to synthesise. An example of this would be Sir Robin.
- The object has been proven impossible to synthesise. Examples of this include all Gardens of Eden as well as solutions to the grandfather problem.
In the next section we will look at how to make your own syntheses.
Making your own glider syntheses
Using Catagolue to find glider syntheses
Before you start, you will need to download the second Python script posted by Brett Berger here. If you select an object (which can either be a true object or a constellation) in Golly and run this script, it will open the object's Catagolue page. You might instead want to use synthesistools.py in Shinjuku to do the following process more quickly. More details about this will be given in "Using search programs to assist in creating syntheses".
Let's say you want to find a synthesis for block on down candlefrobra, which, according to Mark Niemiec's website, takes 12 gliders:
Select the pattern in Golly and run the script mentioned above. It should bring you to this page on Catagolue. Scroll down to the part of the page with lots of differently coloured dots. These are all sample soups for the object. The black ones are asymmetric soups, which are the easiest to make syntheses from. (However, it should not be forgotten that you can still get good syntheses from symmetric soups -- especially if the object has the same type of symmetry as the soup.)
So click on the first asymmetric soup (the first black dot), and copy the RLE it provides into Golly. You should get this:
Now run the soup until the candlefrobra appears (this should happen at generation 919). Use the goto.py script (which comes with Golly) to go 20 generations back. Watch each generation up to the candlefrobra's formation step-by-step to see which objects react to make the candlefrobra. Next, go back 20 generations, select the objects that reacted to make a candlefrobra, and paste them into a new layer.
Test to see if that pasted pattern works. If it doesn't work, go back to the layer with the soup, and select and paste a larger area. Once you've deleted any objects that don't participate in the reaction, you should get something like this:
The reaction is pi + block + boat + traffic light --> candlefrobra + some junk. We know how to make all those reactants with gliders, so we can now make a synthesis! In fact, all of the reactants can be made in two gliders (those collisions can be found in two-glider-collisions.rle in Golly's pattern collection).
However, before you start, you may notice that not all of the blinkers in the traffic light react before making the candlefrobra. So maybe we don't need all of the blinkers. In fact, the only blinker we need is the top one. Try deleting the rest of the blinkers just before the traffic light first reacts. This isn't necessary, but to help your understanding, I've replaced the traffic light predecessor with one that only makes a blinker to get this:
Now there is also no junk left over after the synthesis, only the candlefrobra.
Now you can start the synthesis. To do this, you should synthesise each of the reactants separately in such a way that they work when put together. You can find all the syntheses you need for this in two-glider-collisions.rle. Try to do this yourself. If you can't manage to make it work using only 2-glider collisions, look in Mark Niemiec's website to find more useful syntheses.
If you need a hint, these are the syntheses I would use (zoomed out in case you don't want the hint):
If you used the hint, note that you may need to rewind some of the syntheses to make it work.
How did you go? If you created a synthesis with less than 12 gliders then congratulations, you would have created a record-breaking synthesis! For reference, this is the synthesis I created which used 8 gliders:
In this example with the block on trans-candlefrobra, we were lucky to get a good reaction from the very first soup. Sometimes you will have to look through 20 or more soups before finding a suitable reaction.
If you want more practice for creating synthesis from a reaction, here is the reaction the current record holding synthesis of why not (8 gliders) was made with:
Good luck!
Using converters to make syntheses
Let’s say we want to make a synthesis for this 18-bit still-life:
So we run the pattern-to-catagolue script, and it brings us here But there (at the time of writing) are no catagolue soups! So what can we do? It is time to be introduced to the world of converters…
A converter is a collision of gliders with a still-life/oscillator, which turns it into a new still-life/oscillator. Here is an example of a converter. It turns a hook into a barge:
Converters are very useful for creating syntheses that are too large and/or rare to turn up on catagolue. For example, the duodecapole currently has no appearances on catagolue, but we can still create a synthesis from a barberpole-lengthening converter and an already known synthesis for the decapole like this:
Here are three places you will find converters:
- Martin Grant’s collection
- Bob Shemyakin’s collection
- Various places in the forums
So with this new knowledge, back to synthesising the 18-bit still life:
So what could we convert that from? We could convert it from the equivalent with a snake instead of a carrier, but I would convert it from the equivalent with a hook instead of a tub, because it is more likely to have more soups on catagolue, and the corresponding converter is cheaper:
Now, when we go to the catagolue page of the still-life with the hook, we find it has lots of soups (at the time of writing it is 43!)
So let’s try the first soup:
The soup reduces to this predecessor:
But before we start the synthesis, there are a few clever tricks we can do that will reduce the overall synthesis. The block only acts as cleanup, so perhaps it can be replaced with a glider:
1 glider less. The loaf only partly reacts before being separated from the rest of the reaction, so maybe it can be substituted with a glider. Also, the glider that we replaced a block with actually is only acting as cleanup for the loaf’s reaction, so if we replace the loaf with a glider in the right way, the other glider can be removed. Unfortunately, the loaf can’t be replaced by 1 glider, but replacing it with 2 gliders still reduces the cost:
2 gliders less. But we can do even more! Often it is possible to synthesise two nearby objects at once, instead of separately, to achieve a cheaper cost in gliders. In this example, the beehive and the traffic light can be made together in a 3-glider synthesis, instead of using 4 gliders to synthesise them separately. (More details on how these are found in a later tutorial.)
3 gliders less! See if you can complete the synthesis of the 17-bit still-life from there…
…How did you go? This in the 11 glider synthesis I got:
Now all we need to do to complete the synthesis the 18-bit still-life is to add the converter:
And we’re done! We successfully created a 14 glider synthesis of a still-life with no appearances on catagolue, by constructing it from another still-life which did have appearances on catagolue.
If you want more practice at using converters and catagolue to find syntheses, try finding a synthesis for this still-life:
Converters are used in many others ways than just assisting soup search result-based syntheses. They are used a lot in the syntheses of difficult objects like billiard tables and spaceships. For example, this is the weekender synthesis:
Using search programs to assist in creating syntheses (incomplete)
3-glider collision database
For this part of the tutorial, you will need to use Python scripts with Golly.
Below is a 25-glider synthesis of lightweight emulator:
Notice that in the first step, two blocks are created using a total of four gliders. This may be the most obvious way to synthesise them, but is it the cheapest?
This is where 2718281828's 3G collision database comes in. It contains ~460,000 different three-glider collisions and the objects/constellations they produce, and includes a Python script created by Goldtiger997 to search through the database. Download the three files and place them somewhere convenient, preferably your Scripts/Python folder. In Golly, paste the desired constellation into a new layer and run synthesise-constellation.py. If there are any collisions in the database that produce the same objects in the same positions relative to each other, they will all be displayed.
Let's try this with our two-block constellation. After running the script, we get this:
All six of these collisions work in essentially the same way, by colliding a glider with a pi-heptomino. Since the two blocks are the first step of our lightweight emulator synthesis, we don't have to worry about other nearby objects interfering, so any of these will be suitable. In other cases, you may have to try several of these collisions before finding one that works for the synthesis you're working on.
Now that we have a three-glider collision of the two blocks, our lightweight emulator synthesis has been reduced to 24 gliders, which is currently the cheapest known as of the time of writing:
Submitting syntheses to Catagolue
Once you've completed a new record-breaking synthesis for a still life, oscillator, or spaceship, you can add it to the object's Catagolue page by pasting the RLE into the submission box at the bottom of the "Syntheses" page. There are some important things to note about how to format the pattern in order for it to be interpreted correctly:
- The rule must be either B3/S23 or LifeHistory (in the latter case only states 0 and 1 are allowed).
- The pattern must not exceed a bounding box of 9999×9999, a population of 100,000, or a file size of 400 kilobytes.
- xWSSes are allowed to substitute for gliders, and will be automatically converted into their respective three-glider collisions. The only time this does not work correctly is when two or more xWSSes come from the same direction during the same synthesis step, in which case the gliders cannot come from infinity and the synthesis is therefore invalid.
- Each individual step, including the gliders/xWSSes, must be separated by at least 20 empty rows/columns.
- Every glider/xWSS must begin interacting before generation 200, and each step should overall stabilize by generation 4000. If your synthesis does not meet this requirement, there's unfortunately not much that can be done about it other than posting it somewhere else (e.g. the forums or Discord).
- The initial pattern in each step must match the resulting pattern of the previous step (though rotations/reflections are allowed).
- Although the synthesis RLEs on Mark Niemiec's website have the final object displayed next to the synthesis for each individual step, these are technically redundant and should be removed from the pattern when submitting to Catagolue.
When you submit, your RLE is added to a queue to be processed by the automatic update process, which runs every 8 hours. If you're not sure whether your synthesis is on Catagolue yet, you can check the "Jobs" page on the Catagolue repository, particularly the jobs named shinjuku, to see the console output for the update process. Djikstra's algorithm is used to calculate the shortest path to the desired object using the known components, so you may find that earlier steps of your synthesis have been replaced by an already-known cheaper way of producing the same intermediate object.