Difference between revisions of "Apgsearch"

From LifeWiki
Jump to navigation Jump to search
(Added infobox)
 
(41 intermediate revisions by 8 users not shown)
Line 4: Line 4:
|url      = https://gitlab.com/apgoucher/apgmera
|url      = https://gitlab.com/apgoucher/apgmera
|purpose  = Soup search program
|purpose  = Soup search program
|createdby = Adam P. Goucher
|createdby = [[Adam P. Goucher]]
|platform  = Unix; platform-independent
|platform  = Unix; platform-independent
}}
}}
The '''Ash Pattern Generator Search''' program, more commonly known as '''apgsearch''', is an automated search program created by [[Adam P. Goucher]]. It generates [[soup]]s, which by default are asymmetric and 16×16, and runs them until stabilization, recording any resulting [[still life]]s, [[oscillator]]s, [[spaceship]]s, periodic linear [[infinite growth]] patterns, and "unusual growth" patterns. More recent versions also detect soups which are long-lived [[methuselah]]s and [[diehard]]s as well as soups with large final populations.{{refn|group=note|Only methuselahs lasting at least 25,000 generations, diehards lasting at least 500 generations, and soups with final populations of at least 3,000 are reported, and only in [[Conway's Game of Life]].}}{{refn|group=note|name=25k|apgsearch estimates the lifespan of each soup before testing it more precisely, and is not guaranteed to detect all methuselahs with a lifespan of less than 26,000 generations.}} Version 1.x and later upload the results to the online database ''[[Catagolue]]'' and have a peer-review process for verifying hauls submitted to the site.
The '''Ash Pattern Generator Search''' program, more commonly known as '''apgsearch''', is an automated search program created by [[Adam P. Goucher]]. It generates [[soup]]s, which by default are asymmetric and {{times|16|16}}, and runs them until stabilization, recording any resulting [[still life]]s, [[oscillator]]s, [[spaceship]]s, periodic linear [[infinite growth]] patterns, and "unusual growth" patterns. More recent versions also detect soups which are long-lived [[methuselah]]s and [[diehard]]s as well as soups with large final populations.{{refn|group=note|Only methuselahs lasting at least 25,000 generations, diehards lasting at least 500 generations, and soups with final populations of at least 3,000 are reported, and only in [[Conway's Game of Life]].}}{{refn|group=note|name=25k|apgsearch estimates the lifespan of each soup before testing it more precisely, and is not guaranteed to detect all methuselahs with a lifespan of less than 26,000 generations.}} Version 1.x and later upload the results to the online database ''[[Catagolue]]'' and have a peer-review process for verifying hauls submitted to the site.


Versions 4.x and later of apgsearch use a backend known as [[lifelib]] to simulate soups, and can simulate various types of rules and symmetric soups.
Versions 4.x and later of apgsearch use a backend known as [[lifelib]] to simulate soups, and can simulate various types of rules and symmetric soups.
Line 30: Line 30:
Furthermore, the following pseudo-symmetries are used for asymmetric soups of different sizes:
Furthermore, the following pseudo-symmetries are used for asymmetric soups of different sizes:


* 8x32, 4x64, 2x128, 1x256: for 256-cell soups of size 8×32, 4×64, 2×128 and 1×256
* 8x32, 4x64, 2x128, 1x256: for 256-cell soups of size {{times|8|32}}, {{times|4|64}}, {{times|2|128}} and {{times|1|256}}


8x32 was one of the initial (pseudo-)symmetries the site handled; support for 4x64, 2x128 and 1x256 was added in August 2017.<ref name="post48015" />
8x32 was one of the initial (pseudo-)symmetries the site handled; support for 4x64, 2x128 and 1x256 was added in August 2017.<ref name="post48015" />


[[File:Inflation.png|right|frame|[[Inflation]] of a toy 4&times;4 soup.]]
[[File:Inflation.png|right|frame|[[Inflation]] of a toy {{times|4|4}} soup.]]
All symmetries can be "[[inflation|inflated]]" using the "i" prefix, replacing each cell in the sample soup with a 2&times;2 alignment of cells in the same state and resulting in soups of size e.g. 32&times;32 for iC1 instead of 16&times;16 for C1. Multiple "i" prefixes can be stacked to "inflate" cells to 4&times;4, 8&times;8, etc.<ref name="post50420" />
All symmetries can be "[[inflation|inflated]]" using the "i" prefix, replacing each cell in the sample soup with a {{times|2|2}} alignment of cells in the same state and resulting in soups of size e.g. {{times|32|32}} for iC1 instead of {{times|16|16}} for C1. Multiple "i" prefixes can be stacked to "inflate" cells to {{times|4|4}}, {{times|8|8}}, etc.<ref name="post50420" />


The 25pct and 75pct pseudo-symmetries were used in the past to investigate soups with initial densities of 0.25 and 0.75 respectively, but they fell into disuse and are not supported by v3.x and above.{{refn|group=note|The 25% pseudo-symmetry was also briefly used but abandoned due to conflicts with percent-encoding for URIs/URLs.}} Other pseudo-symmetries such as 25p, 32x32, 1x256X2+1 etc. have been used, but are not considered standard. apgsearch and Catagolue encourage users to use designated "test" symmetries to test modifications to the client.<ref name="b3s23_saka_test" />
The 25pct and 75pct pseudo-symmetries were used in the past to investigate soups with initial densities of 0.25 and 0.75 respectively, but they fell into disuse and are not supported by v3.x and above.{{refn|group=note|The 25% pseudo-symmetry was also briefly used but abandoned due to conflicts with percent-encoding for URIs/URLs.}} Other pseudo-symmetries such as 25p, 32x32, 1x256X2+1 etc. have been used, but are not considered standard. apgsearch and Catagolue encourage users to use designated "test" symmetries to test modifications to the client.<ref name="b3s23_saka_test" />
Line 42: Line 42:


===GPU searching===
===GPU searching===
As of version v5.x, apgsearch supports soup searching on a GPU using CUDA which, depending on the GPU used, can process soups several times faster than a standard CPU search. The GPU deems soups "interesting" which meet certain criteria, and these are then fully censused by the CPU.{{refn|group=note|A soup is deemed interesting if it fails to stabilize with period 6 within 12,000 generations or reaches the boundary of the finite universe (excluding escaping spaceships) considered by the GPU. Large still lifes, low-period oscillators, and diehards are therefore usually ignored.}} Therefore, the results are uploaded to separate symmetries on Catagolue to avoid distorting the main census statistics, with <tt>C</tt> and <tt>D</tt> replaced with <tt>G</tt> and <tt>H</tt> respectively.<ref name="post73557" /> The symmetries currently supported are:
As of version 5.x, apgsearch supports soup searching on a [[GPU]] using CUDA which, depending on the GPU used, can process soups several times faster than a standard CPU search. The GPU deems soups "interesting" which meet certain criteria, and these are then fully censused by the CPU.{{refn|group=note|A soup is deemed interesting if it fails to stabilize with period 6 within 21,000 generations or reaches the boundary of the finite universe (excluding escaping [[glider]]s and [[standard spaceship]]s) considered by the GPU. Large still lifes, low-period oscillators, and diehards are therefore usually ignored.}} Therefore, the results are uploaded to separate symmetries on Catagolue to avoid distorting the main census statistics, with <tt>C</tt> and <tt>D</tt> replaced with <tt>G</tt> and <tt>H</tt> respectively.<ref name="post73557" /> The symmetries currently supported are:
* G1 (counterpart to C1)
* G1 (counterpart to C1)
* G2_1, G2_2, G2_4<ref name="message1005217011481182290" />{{refn|group=note|Currently only supported by B3/S23.}}
* H2_+1, H2_+2 (D2_+1 and D2_+2)<ref name="post74195" />
* H2_+1, H2_+2 (D2_+1 and D2_+2)<ref name="post74195" />
* H4_+1, H4_+2, H4_+4<ref name="post74276" />
* H4_+1, H4_+2, H4_+4<ref name="post74276" />


Versions v5.061 and above allow GPU searching for any [[outer-totalistic]] rule, but not all of them can be searched easily in practice due to common objects meeting the criteria for "interestingness."<ref name="post74195" />
Versions 5.061 and above allow GPU searching for any [[outer-totalistic]] rule, but not all of them can be searched easily in practice due to common objects meeting the criteria for "interestingness."<ref name="post74195" />


==Notable patterns==
==Notable patterns==
Line 58: Line 59:
A variety of notable [[natural]] and semi-natural (i.e. appearing in symmetric soups) patterns were first discovered using apgsearch:
A variety of notable [[natural]] and semi-natural (i.e. appearing in symmetric soups) patterns were first discovered using apgsearch:


* The first known natural occurrence of a nonstandard spaceship was found during alpha testing of the script. The soup, which produced an [[LWSS on HWSS]] 1, was submitted to the conwaylife.com forums on August 26, 2014 by Adam P. Goucher.<ref name="calcyman20140826" /> Many other nontrivial spaceship [[flotillae]] have since been found.
* The first known natural occurrence of a nonstandard spaceship was found during alpha testing of the script. The soup, which produced an [[LWSS on HWSS]] 1, was posted to the ConwayLife.com forums on August 26, 2014 by Adam P. Goucher.<ref name="post12984" /> Many other nontrivial spaceship [[flotillae]] have since been found.
* The [[pufferfish]] was discovered in the ash of a symmetric soup in November 2014 by [[Richard Schank]].<ref name="post14510" />
* The [[pufferfish]] was discovered in the ash of a symmetric soup in November 2014 by [[Richard Schank]].<ref name="post14510" />
* The first known natural occurrence of a puffer other than the [[block-laying switch engine|block-laying]] or [[glider-producing switch engine]], a p1152 made from two switch engines dubbed the [[pony express]], was found in September 2015 by [[Apple Bottom]].<ref name="gameoflifeboy20150928" />
* The first known natural occurrence of a puffer other than the [[block-laying switch engine|block-laying]] or [[glider-producing switch engine]], a p1152 made from two switch engines dubbed the [[pony express]], was found in September 2015 by [[Apple Bottom]].<ref name="post23050" />
* [[112P15]] was first discovered in the ash of a symmetric soup in April 2016 by [[thunk]].<ref name="post29654" />
* [[112P15]] was first discovered in the ash of a symmetric soup in April 2016 by [[Maia Karpovich]].<ref name="post29654" />
* [[Rich's p16]] was first discovered in the ash of a symmetric soup in July 2016 by [[Rich Holmes]].<ref name="post32766" />
* [[Rich's p16]] was first discovered in the ash of a symmetric soup in July 2016 by [[Rich Holmes]].<ref name="post32766" />
* [[thunk]]'s discovery of a [[p28 pre-pulsar-shuttle|period 28 pre-pulsar-shuttle variant]] in November 2016 enabled the construction of smaller (in terms of minimum population) [[p26 pre-pulsar-shuttle|period 26]] and period 28 pre-pulsar-shuttles.<ref name="post37380" />
* [[Maia Karpovich]]'s discovery of a [[p28 pre-pulsar-shuttle|period 28 pre-pulsar-shuttle variant]] in November 2016 enabled the construction of smaller (in terms of minimum population) [[p26 pre-pulsar-shuttle|period 26]] and period 28 pre-pulsar-shuttles.<ref name="post37380" />
* [[34P14.1]] was first discovered in the ash of a symmetric soup in September 2018 by [[carybe]], but was not noticed on Catagolue until October.<ref name="post64645" />
* [[34P14.1]] was first discovered in the ash of a symmetric soup in September 2018 by [[carybe]], but was not noticed on Catagolue until October.<ref name="post64645" />
* [[68P9]] was first discovered in the ash of a symmetric soup in October 2018 by [[carybe]].<ref name="post64284" />
* [[68P9]] was first discovered in the ash of a symmetric soup in October 2018 by [[carybe]].<ref name="post64284" />
* [[42100M]] was first discovered in October 2018 by [[Dave Greene]], only two days after apgsearch added support for detecting [[methuselah]]s, becoming the longest-lasting known methuselah within a 16&times;16 bounding box at the time.<ref name="post65218" /> A month later, this was followed by [[Homer]], discovered by Adam P. Goucher and lasting 42883 generations.<ref name="post66055" />
* [[42100M]] was first discovered in October 2018 by [[Dave Greene]], only two days after apgsearch added support for detecting [[methuselah]]s, becoming the longest-lasting known methuselah within a {{times|16|16}} bounding box at the time.<ref name="post65218" /> A month later, this was followed by [[Homer]], discovered by Adam P. Goucher and lasting 42883 generations.<ref name="post66055" />
* [[Dueling banjos]] was first discovered in the ash of a symmetric soup in January 2019, in a tetramer form by [[Apple Bottom]].<ref name="post67718" />
* [[Dueling banjos]] was first discovered in the ash of a symmetric soup in January 2019, in a tetramer form by [[Apple Bottom]].<ref name="post67718" />
* The record-breaking methuselah [[47575M]] was first discovered in February 2019 by Adam P. Goucher, outlasting Homer by nearly 5000 generations.<ref name="post70221" />
* The record-breaking methuselah [[47575M]] was first discovered in February 2019 by Adam P. Goucher, outlasting Homer by nearly 5000 generations.<ref name="post70221" />
* [[Rob's p16]] was first discovered by [[Rob Liston]] in February 2020 via GPU search, becoming the smallest known p16 oscillator and the first asymmetric object discovered by soup search since the 1980s.<ref name="post89263" />
* The record-breaking methuselah [[49768M]] was first discovered in April 2020 by Rob Liston, outlasting 47575M by over 2000 generations.<ref name="post95336" />
* The record-breaking methuselah [[50093M]] was first discovered in January 2021 by Rob Liston, outlasting 49768M by about 300 generations.<ref name="post118690" />
* The record-breaking methuselah [[52513M]] was first discovered in January 2021 by [[Dylan Chen]], outlasting 50093M by over 2000 generations.<ref name="post119406" />
* [[32P21]] was first discovered by the [[Charity Engine]] distributed computing project in February 2022 using apgsearch, becoming the smallest known p21 oscillator.<ref name="post141492" />
* [[30P25]] was first discovered by the [[Charity Engine]] distributed computing project in May 2022 using apgsearch, becoming the smallest known p25 oscillator.<ref name="post145728" />


Other rare objects found by apgsearch in asymmetric soups are [[smiley]], [[Achim's p8]], [[Elkies' p5]], [[heart]], [[Silver's p5]], [[phoenix 1]], the [[Coe ship]], and the [[LWSS|lightweight]] [[Schick engine]]. Sample soups submitted to Catagolue have also led to cheaper glider syntheses for many patterns, including [[tumbler]], [[eater 2]], and [[smiley]]. Additionally, the [[copperhead]] first emerged from a D2_+2 soup in April 2016 only a month after its initial discovery by [[zdr]], followed by several more later in the year.<ref name="post29637" />
Other rare objects found by apgsearch in asymmetric soups are [[smiley]], [[Achim's p8]], [[Elkies' p5]], [[heart]], [[Silver's p5]], [[phoenix 1]], the [[Coe ship]], the [[LWSS|lightweight]] [[Schick engine]], the [[sidecar]], the [[loafer]], and a [[burloaferimeter]] variant. Sample soups submitted to Catagolue have also led to cheaper glider syntheses for many patterns, including [[tumbler]], [[eater 2]], [[smiley]], and [[unix]]. Additionally, the [[copperhead]] first emerged from a D2_+2 soup in April 2016 only a month after its initial discovery by [[zdr]], followed by several more later in the year.<ref name="post29637" />


==Other rules==
==Other rules==
{{Main|List of rules investigated on Catagolue}}
apgsearch has the ability to run soup searches for various rules other than Conway's Game of Life. In the past, this was restricted to [[outer-totalistic]] rules with two states, but versions v4.x and later have added support for various families of rules over time. However, only non-exploding rules can reasonably be investigated in practice unless a certain symmetry can be assured to never explode.
apgsearch has the ability to run soup searches for various rules other than Conway's Game of Life. In the past, this was restricted to [[outer-totalistic]] rules with two states, but versions v4.x and later have added support for various families of rules over time. However, only non-exploding rules can reasonably be investigated in practice unless a certain symmetry can be assured to never explode.


As of v4.86, apgsearch officially supports the following types of cellular automata:
As of v4.86, apgsearch officially supports the following types of cellular automata:
*Arbitrary [[Life-like cellular automaton|outer-totalistic]] rules.
*Arbitrary [[Life-like cellular automaton|outer-totalistic]] rules.
*[[Isotropic non-totalistic Life-like cellular automaton|Isotropic non-totalistic]] rules. (in [[Hensel notation]])
*[[Isotropic non-totalistic cellular automaton|Isotropic non-totalistic]] rules. (in [[Hensel notation]])
*[[Isotropic]] [[von Neumann neighbourhood]] rules. (implicitly by isotropic non-totalistic [[Moore neighbourhood]] rules)
*[[Isotropic]] [[von Neumann neighbourhood]] rules. (implicitly by isotropic non-totalistic [[Moore neighbourhood]] rules)
*Higher-range outer totalistic (HROT) rules. (up to range 5)
*Higher-range outer totalistic (HROT) rules. (up to range 5)
Line 95: Line 101:
Symmetric soups can also be run for rules other than Conway's Game of Life. However, many of the symmetries of the [[Moore neighbourhood]] do not apply to the hexagonal grid, and hexagonal rules must therefore use a separate set of symmetries. As of January 2019, this includes the following:
Symmetric soups can also be run for rules other than Conway's Game of Life. However, many of the symmetries of the [[Moore neighbourhood]] do not apply to the hexagonal grid, and hexagonal rules must therefore use a separate set of symmetries. As of January 2019, this includes the following:


* C1, 8x32, 4x64, 2x128: for asymmetric 256-cell soups of size 16&times;16, 8&times;32, 4&times;64, and 2&times;128 respectively
* C1, 8x32, 4x64, 2x128: for asymmetric 256-cell soups of size {{times|16|16}}, {{times|8|32}}, {{times|4|64}}, and {{times|2|128}} respectively
* C2_1, C2_2: 180° (two-fold) rotational symmetry
* C2_1, C2_2: 180° (two-fold) rotational symmetry
* C3_1: 120° (three-fold) rotational symmetry
* C3_1: 120° (three-fold) rotational symmetry
Line 109: Line 115:
{{alsosee|Catagolue#Limitations}}
{{alsosee|Catagolue#Limitations}}


Although apgsearch has bespoke support for [[flotillae]] composed of standard [[spaceship]]s in [[Conway's Life]], it can fail to properly separate larger non-interacting groups, or groups of any size in non-Life rules. [[Pseudo still life]]s composed of many constituent parts may also fail to be separated properly.<ref name="david20161128" />
Although apgsearch has bespoke support for [[flotillae]] composed of standard [[spaceship]]s in [[Conway's Life]],{{refn|group=note|This formerly excluded {{LinkCatagolue|xq4_06eeed72zaghgis|patternname=MWSS on HWSS 15|style=raw}} and {{LinkCatagolue|xq4_27deee6zwsighhga|patternname=HWSS on HWSS 10|style=raw}}.<ref name="post79802" /> The issue has since been fixed, but it means that the frequency statistics for these two spaceships are somewhat skewed.}} it can fail to properly separate larger non-interacting groups, or groups of any size in non-Life rules. [[Pseudo still life]]s composed of many constituent parts may also fail to be separated properly.<ref name="post37724" />


The maximum period for [[spaceship]]s and [[oscillator]]s is 1,000 in apgsearch 1.x, 4,000 in apgnano (apgsearch 2.x), 1,280 in apgmera (apgsearch 3.x), and 1,048,576 in apgluxe (apgsearch 4.x); higher-period objects are classified as <tt>PATHOLOGICAL</tt>. The maximum [[bounding box]] for any spaceship, oscillator or [[still life]] is 40&times;40; larger objects are classified as <tt>ov_</tt> (oversized). High-period [[linear-growth pattern]]s may not be identified and instead reported as <tt>zz_LINEAR</tt>.
The maximum period for [[spaceship]]s and [[oscillator]]s is 1,000 in apgsearch 1.x, 4,000 in apgnano (apgsearch 2.x), 1,280 in apgmera (apgsearch 3.x), and 1,048,576 in apgluxe (apgsearch 4.x and 5.x); higher-period objects are classified as <tt>PATHOLOGICAL</tt>. High-period [[linear-growth pattern]]s may not be identified and instead reported as <tt>zz_LINEAR</tt>. Additionally, the maximum [[bounding box]] for any spaceship, oscillator or [[still life]] in versions 3.x and before is {{times|40|40}} due to the limits of the standard apgcode format; larger objects are classified as <tt>ov_</tt> (oversized) in these versions.  


== Version history ==
== Version history ==
Line 118: Line 124:


====Version 0.x====
====Version 0.x====
apgsearch v0.x was the initial version of the script, first published on September 8, 2014. When running the script, the user is first prompted to enter the number of soups to be searched, the rule under which to search, and the initial seed for soup generation. The script proceeds to search soups in sets of 100 until either the specified number of soups has been exceeded, or the user stops the search by pressing <nowiki><q></nowiki>. After the search finishes, Golly opens an HTML window which displays the results.<ref>{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=7&t=1443|title=apgsearch: a high-performance soup searcher|accessdate=June 12, 2016}}</ref> [[Aidan F. Pierce]] modified this version to allow soup-searching [[non-totalistic Life-like cellular automata]], and made a later modification to allow the results to be uploaded to [[Catagolue]].
apgsearch v0.x was the initial version of the script, first published on September 8, 2014. When running the script, the user is first prompted to enter the number of soups to be searched, the rule under which to search, and the initial seed for soup generation. The script proceeds to search soups in sets of 100 until either the specified number of soups has been exceeded, or the user stops the search by pressing <nowiki><q></nowiki>. After the search finishes, Golly opens an HTML window which displays the results.<ref>{{LinkForumThread|f=7|t=1443|title=apgsearch: a high-performance soup searcher|author=Adam P. Goucher|date=September 8, 2014|format=ref}}</ref> [[praosylen]] modified this version to allow soup-searching [[non-totalistic cellular automata]], and made a later modification to allow the results to be uploaded to [[Catagolue]].


====Version 1.x====
====Version 1.x====
apgsearch v1.x was first released on February 20, 2015. The main improvements from version 0.x are the ability to search symmetrical soups and the periodic uploading of results to [[Catagolue]].<ref>{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=7&t=1630|title=apgsearch v1.0|accessdate=June 12, 2016}}</ref> apgsearch 1.x supports the following different (pseudo-)[[symmetry|symmetries]]:
apgsearch v1.x was first released on February 20, 2015. The main improvements from version 0.x are the ability to search symmetrical soups and the periodic uploading of results to [[Catagolue]].<ref>{{LinkForumThread|f=7|t=1630|title=apgsearch v1.0|author=Adam P. Goucher|date=February 20, 2015|format=ref}}</ref> apgsearch 1.x supports the following different (pseudo-)[[symmetry|symmetries]]:


* C1
* C1
Line 137: Line 143:


====Version 2.x====
====Version 2.x====
apgsearch v2.x, codenamed ''apgnano'', was first published on July 19, 2015 and released onto the conwaylife.com forums on July 28. It uses a bespoke algorithm called [[Life128]], partially written in assembly language for speed, and can utilize both the SSE2 instruction set on x86_64 CPUs. It can only searches asymmetric (C1) 16&times;16 soups in [[Conway's Game of Life|Conway Life]] (B3/S23).<ref>{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=7&t=1784|title=apgsearch v2.2|accessdate=June 12, 2016}}</ref>
apgsearch v2.x, codenamed ''apgnano'', was first published on July 19, 2015 and released onto the conwaylife.com forums on July 28. It uses a bespoke algorithm called [[Life128]], partially written in assembly language for speed, and can utilize both the SSE2 instruction set on x86_64 CPUs. It can only search asymmetric (C1) {{times|16|16}} soups in [[Conway's Game of Life|Conway Life]] (B3/S23).<ref>{{LinkForumThread|f=7|t=1784|title=apgsearch v2.2|author=Adam P. Goucher|date=July 28, 2015|format=ref}}</ref>


====Version 3.x====
====Version 3.x====
apgsearch v3.x, codenamed ''apgmera'', was first published on March 3, 2016 and released onto the conwaylife.com forums on March 19. It uses an algorithm called [[vlife]], and unlike version 2.x, it supports arbitrary outer-totalistic rules, as well as the full range of [[symmetry|symmetries]] from apgsearch 1.1. It can use any of the SSE2, AVX1 and AVX2 instruction sets on x86_64 CPUs.
apgsearch v3.x, codenamed ''apgmera'', was first published on March 3, 2016 and released onto the conwaylife.com forums on March 19. It uses an algorithm called [[vlife]], and unlike version 2.x, it supports arbitrary outer-totalistic rules, as well as the full range of [[symmetry|symmetries]] from apgsearch 1.1. It can use any of the SSE2, AVX1 and AVX2 instruction sets on x86_64 CPUs.


Although the main program is written in C++, version 3.x contains a shell script and a Python file to generate assembly code for different rules and symmetries.<ref>{{cite web|url=http://www.conwaylife.com/forums/viewtopic.php?f=7&t=2099|title=apgsearch v3.1|accessdate=June 12, 2016}}</ref>
Although the main program is written in C++, version 3.x contains a shell script and a Python file to generate assembly code for different rules and symmetries.<ref>{{LinkForumThread|f=7|t=2099|title=apgsearch v3.1|author=Adam P. Goucher|date=March 19, 2016|format=ref}}</ref>


====Version 4.x====
====Version 4.x====
apgsearch v4.x, codenamed ''apgluxe'' and based on [[lifelib]], introduced the following features:
apgsearch v4.x, codenamed ''apgluxe'' and based on [[lifelib]], introduced the following features:


* Support for [[rulespace|B0 rules]].<ref name="post47849" />
* Support for [[rulespace|B0 rules]].<ref name="post47849" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/33b54efbf523006ab57c8afda2a1ab3a2c4aa7f0|title=B0 support|author=Adam P. Goucher|date=August 19, 2017|work=GitLab}}</ref>
* Support for [[Generations]] rules (without B0).<ref name="post47999" />
* Support for [[Generations]] rules (without B0).<ref name="post47999" />
* Cleaner separation of the different algorithmic layers.<ref name="post48707" />
* Cleaner separation of the different algorithmic layers.<ref name="post48707" />
* Support for two different containers, based on [[HashLife]] and [[vlife]] respectively.<ref name="post48707" />
* Support for two different containers, based on [[HashLife]] and [[vlife]] respectively.<ref name="post48707" />
* Support for 4&times;64, 2&times;128 and 1&times;256 soups.
* Support for {{times|4|64}}, {{times|2|128}} and {{times|1|256}} soups.<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/fec0073413419e821709ced2fed9ad623c5c8cd9|title=More symmetries|author=Adam P. Goucher|date=August 11, 2017|work=GitLab}}</ref>
** Indirect support for some one-dimensional cellular automata using one-cell-thick soups (for example, b026s1 simulates [http://m.wolframalpha.com/input/?i=rule+2166637080 Wolfram rule 2166637080])
** Indirect support for some one-dimensional cellular automata using one-cell-thick soups (for example, b026s1 simulates [http://m.wolframalpha.com/input/?i=rule+2166637080 Wolfram rule 2166637080])
* An 8% increase in speed in [[Lifelib]] compared to [[Life128 and vlife|vlife]] in version 3.x.
* An 8% increase in speed in [[lifelib]] compared to [[Life128 and vlife|vlife]] in version 3.x.
* Improved object detection, including:
* Improved object detection, including:
** Support for extended ("greedy") [[apgcode]]s
** Support for extended ("greedy") [[apgcode]]s
Line 160: Line 166:
Version 4.1 was released on August 21, 2017, and incorporated another rule family, namely:
Version 4.1 was released on August 21, 2017, and incorporated another rule family, namely:


* Support for [[Larger than Life]] rules with a range of up to 7.<ref name="post47999" />
* Support for [[Larger than Life]] rules with a range of up to 7.<ref name="post47999" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/4b1f33344697d56db32d4aa91b51f680f29f3aa5|title=Larger than Life|author=Adam P. Goucher|date=August 21, 2017|work=GitLab}}</ref>
* Support for "inflating" soups of arbitrary symmetry (v4.15).<ref name="post50420" />
* Support for "inflating" soups of arbitrary symmetry (v4.15).<ref name="post50420" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/b088313d41418c5f994e054aaf18b50abba2660b|title=Inflated symmetries|author=Adam P. Goucher|date=September 2, 2017|work=GitLab}}</ref>
** Indirect support for certain [[Margolus]] rules, using said inflated soups alongside rules simulating block cellular automata.
** Indirect support for certain [[Margolus]] rules, using said inflated soups alongside rules simulating block cellular automata.


Version 4.2 was released on September 10, 2017:
Version 4.2 was released on September 10, 2017:


* Support for isotropic [[non-totalistic]] rules.<ref name="post47849" />
* Support for isotropic [[non-totalistic]] rules.<ref name="post47849" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/c8399b80b1499eaf25a2813f5ffad447bf1edfaf|title=Supports non-totalistic rules|author=Adam P. Goucher|date=September 10, 2017|work=GitLab}}</ref>
** Support for the [[von Neumann neighbourhood]] (implicitly as isotropic rules).<ref name="post47999" />
** Support for the [[von Neumann neighbourhood]] (implicitly as isotropic rules).<ref name="post47999" />


Version 4.3 was released in June, 2018:
Version 4.3 was released in June, 2018:


* Support for [[Larger than Life]] rules with &gt;2 states (i.e. [[Generations]]-LtL rules).
* Support for [[Larger than Life]] rules with &gt;2 states (i.e. [[Generations]]-LtL rules).<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/f493165b633b22f7f097dfaddd76fb0fc696ab3c|title=LtL Generations|author=Adam P. Goucher|date=June 3, 2018|work=GitLab}}</ref>
* Support for isotropic non-totalistic [[Generations]] rules.
* Support for isotropic non-totalistic [[Generations]] rules (v4.32).<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/def0394386b9a5e6feb87bb76a6ffbb12ebff2a5|title=Isotropic Generations|author=Adam P. Goucher|date=June 3, 2018|work=GitLab}}</ref>
* Support for custom backends.<ref name="post48707" />
* Support for custom backends.<ref name="post60663" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/a42a5da203943de0d5eaa977fc40eb162c1c9c6a|title=Support genera|author=Adam P. Goucher|date=June 3, 2018|work=GitLab}}</ref>


Version 4.4 was released in June, 2018:
Version 4.4 was released in June, 2018:


* General speed improvements:
* General speed improvements:
** Special backend for [[Conway's Game of Life]] based on a 19-operation circuit by [[Tomas Rokicki]].
** Special backend for [[Conway's Game of Life]] based on a 19-operation circuit by [[Tomas Rokicki]].<ref>{{cite web|url=https://gitlab.com/apgoucher/lifelib/-/commit/320c727054537fdec80551f9966fafa9e793e191|title=Merge branch 'b3s23life' into 'master'|author=Adam P. Goucher|date=June 12, 2018|work=GitLab}}</ref>
** Much faster handling of slow 'tail' soups across all rules.
** Much faster handling of slow 'tail' soups across all rules.
** Faster oscillator and spaceship classification.
** Faster oscillator and spaceship classification.
* Reduced memory consumption.
* Reduced memory consumption.<ref name="post60696" />


Version 4.5 was released in August, 2018:
Version 4.5 was released in August, 2018:
* Detection of [[methuselah]]s lasting longer than 25,000 generations in [[Conway's Game of Life]]. (v4.54)<ref name="post65133" />{{refn|group=note|name=25k}}
* Detection of [[methuselah]]s lasting longer than 25,000 generations in [[Conway's Game of Life]]. (v4.54)<ref name="post65133" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/fcef6c005e54e379554b266730b222ffb8849c47|title=Preliminary support for methuselahs|author=Adam P. Goucher|date=October 28, 2018|work=GitLab}}</ref>{{refn|group=note|name=25k}}
* Support for [[BSFKL]] rules. (v4.56)<ref name="post65313" />
* Support for [[BSFKL]] rules. (v4.56)<ref name="post65313" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/d83ac8acd4712347e1a688b3399f880df1c84327|title=BSFKL rulespace|author=Adam P. Goucher|date=October 29, 2018|work=GitLab}}</ref>


Version 4.6 was released in October, 2018:
Version 4.6 was released in October, 2018:
* Support for higher-range [[outer-totalistic Life-like cellular automata]], up to a range of 5. (v4.63)<ref name="post65440" />
* Support for higher-range [[outer-totalistic cellular automata]], up to a range of 5. (v4.63)<ref name="post65440" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/662f9a33c9b85b363d84cdb0dfbb14af0914e61c|title=Higher-range outer-totalistic rules|author=Adam P. Goucher|date=November 7, 2018|work=GitLab}}</ref>
* Support for [[totalistic]], [[isotropic non-totalistic]], and [[Generations]] rules using a [[hexagonal neighbourhood]], though with higher symmetries disabled as they had yet to be redesigned to be compatible with the hexagonal grid. (v4.66)<ref name="post66090" />
* Support for [[totalistic]], [[isotropic non-totalistic]], and [[Generations]] rules using a [[hexagonal neighbourhood]], though with higher symmetries disabled as they had yet to be redesigned to be compatible with the hexagonal grid. (v4.66)<ref name="post66090" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/a3f3f7eb469f0c0d178e510b72cdc108b8ea8cee|title=Hexagonal rules|author=Adam P. Goucher|date=December 1, 2018|work=GitLab}}</ref>
* Detection of [[diehard]]s lasting longer than 500 generations in [[Conway's Game of Life]]. (v4.69)
* Detection of [[diehard]]s lasting longer than 500 generations in [[Conway's Game of Life]]. (v4.69)<ref name="post66402" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/15e3f0e6f4dc07a2c62559191b729bf94c2d75cb|title=Detect messless methuselahs|author=Adam P. Goucher|date=December 11, 2018|work=GitLab}}</ref>


Version 4.7 was released in December, 2018:
Version 4.7 was released in December, 2018:
* Support for certain higher symmetries in [[hexagonal neighbourhood]] rules, particularly:
* Support for certain higher symmetries in [[hexagonal neighbourhood]] rules, particularly:
**D2_x and D2_xo.<ref name="post66627" />
**D2_x and D2_xo.<ref name="post66627" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/30a9439c2b0b43422d26229473af6d171e01dfec|title=Support two more hexagonal symmetries|author=Adam P. Goucher|date=December 19, 2018|work=GitLab}}</ref>
**C2_1, C2_4, C3_1, C6, D4_x1, D4_x4, D6_1, D6_1o, and D12. (v4.71)<ref name="post66638" />
**C2_1, C2_4, C3_1, C6, D4_x1, D4_x4, D6_1, D6_1o, and D12. (v4.71)<ref name="post66638" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/9620c694f6a320553fb5c299abcac57557ca5341|title=More hexagonal symmetries|author=Adam P. Goucher|date=December 20, 2018|work=GitLab}}</ref>


Version 4.8 was released in January, 2019:
Version 4.8 was released in January, 2019:
* Support for custom cellular automata using [[Golly]] rule tables and trees.
* Support for custom cellular automata using [[Golly]] rule tables and trees.<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/689faba78cda80a91617c615a4644790f5ee75dc|title=Support for custom rules and neighbourhoods|author=Adam P. Goucher|date=January 9, 2019|work=GitLab}}</ref>
* Native support for [[Deficient]] and [[Extended Generations]] rules. (v4.83)
* Native support for [[Deficient]] and [[Extended Generations]] rules. (v4.83)<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/a5812bb36a3f2d40b7fbf630f90546bbf1bf1fe4|title=Native support for Extended Generations and Deficient rules courtesy of M. I. Wright|author=Adam P. Goucher|date=January 15, 2019|work=GitLab}}</ref>


Version 4.9 was released in February, 2019:
Version 4.9 was released in February, 2019:
* Approximate 50% speed improvement for Conway's Game of Life and certain related rules due to detection of escaping [[glider]]s.<ref name="post69645" />
* Approximate 50% speed improvement for Conway's Game of Life and certain related rules due to detection of escaping [[glider]]s.<ref name="post69645" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/93782e29a4545f78d3555d0fd18f95546e02a65b|title=Escaping glider detection|author=Adam P. Goucher|date=February 4, 2019|work=GitLab}}</ref>


====Version 5.x====
====Version 5.x====
apgsearch v5.x was first published on March 20, 2019.<ref name="post73557" /> The salient new features are:
apgsearch v5.x was first published on March 20, 2019.<ref name="post73557" /> The salient new features are:
* Improved methodology for splitting work between CPU cores, ensuring threads are not idle.
* Improved methodology for splitting work between CPU cores, ensuring threads are not idle.
* Support for soup searching on a GPU using CUDA.
* Support for soup searching on a GPU using CUDA.<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/bed16580446448398fe158cf758e9e1bd450be1f|title=Working GPU version|author=Adam P. Goucher|date=March 20, 2019|work=GitLab}}</ref>
* Various refactoring and simplification of the underlying code.
* Various refactoring and simplification of the underlying code.
* Detection of 'megasized' [[methuselah]]s with a final population exceeding 3000 in [[Conway's Game of Life]]. (v5.03)<ref name="post73826" />
* Detection of 'megasized' [[methuselah]]s with a final population exceeding 3000 in [[Conway's Game of Life]]. (v5.03)<ref name="post73826" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/2133cb40147cbb7b70f1a5fb4709f8f3b2feb6f7|title=Log soups with final population exceeding 3000 -- thanks to 'testitemqlstudop' for the suggestion|author=Adam P. Goucher|date=March 24, 2019|work=GitLab}}</ref>


Version 5.1 was released in April, 2020:
* Improved CUDA implementation, making <tt>b3s23/G1</tt> searching roughly twice as fast as before.<ref name="message703393267643056139" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/5dc6bc68b3c57b94c1710ac12c41061f8ddbb7ba|title=Include faster GPU implementation|author=Adam P. Goucher|date=April 24, 2020|work=GitLab}}</ref>
Version 5.2 was released in October, 2020:
* Improved object separation.<ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/4ec508638f6929c5bd15157d1c53ef1a602cfe9b|title=Better object separation|author=Adam P. Goucher|date=October 15, 2020|work=GitLab}}</ref>
Version 5.3 was released in January, 2022:
* Improved object separation.<ref name="post140478" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/8b9288e5c91ab04f0c167ade7c463c4cf88a1791|title=Correct object separation|author=Adam P. Goucher|date=January 18, 2022|work=GitLab}}</ref>
* Improved CUDA implementation for H2 and H4 symmetries. (v5.34)<ref name="message1005175103430070272" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/38b7f878535df564c89bc738fa37fd67f4093ad8|title=Make higher symmetries 3x faster on GPU for b3s23|author=Adam P. Goucher|date=August 5, 2022|work=GitLab}}</ref>
* Support for G2_1, G2_2, and G2_4 symmetries. (v5.35)<ref name="message1005217011481182290" /><ref>{{cite web|url=https://gitlab.com/apgoucher/apgmera/-/commit/59262282f4479edaccd1df921335bf815faa22c7|title=Add new GPU symmetries: G2_1, G2_2, G2_4|author=Adam P. Goucher|date=August 5, 2022|work=GitLab}}</ref>
Support for the following features was added in an unknown update:
* Support for range-2 far corners, range-3 far edges and range-2 von Neumann isotropic non-totalistic rules.
==Upcoming features==
The following features are planned for subsequent releases:
The following features are planned for subsequent releases:
* Support for additional GPU symmetries.
* Support for additional GPU symmetries.
Line 230: Line 251:
|format = ref
|format = ref
|title  = Re: apgsearch v3.1
|title  = Re: apgsearch v3.1
|author = Adam P. Goucher
|date  = August 3, 2017
}}</ref>
}}</ref>
<ref name="post47999">{{LinkForumThread
<ref name="post47999">{{LinkForumThread
Line 235: Line 258:
|format = ref
|format = ref
|title  = Re: apgsearch v3.1
|title  = Re: apgsearch v3.1
|author = Adam P. Goucher
|date  = August 4, 2017
}}</ref>
}}</ref>
<ref name="post48707">{{LinkForumThread
<ref name="post48707">{{LinkForumThread
Line 240: Line 265:
|format = ref
|format = ref
|title  = Re: Extending apgcodes to larger patterns
|title  = Re: Extending apgcodes to larger patterns
|author = Adam P. Goucher
|date  = August 13, 2017
}}</ref>
}}</ref>
<ref name="post65133">{{LinkForumThread
<ref name="post65133">{{LinkForumThread
Line 245: Line 272:
|format = ref
|format = ref
|author = Adam P. Goucher
|author = Adam P. Goucher
|date  = October 28, 2018
|title  = Re: apgsearch 4.0
|title  = Re: apgsearch 4.0
}}</ref>
}}</ref>
Line 251: Line 279:
|format = ref
|format = ref
|title  = Re: Hacking apgsearch
|title  = Re: Hacking apgsearch
|author = Adam P. Goucher
|date  = August 5, 2017
}}</ref>
}}</ref>
<ref name="post50420">{{LinkForumThread
<ref name="post50420">{{LinkForumThread
Line 256: Line 286:
|format = ref
|format = ref
|author = Adam P. Goucher
|author = Adam P. Goucher
|date  = September 2, 2017
|title  = Re: apgsearch v4.0
}}</ref>
<ref name="post60663">{{LinkForumThread
|format = ref
|title  = Re: apgsearch v4.0
|p      = 60663
|author = Adam P. Goucher
|date  = June 3, 2018
}}</ref>
<ref name="post60696">{{LinkForumThread
|format = ref
|title  = Re: apgsearch v4.0
|title  = Re: apgsearch v4.0
|p      = 60696
|author = Adam P. Goucher
|date  = June 4, 2018
}}</ref>
}}</ref>
<ref name="post65313">{{LinkForumThread
<ref name="post65313">{{LinkForumThread
Line 269: Line 314:
|format = ref
|format = ref
|author = Adam P. Goucher
|author = Adam P. Goucher
|date  = November 6, 2018
|title  = Re: Thread for basic non-CGOL questions
|title  = Re: Thread for basic non-CGOL questions
}}</ref>
}}</ref>
Line 277: Line 323:
|author = Adam P. Goucher
|author = Adam P. Goucher
|date  = December 1, 2018
|date  = December 1, 2018
}}</ref>
<ref name="post66402">{{LinkForumThread
|format = ref
|title  = Re: apgsearch v4.0
|p      = 66402
|author = Ian07
|date  = December 11, 2018
}}</ref>
}}</ref>
<ref name="post66627">{{LinkForumThread
<ref name="post66627">{{LinkForumThread
Line 292: Line 345:
|date  = December 20, 2018
|date  = December 20, 2018
}}</ref>
}}</ref>
<ref name="david20161128">{{cite web
<ref name="post79802">{{LinkForumThread
|url        = http://conwaylife.com/forums/viewtopic.php?p=37724#37724
|format = ref
|author     = Bag Sinhwan (박신환)
|title  = Re: Thread for basic questions
|work      = ConwayLife.com forums
|p      = 79802
|title     = Re: Soup search results
|author = Adam P. Goucher
|date       = November 28, 2016
|date  = July 18, 2019
|accessdate = November 28, 2016
}}</ref>
<ref name="post37724">{{LinkForumThread
|p     = 37724
|author = Park Shinhwan (박신환)
|title = Re: Soup search results
|date   = November 28, 2016
|format = ref
}}</ref>
}}</ref>
<ref name="post48015">{{LinkForumThread
<ref name="post48015">{{LinkForumThread
Line 304: Line 363:
|title  = Re: Hacking apgsearch
|title  = Re: Hacking apgsearch
|p      = 48015
|p      = 48015
|author = Adam P. Goucher
|date  = August 4, 2017
}}</ref>
}}</ref>
<ref name="b3s23_saka_test">{{cite web
<ref name="b3s23_saka_test">{{cite web
|url        = https://catagolue.appspot.com/census/b3s23/Saka_Test
|url        = https://catagolue.hatsya.com/census/b3s23/Saka_Test
|work      = Catagolue
|work      = Catagolue
|title      = Census results for B3/S23/"Saka_Test"
|title      = Census results for B3/S23/"Saka_Test"
|accessdate = December 21, 2016
|accessdate = December 21, 2016
}}</ref>
}}</ref>
<ref name="calcyman20140826">{{cite web
<ref name="post12984">{{LinkForumThread
|url        = http://www.conwaylife.com/forums/viewtopic.php?f=2&t=279&p=12984#p12984
|f         = 2
|t         = 279
|p         = 12984
|author    = Adam P. Goucher
|author    = Adam P. Goucher
|date      = August 26, 2014
|date      = August 26, 2014
|work      = ConwayLife.com forums
|title      = Re: Thread For Your Accidental Discoveries
|title      = Re: Thread For Your Accidental Discoveries
|accessdate = June 12, 2016
|format    = ref
}}</ref>
}}</ref>
<ref name="post14510">{{LinkForumThread
<ref name="post14510">{{LinkForumThread
Line 327: Line 389:
|p          = 14510
|p          = 14510
}}</ref>
}}</ref>
<ref name="gameoflifeboy20150928">{{cite web
<ref name="post23050">{{LinkForumThread
|url        = http://www.conwaylife.com/forums/viewtopic.php?f=2&t=1452&p=23050#p23050
|f         = 2
|t         = 1452
|p         = 23050
|author    = gameoflifeboy
|author    = gameoflifeboy
|work      = ConwayLife.com forums
|title      = Re: Soup search results
|title      = Re: Soup search results
|date      = September 28, 2015
|date      = September 28, 2015
|accessdate = June 12, 2016
|format    = ref
}}</ref>
}}</ref>
<ref name="post29637">{{LinkForumThread
<ref name="post29637">{{LinkForumThread
Line 345: Line 408:
<ref name="post29654">{{LinkForumThread
<ref name="post29654">{{LinkForumThread
|format    = ref
|format    = ref
|author    = thunk
|author    = Maia Karpovich
|date      = April 5, 2016
|date      = April 5, 2016
|accessdate = November 16, 2018
|accessdate = November 16, 2018
Line 370: Line 433:
|format    = ref
|format    = ref
|title      = Re: Soup search results
|title      = Re: Soup search results
|author    = Aidan F. Pierce
|author    = praosylen
|date      = October 11, 2018
|date      = October 11, 2018
|accessdate = November 16, 2018
|accessdate = November 16, 2018
Line 378: Line 441:
|format    = ref
|format    = ref
|title      = Re: Soup search results
|title      = Re: Soup search results
|author    = Aidan F. Pierce
|author    = praosylen
|date      = October 2, 2018
|date      = October 2, 2018
|accessdate = November 16, 2018
|accessdate = November 16, 2018
Line 404: Line 467:
|author = Matthias Merzenich
|author = Matthias Merzenich
|format = ref
|format = ref
|date  = January 11, 2019
}}</ref>
}}</ref>
<ref name="post70221">{{LinkForumThread
<ref name="post70221">{{LinkForumThread
Line 411: Line 475:
|p          = 70221
|p          = 70221
|title      = Re: Soup search results
|title      = Re: Soup search results
}}</ref>
<ref name="post89263">{{LinkForumThread
|format = ref
|title  = Re: Oscillator Discussion Thread
|p      = 89263
|author = Matthias Merzenich
|date  = February 10, 2020
}}</ref>
<ref name="post95336">{{LinkForumThread
|format    = ref
|author    = Ian07
|date      = April 23, 2020
|p          = 95336
|title      = Re: Soup search results
}}</ref>
<ref name="post118690">{{LinkForumThread
|format    = ref
|author    = Ian07
|date      = January 9, 2021
|p          = 118690
|title      = Re: Soup search results
}}</ref>
<ref name="post119406">{{LinkForumThread
|format    = ref
|author    = creeperman7002
|date      = January 17, 2021
|p          = 119406
|title      = Re: Soup search results
}}</ref>
<ref name="post141492">{{LinkForumThread
|format = ref
|title  = Re: Oscillator Discussion Thread
|p      = 141492
|author = David Raucci
|date  = February 11, 2022
}}</ref>
<ref name="post145728">{{LinkForumThread
|format = ref
|title  = Re: Soup search results
|p      = 145728
|author = cvojan
|date  = May 18, 2022
}}</ref>
}}</ref>
<ref name="post73557">{{LinkForumThread
<ref name="post73557">{{LinkForumThread
Line 449: Line 555:
|author = Arie Paap
|author = Arie Paap
|date  = April 1, 2019
|date  = April 1, 2019
}}</ref>
<ref name="message703393267643056139">{{CiteDiscord
|author  = Adam P. Goucher
|date    = April 24, 2020
|channel = tools
|id      = 703393267643056139
}}</ref>
<ref name="post140478">{{LinkForumThread
|format = ref
|title  = Re: apgsearch v5.0
|p      = 140478
|author = Adam P. Goucher
|date  = January 18, 2022
}}</ref>
<ref name="message1005175103430070272">{{CiteDiscord
|author  = Adam P. Goucher
|date    = August 5, 2022
|channel = general-discussion
|id      = 1005175103430070272
}}</ref>
<ref name="message1005217011481182290">{{CiteDiscord
|author  = Adam P. Goucher
|date    = August 5, 2022
|channel = general-discussion
|id      = 1005217011481182290
}}</ref>
}}</ref>
</references>
</references>


==External links==
==External links==
* [https://catagolue.appspot.com/home About - Catagolue]
* [https://catagolue.hatsya.com/home About - Catagolue]
* [https://catagolue.appspot.com/apgsearch apgsearch - Catagolue] (contains links to both v5.x and v1.x)
* [https://catagolue.hatsya.com/apgsearch apgsearch - Catagolue] (contains links to both v5.x and v1.x)
{{LinkLexicon|lex_a.htm#apgsearch|name=apgsearch}}
* {{LinkLexicon|lex_a.htm#apgsearch|name=apgsearch}}


===Code repositories===
===Code repositories===
Line 463: Line 594:


===Forum threads===
===Forum threads===
{{LinkForumThread|f=7|t=3911|title=apgsearch v5.0}}
* {{LinkForumThread|f=7|t=3911|title=apgsearch v5.0}}
{{LinkForumThread|f=7|t=3049|title=apgsearch v4.0}}
* {{LinkForumThread|f=7|t=3049|title=apgsearch v4.0}}
{{LinkForumThread|f=7|t=2099|title=apgsearch v3.1}}
* {{LinkForumThread|f=7|t=2099|title=apgsearch v3.1}}
{{LinkForumThread|f=7|t=1784|title=apgsearch v2.2}}
* {{LinkForumThread|f=7|t=1784|title=apgsearch v2.2}}
{{LinkForumThread|f=7|t=1630|title=apgsearch v1.0}}
* {{LinkForumThread|f=7|t=1630|title=apgsearch v1.0}}
{{LinkForumThread|f=7|t=1443|title=apgsearch: a high-performance soup searcher}} (original discussion thread)
* {{LinkForumThread|f=7|t=1443|title=apgsearch: a high-performance soup searcher}} (original discussion thread)
{{LinkForumThread|f=9|t=1480|title=Hacking apgsearch}}
* {{LinkForumThread|f=9|t=1480|title=Hacking apgsearch}}
{{LinkForumThread|f=2|t=1452|title=Soup search results}}
* {{LinkForumThread|f=2|t=1452|title=Soup search results}}
 
{{CatagolueNavbox}}
{{GollyNavbox}}


[[Category:Software]]
[[Category:Censuses]]
[[Category:Censuses]]
[[Category:Search software]]
{{DISPLAYTITLE:apgsearch}}
{{DISPLAYTITLE:apgsearch}}

Latest revision as of 07:58, 22 July 2023

apgsearch
apgsearch image
Homepage Click here
Purpose Soup search program
Created by Adam P. Goucher
Platform Unix; platform-independent

The Ash Pattern Generator Search program, more commonly known as apgsearch, is an automated search program created by Adam P. Goucher. It generates soups, which by default are asymmetric and 16 × 16, and runs them until stabilization, recording any resulting still lifes, oscillators, spaceships, periodic linear infinite growth patterns, and "unusual growth" patterns. More recent versions also detect soups which are long-lived methuselahs and diehards as well as soups with large final populations.[note 1][note 2] Version 1.x and later upload the results to the online database Catagolue and have a peer-review process for verifying hauls submitted to the site.

Versions 4.x and later of apgsearch use a backend known as lifelib to simulate soups, and can simulate various types of rules and symmetric soups.

Higher symmetries

6bo11bo$7b2o7b2o$3bobob2o7b2obobo$2bobo15bobo$3bo17bo$2bo19bo$o9b2ob2o 9bo$b2o8bobo8b2o$b2o6bobobobo6b2o$8bobo3bobo$6bo2bo5bo2bo$6b3o7b3o2$6b 3o7b3o$6bo2bo5bo2bo$8bobo3bobo$b2o6bobobobo6b2o$b2o8bobo8b2o$o9b2ob2o 9bo$2bo19bo$3bo17bo$2bobo15bobo$3bobob2o7b2obobo$7b2o7b2o$6bo11bo! #C [[ THUMBSIZE 2 THEME 6 GRID GRIDMAJOR 0 SUPPRESS THUMBLAUNCH ]] #C [[ THEME 6 GRID GRIDMAJOR 0 THUMBLAUNCH AUTOSTART GPS 4 THUMBSIZE 2 WIDTH 480 HEIGHT 480 ]]
112P15
(click above to open LifeViewer)
RLE: here Plaintext: here
Also see: Symmetry

In addition to asymmetric (C1) soups, apgsearch can also run various types of symmetric soup searches and submit the data to Catagolue:

  • C2_1, C2_2, C2_4: 180° (two-fold) rotational symmetry
  • C4_1, C4_4: 90° (four-fold) rotational symmetry
  • D2_+1, D2_+2: reflectional symmetry along an orthogonal line
  • D2_x: reflectional symmetry along a diagonal line
  • D4_+1, D4_+2, D4_+4: reflectional symmetry along two perpendicular orthogonal lines
  • D4_x1, D4_x4: reflectional symmetry along two perpendicular diagonal lines
  • D8_1, D8_4: reflectional symmetry along four orthogonal/diagonal through a common center

Furthermore, the following pseudo-symmetries are used for asymmetric soups of different sizes:

  • 8x32, 4x64, 2x128, 1x256: for 256-cell soups of size 8 × 32, 4 × 64, 2 × 128 and 1 × 256

8x32 was one of the initial (pseudo-)symmetries the site handled; support for 4x64, 2x128 and 1x256 was added in August 2017.[1]

Inflation of a toy 4 × 4 soup.

All symmetries can be "inflated" using the "i" prefix, replacing each cell in the sample soup with a 2 × 2 alignment of cells in the same state and resulting in soups of size e.g. 32 × 32 for iC1 instead of 16 × 16 for C1. Multiple "i" prefixes can be stacked to "inflate" cells to 4 × 4, 8 × 8, etc.[2]

The 25pct and 75pct pseudo-symmetries were used in the past to investigate soups with initial densities of 0.25 and 0.75 respectively, but they fell into disuse and are not supported by v3.x and above.[note 3] Other pseudo-symmetries such as 25p, 32x32, 1x256X2+1 etc. have been used, but are not considered standard. apgsearch and Catagolue encourage users to use designated "test" symmetries to test modifications to the client.[3]

Although various orthogonal and diagonal gutter symmetries are possible in Conway's Game of Life, apgsearch does not currently have official support for searching with them. However, various users have modified apgsearch in order to search these symmetries and have submitted the results to Catagolue under custom symmetry names.

GPU searching

As of version 5.x, apgsearch supports soup searching on a GPU using CUDA which, depending on the GPU used, can process soups several times faster than a standard CPU search. The GPU deems soups "interesting" which meet certain criteria, and these are then fully censused by the CPU.[note 4] Therefore, the results are uploaded to separate symmetries on Catagolue to avoid distorting the main census statistics, with C and D replaced with G and H respectively.[4] The symmetries currently supported are:

  • G1 (counterpart to C1)
  • G2_1, G2_2, G2_4[5][note 5]
  • H2_+1, H2_+2 (D2_+1 and D2_+2)[6]
  • H4_+1, H4_+2, H4_+4[7]

Versions 5.061 and above allow GPU searching for any outer-totalistic rule, but not all of them can be searched easily in practice due to common objects meeting the criteria for "interestingness."[6]

Notable patterns

x = 13, y = 10, rule = B3/S23 4bo3bo$2b2obobob2o$bo3bobo3bo$o3b2ob2o3bo$obo7bobo$bo9bo2$4b2ob2o$3bob obobo$4bo3bo! #C [[ THUMBSIZE 2 THEME 6 GRID GRIDMAJOR 0 SUPPRESS THUMBLAUNCH ]] #C [[ THEME 6 GRID GRIDMAJOR 0 THUMBLAUNCH AUTOSTART GPS 4 THUMBSIZE 2 ]]
Rich's p16
(click above to open LifeViewer)
RLE: here Plaintext: here
Also see: Catagolue#Results in Conway's Game of Life

A variety of notable natural and semi-natural (i.e. appearing in symmetric soups) patterns were first discovered using apgsearch:

  • The first known natural occurrence of a nonstandard spaceship was found during alpha testing of the script. The soup, which produced an LWSS on HWSS 1, was posted to the ConwayLife.com forums on August 26, 2014 by Adam P. Goucher.[8] Many other nontrivial spaceship flotillae have since been found.
  • The pufferfish was discovered in the ash of a symmetric soup in November 2014 by Richard Schank.[9]
  • The first known natural occurrence of a puffer other than the block-laying or glider-producing switch engine, a p1152 made from two switch engines dubbed the pony express, was found in September 2015 by Apple Bottom.[10]
  • 112P15 was first discovered in the ash of a symmetric soup in April 2016 by Maia Karpovich.[11]
  • Rich's p16 was first discovered in the ash of a symmetric soup in July 2016 by Rich Holmes.[12]
  • Maia Karpovich's discovery of a period 28 pre-pulsar-shuttle variant in November 2016 enabled the construction of smaller (in terms of minimum population) period 26 and period 28 pre-pulsar-shuttles.[13]
  • 34P14.1 was first discovered in the ash of a symmetric soup in September 2018 by carybe, but was not noticed on Catagolue until October.[14]
  • 68P9 was first discovered in the ash of a symmetric soup in October 2018 by carybe.[15]
  • 42100M was first discovered in October 2018 by Dave Greene, only two days after apgsearch added support for detecting methuselahs, becoming the longest-lasting known methuselah within a 16 × 16 bounding box at the time.[16] A month later, this was followed by Homer, discovered by Adam P. Goucher and lasting 42883 generations.[17]
  • Dueling banjos was first discovered in the ash of a symmetric soup in January 2019, in a tetramer form by Apple Bottom.[18]
  • The record-breaking methuselah 47575M was first discovered in February 2019 by Adam P. Goucher, outlasting Homer by nearly 5000 generations.[19]
  • Rob's p16 was first discovered by Rob Liston in February 2020 via GPU search, becoming the smallest known p16 oscillator and the first asymmetric object discovered by soup search since the 1980s.[20]
  • The record-breaking methuselah 49768M was first discovered in April 2020 by Rob Liston, outlasting 47575M by over 2000 generations.[21]
  • The record-breaking methuselah 50093M was first discovered in January 2021 by Rob Liston, outlasting 49768M by about 300 generations.[22]
  • The record-breaking methuselah 52513M was first discovered in January 2021 by Dylan Chen, outlasting 50093M by over 2000 generations.[23]
  • 32P21 was first discovered by the Charity Engine distributed computing project in February 2022 using apgsearch, becoming the smallest known p21 oscillator.[24]
  • 30P25 was first discovered by the Charity Engine distributed computing project in May 2022 using apgsearch, becoming the smallest known p25 oscillator.[25]

Other rare objects found by apgsearch in asymmetric soups are smiley, Achim's p8, Elkies' p5, heart, Silver's p5, phoenix 1, the Coe ship, the lightweight Schick engine, the sidecar, the loafer, and a burloaferimeter variant. Sample soups submitted to Catagolue have also led to cheaper glider syntheses for many patterns, including tumbler, eater 2, smiley, and unix. Additionally, the copperhead first emerged from a D2_+2 soup in April 2016 only a month after its initial discovery by zdr, followed by several more later in the year.[26]

Other rules

apgsearch has the ability to run soup searches for various rules other than Conway's Game of Life. In the past, this was restricted to outer-totalistic rules with two states, but versions v4.x and later have added support for various families of rules over time. However, only non-exploding rules can reasonably be investigated in practice unless a certain symmetry can be assured to never explode.

As of v4.86, apgsearch officially supports the following types of cellular automata:

The Moore neighbourhood and hexagonal neighbourhood are the currently the only directly supported neighbourhoods, although the von Neumann neighbourhood can be indirectly simulated by isotropic Moore rules and the Margolus neighbourhood (specifically block cellular automata) can be simulated by inflated soups on specific rules.

Hexagonal symmetries

Symmetric soups can also be run for rules other than Conway's Game of Life. However, many of the symmetries of the Moore neighbourhood do not apply to the hexagonal grid, and hexagonal rules must therefore use a separate set of symmetries. As of January 2019, this includes the following:

  • C1, 8x32, 4x64, 2x128: for asymmetric 256-cell soups of size 16 × 16, 8 × 32, 4 × 64, and 2 × 128 respectively
  • C2_1, C2_2: 180° (two-fold) rotational symmetry
  • C3_1: 120° (three-fold) rotational symmetry
  • C6: 60° (six-fold) rotational symmetry
  • D2_x, D2_xo, 1x256: reflectional symmetry along a single line
  • D4_x1, D4_x4: reflectional symmetry along two perpendicular lines
  • D6_1, D6_1o: reflectional symmetry along three lines through a common center
  • D12: reflectional symmetry along six lines through a common center

The symmetries C3_3 and D6_3, as well as various gutter symmetries, are also possible but have yet to be implemented.[27]

Limitations

Also see: Catagolue#Limitations

Although apgsearch has bespoke support for flotillae composed of standard spaceships in Conway's Life,[note 6] it can fail to properly separate larger non-interacting groups, or groups of any size in non-Life rules. Pseudo still lifes composed of many constituent parts may also fail to be separated properly.[29]

The maximum period for spaceships and oscillators is 1,000 in apgsearch 1.x, 4,000 in apgnano (apgsearch 2.x), 1,280 in apgmera (apgsearch 3.x), and 1,048,576 in apgluxe (apgsearch 4.x and 5.x); higher-period objects are classified as PATHOLOGICAL. High-period linear-growth patterns may not be identified and instead reported as zz_LINEAR. Additionally, the maximum bounding box for any spaceship, oscillator or still life in versions 3.x and before is 40 × 40 due to the limits of the standard apgcode format; larger objects are classified as ov_ (oversized) in these versions.

Version history

Python versions

Two versions of apgsearch, versions 0.x and 1.x, were written in Python for use in Golly.

Version 0.x

apgsearch v0.x was the initial version of the script, first published on September 8, 2014. When running the script, the user is first prompted to enter the number of soups to be searched, the rule under which to search, and the initial seed for soup generation. The script proceeds to search soups in sets of 100 until either the specified number of soups has been exceeded, or the user stops the search by pressing <q>. After the search finishes, Golly opens an HTML window which displays the results.[30] praosylen modified this version to allow soup-searching non-totalistic cellular automata, and made a later modification to allow the results to be uploaded to Catagolue.

Version 1.x

apgsearch v1.x was first released on February 20, 2015. The main improvements from version 0.x are the ability to search symmetrical soups and the periodic uploading of results to Catagolue.[31] apgsearch 1.x supports the following different (pseudo-)symmetries:

  • C1
  • C2_1, C2_2, C2_4
  • C4_1, C4_4
  • D2_+1, D2_+2
  • D2_x
  • D4_+1, D4_+4
  • D4_x1, D4_x4
  • D8_1, D8_4
  • 8x32

C++ versions

Four versions of apgsearch, versions 2.x through 5.x, were written in C++. These versions are much faster, and are intended to be run from the command line of a Unix shell.

Version 2.x

apgsearch v2.x, codenamed apgnano, was first published on July 19, 2015 and released onto the conwaylife.com forums on July 28. It uses a bespoke algorithm called Life128, partially written in assembly language for speed, and can utilize both the SSE2 instruction set on x86_64 CPUs. It can only search asymmetric (C1) 16 × 16 soups in Conway Life (B3/S23).[32]

Version 3.x

apgsearch v3.x, codenamed apgmera, was first published on March 3, 2016 and released onto the conwaylife.com forums on March 19. It uses an algorithm called vlife, and unlike version 2.x, it supports arbitrary outer-totalistic rules, as well as the full range of symmetries from apgsearch 1.1. It can use any of the SSE2, AVX1 and AVX2 instruction sets on x86_64 CPUs.

Although the main program is written in C++, version 3.x contains a shell script and a Python file to generate assembly code for different rules and symmetries.[33]

Version 4.x

apgsearch v4.x, codenamed apgluxe and based on lifelib, introduced the following features:

  • Support for B0 rules.[34][35]
  • Support for Generations rules (without B0).[36]
  • Cleaner separation of the different algorithmic layers.[37]
  • Support for two different containers, based on HashLife and vlife respectively.[37]
  • Support for 4 × 64, 2 × 128 and 1 × 256 soups.[38]
    • Indirect support for some one-dimensional cellular automata using one-cell-thick soups (for example, b026s1 simulates Wolfram rule 2166637080)
  • An 8% increase in speed in lifelib compared to vlife in version 3.x.
  • Improved object detection, including:
    • Support for extended ("greedy") apgcodes
    • Proper detection of oscillator and spaceship periods up to 1,048,576 (220)[39]

Version 4.1 was released on August 21, 2017, and incorporated another rule family, namely:

  • Support for Larger than Life rules with a range of up to 7.[36][40]
  • Support for "inflating" soups of arbitrary symmetry (v4.15).[2][41]
    • Indirect support for certain Margolus rules, using said inflated soups alongside rules simulating block cellular automata.

Version 4.2 was released on September 10, 2017:

Version 4.3 was released in June, 2018:

Version 4.4 was released in June, 2018:

  • General speed improvements:
    • Special backend for Conway's Game of Life based on a 19-operation circuit by Tomas Rokicki.[47]
    • Much faster handling of slow 'tail' soups across all rules.
    • Faster oscillator and spaceship classification.
  • Reduced memory consumption.[48]

Version 4.5 was released in August, 2018:

Version 4.6 was released in October, 2018:

Version 4.7 was released in December, 2018:

Version 4.8 was released in January, 2019:

Version 4.9 was released in February, 2019:

  • Approximate 50% speed improvement for Conway's Game of Life and certain related rules due to detection of escaping gliders.[64][65]

Version 5.x

apgsearch v5.x was first published on March 20, 2019.[4] The salient new features are:

  • Improved methodology for splitting work between CPU cores, ensuring threads are not idle.
  • Support for soup searching on a GPU using CUDA.[66]
  • Various refactoring and simplification of the underlying code.
  • Detection of 'megasized' methuselahs with a final population exceeding 3000 in Conway's Game of Life. (v5.03)[67][68]

Version 5.1 was released in April, 2020:

  • Improved CUDA implementation, making b3s23/G1 searching roughly twice as fast as before.[69][70]

Version 5.2 was released in October, 2020:

  • Improved object separation.[71]

Version 5.3 was released in January, 2022:

  • Improved object separation.[72][73]
  • Improved CUDA implementation for H2 and H4 symmetries. (v5.34)[74][75]
  • Support for G2_1, G2_2, and G2_4 symmetries. (v5.35)[5][76]

Support for the following features was added in an unknown update:

  • Support for range-2 far corners, range-3 far edges and range-2 von Neumann isotropic non-totalistic rules.

Upcoming features

The following features are planned for subsequent releases:

See also

Notes

  1. Only methuselahs lasting at least 25,000 generations, diehards lasting at least 500 generations, and soups with final populations of at least 3,000 are reported, and only in Conway's Game of Life.
  2. 2.0 2.1 apgsearch estimates the lifespan of each soup before testing it more precisely, and is not guaranteed to detect all methuselahs with a lifespan of less than 26,000 generations.
  3. The 25% pseudo-symmetry was also briefly used but abandoned due to conflicts with percent-encoding for URIs/URLs.
  4. A soup is deemed interesting if it fails to stabilize with period 6 within 21,000 generations or reaches the boundary of the finite universe (excluding escaping gliders and standard spaceships) considered by the GPU. Large still lifes, low-period oscillators, and diehards are therefore usually ignored.
  5. Currently only supported by B3/S23.
  6. This formerly excluded MWSS on HWSS 15 and HWSS on HWSS 10.[28] The issue has since been fixed, but it means that the frequency statistics for these two spaceships are somewhat skewed.

References

  1. Adam P. Goucher (August 4, 2017). Re: Hacking apgsearch (discussion thread) at the ConwayLife.com forums
  2. 2.0 2.1 Adam P. Goucher (September 2, 2017). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  3. "Census results for B3/S23/"Saka_Test"". Catagolue. Retrieved on December 21, 2016.
  4. 4.0 4.1 Adam P. Goucher (March 20, 2019). apgsearch v5.0 (discussion thread) at the ConwayLife.com forums
  5. 5.0 5.1 Adam P. Goucher (August 5, 2022). Message in #general-discussion on the Conwaylife Lounge Discord server
  6. 6.0 6.1 Adam P. Goucher (March 30, 2019). Re: apgsearch v5.0 (discussion thread) at the ConwayLife.com forums
  7. Arie Paap (April 1, 2019). Re: apgsearch v5.0 (discussion thread) at the ConwayLife.com forums
  8. Adam P. Goucher (August 26, 2014). Re: Thread For Your Accidental Discoveries (discussion thread) at the ConwayLife.com forums
  9. Richard Schank (November 24, 2014). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  10. gameoflifeboy (September 28, 2015). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  11. Maia Karpovich (April 5, 2016). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  12. Ivan Fomichev (July 5, 2016). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  13. Apple Bottom (November 17, 2016). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  14. praosylen (October 11, 2018). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  15. praosylen (October 2, 2018). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  16. Ian07 (October 31, 2018). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  17. Adam P. Goucher (November 30, 2018). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  18. Matthias Merzenich (January 11, 2019). Re: Oscillator Discussion Thread (discussion thread) at the ConwayLife.com forums
  19. Ian07 (February 10, 2019). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  20. Matthias Merzenich (February 10, 2020). Re: Oscillator Discussion Thread (discussion thread) at the ConwayLife.com forums
  21. Ian07 (April 23, 2020). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  22. Ian07 (January 9, 2021). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  23. creeperman7002 (January 17, 2021). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  24. David Raucci (February 11, 2022). Re: Oscillator Discussion Thread (discussion thread) at the ConwayLife.com forums
  25. cvojan (May 18, 2022). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  26. Apple Bottom (April 4, 2016). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  27. 27.0 27.1 27.2 Adam P. Goucher (December 20, 2018). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  28. Adam P. Goucher (July 18, 2019). Re: Thread for basic questions (discussion thread) at the ConwayLife.com forums
  29. Park Shinhwan (박신환) (November 28, 2016). Re: Soup search results (discussion thread) at the ConwayLife.com forums
  30. Adam P. Goucher (September 8, 2014). apgsearch: a high-performance soup searcher (discussion thread) at the ConwayLife.com forums
  31. Adam P. Goucher (February 20, 2015). apgsearch v1.0 (discussion thread) at the ConwayLife.com forums
  32. Adam P. Goucher (July 28, 2015). apgsearch v2.2 (discussion thread) at the ConwayLife.com forums
  33. Adam P. Goucher (March 19, 2016). apgsearch v3.1 (discussion thread) at the ConwayLife.com forums
  34. 34.0 34.1 Adam P. Goucher (August 3, 2017). Re: apgsearch v3.1 (discussion thread) at the ConwayLife.com forums
  35. Adam P. Goucher (August 19, 2017). "B0 support". GitLab.
  36. 36.0 36.1 36.2 Adam P. Goucher (August 4, 2017). Re: apgsearch v3.1 (discussion thread) at the ConwayLife.com forums
  37. 37.0 37.1 Adam P. Goucher (August 13, 2017). Re: Extending apgcodes to larger patterns (discussion thread) at the ConwayLife.com forums
  38. Adam P. Goucher (August 11, 2017). "More symmetries". GitLab.
  39. lifelib v1.22, classifier.h line 434
  40. Adam P. Goucher (August 21, 2017). "Larger than Life". GitLab.
  41. Adam P. Goucher (September 2, 2017). "Inflated symmetries". GitLab.
  42. Adam P. Goucher (September 10, 2017). "Supports non-totalistic rules". GitLab.
  43. Adam P. Goucher (June 3, 2018). "LtL Generations". GitLab.
  44. Adam P. Goucher (June 3, 2018). "Isotropic Generations". GitLab.
  45. Adam P. Goucher (June 3, 2018). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  46. Adam P. Goucher (June 3, 2018). "Support genera". GitLab.
  47. Adam P. Goucher (June 12, 2018). "Merge branch 'b3s23life' into 'master'". GitLab.
  48. Adam P. Goucher (June 4, 2018). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  49. Adam P. Goucher (October 28, 2018). Re: apgsearch 4.0 (discussion thread) at the ConwayLife.com forums
  50. Adam P. Goucher (October 28, 2018). "Preliminary support for methuselahs". GitLab.
  51. Apple Bottom (2018-11-03). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  52. Adam P. Goucher (October 29, 2018). "BSFKL rulespace". GitLab.
  53. Adam P. Goucher (November 6, 2018). Re: Thread for basic non-CGOL questions (discussion thread) at the ConwayLife.com forums
  54. Adam P. Goucher (November 7, 2018). "Higher-range outer-totalistic rules". GitLab.
  55. Adam P. Goucher (December 1, 2018). Re: Non-totalistic hex rules (discussion thread) at the ConwayLife.com forums
  56. Adam P. Goucher (December 1, 2018). "Hexagonal rules". GitLab.
  57. Ian07 (December 11, 2018). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  58. Adam P. Goucher (December 11, 2018). "Detect messless methuselahs". GitLab.
  59. Adam P. Goucher (December 19, 2018). Re: apgsearch v4.0 (discussion thread) at the ConwayLife.com forums
  60. Adam P. Goucher (December 19, 2018). "Support two more hexagonal symmetries". GitLab.
  61. Adam P. Goucher (December 20, 2018). "More hexagonal symmetries". GitLab.
  62. Adam P. Goucher (January 9, 2019). "Support for custom rules and neighbourhoods". GitLab.
  63. Adam P. Goucher (January 15, 2019). "Native support for Extended Generations and Deficient rules courtesy of M. I. Wright". GitLab.
  64. Adam P. Goucher (February 4, 2019). Re: apgsearch v4.9 (discussion thread) at the ConwayLife.com forums
  65. Adam P. Goucher (February 4, 2019). "Escaping glider detection". GitLab.
  66. Adam P. Goucher (March 20, 2019). "Working GPU version". GitLab.
  67. Adam P. Goucher (March 24, 2019). Re: apgsearch v5.0 (discussion thread) at the ConwayLife.com forums
  68. Adam P. Goucher (March 24, 2019). "Log soups with final population exceeding 3000 -- thanks to 'testitemqlstudop' for the suggestion". GitLab.
  69. Adam P. Goucher (April 24, 2020). Message in #tools on the Conwaylife Lounge Discord server
  70. Adam P. Goucher (April 24, 2020). "Include faster GPU implementation". GitLab.
  71. Adam P. Goucher (October 15, 2020). "Better object separation". GitLab.
  72. Adam P. Goucher (January 18, 2022). Re: apgsearch v5.0 (discussion thread) at the ConwayLife.com forums
  73. Adam P. Goucher (January 18, 2022). "Correct object separation". GitLab.
  74. Adam P. Goucher (August 5, 2022). Message in #general-discussion on the Conwaylife Lounge Discord server
  75. Adam P. Goucher (August 5, 2022). "Make higher symmetries 3x faster on GPU for b3s23". GitLab.
  76. Adam P. Goucher (August 5, 2022). "Add new GPU symmetries: G2_1, G2_2, G2_4". GitLab.
  77. Adam P. Goucher (August 5, 2017). Re: Hacking apgsearch (discussion thread) at the ConwayLife.com forums

External links

Code repositories

Forum threads