I've just pushed `2345a0101a81` which includes:
(*) `--constraint statorless`. Only allowed for oscillator searches and refuses any cell to be on in all generations.
(*) `--maxpop GG:PP`. A semi-usable version of the "minpop" hacks ("min" in that they solved the CA problem of minimum pop for a given type of pattern but "max" in that the searches are constrained to a max).
As an example, with 2c4a.in:
Code: Select all
| | | 111 | ... |
| 111 | ... | ... | ... |
| ... | ... | ... | ... |
| ... | ... | | |
You could run:
Code: Select all
rlife llsss-recentering-wao 2c4-f2b 2c4a.in 00 --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --max-pop 00:12 --ends none XX
rlife llsss-recentering-wao 2c4-f2b 2c4a.in 00 --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --max-pop 01:12 --ends none XX
to search for pop 12 or less 2c/4 asymmetric ships. The first would get:
Code: Select all
20240719 11:56:32 [INFO] End (pop 12) [best gen (9, 1) < us (12, 0)]:
20240719 11:56:32 [INFO] | | | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ....*.... | ...***... |
20240719 11:56:32 [INFO] | ....*.... | ...***... | ...***... | ...*..*.. |
20240719 11:56:32 [INFO] | ...***... | ..*..*... | ...*.**.. | ...*..... |
20240719 11:56:32 [INFO] | ..**.*... | .....*... | ....***.. | ...*..... |
20240719 11:56:32 [INFO] | ..***.... | .....*... | ....**... | ....*.*.. |
20240719 11:56:32 [INFO] | ...**.... | ..*.*.... | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | | |
20240719 11:56:32 [INFO] End (pop 12) [best gen (9, 1) < us (12, 0)]:
20240719 11:56:32 [INFO] | | | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ....*.... | ...***... |
20240719 11:56:32 [INFO] | ....*.... | ...***... | ...***... | ..*..*... |
20240719 11:56:32 [INFO] | ...***... | ...*..*.. | ..**.*... | .....*... |
20240719 11:56:32 [INFO] | ...*.**.. | ...*..... | ..***.... | .....*... |
20240719 11:56:32 [INFO] | ....***.. | ...*..... | ...**.... | ..*.*.... |
20240719 11:56:32 [INFO] | ....**... | ....*.*.. | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:56:32 [INFO] | ......... | ......... | | |
while the second would get:
Code: Select all
20240719 11:57:03 [INFO] End (pop 9):
20240719 11:57:03 [INFO] | | | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ....*.... | ...***... |
20240719 11:57:03 [INFO] | ....*.... | ...***... | ...***... | ...*..*.. |
20240719 11:57:03 [INFO] | ...***... | ..*..*... | ...*.**.. | ...*..... |
20240719 11:57:03 [INFO] | ..**.*... | .....*... | ....***.. | ...*..... |
20240719 11:57:03 [INFO] | ..***.... | .....*... | ....**... | ....*.*.. |
20240719 11:57:03 [INFO] | ...**.... | ..*.*.... | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | | |
20240719 11:57:03 [INFO] End (pop 9):
20240719 11:57:03 [INFO] | | | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ....*.... | ...***... |
20240719 11:57:03 [INFO] | ....*.... | ...***... | ...***... | ..*..*... |
20240719 11:57:03 [INFO] | ...***... | ...*..*.. | ..**.*... | .....*... |
20240719 11:57:03 [INFO] | ...*.**.. | ...*..... | ..***.... | .....*... |
20240719 11:57:03 [INFO] | ....***.. | ...*..... | ...**.... | ..*.*.... |
20240719 11:57:03 [INFO] | ....**... | ....*.*.. | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | ......... | ......... |
20240719 11:57:03 [INFO] | ......... | ......... | | |
...
20240719 11:57:04 [INFO] End (pop 11):
20240719 11:57:04 [INFO] | | | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | .....*..... | ....***.... |
20240719 11:57:04 [INFO] | .....*..... | ....***.... | ....***.... | ....*..*... |
20240719 11:57:04 [INFO] | ....***.... | ...*..*.... | ....*.**... | ....*...... |
20240719 11:57:04 [INFO] | ...**.*.... | ......*.... | .....***... | ....*...*.. |
20240719 11:57:04 [INFO] | ...***..... | ..*...*.... | .....***... | ....*...... |
20240719 11:57:04 [INFO] | ...***..... | ......*.... | .....**.... | .....*.*... |
20240719 11:57:04 [INFO] | ....**..... | ...*.*..... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | | |
20240719 11:57:04 [INFO] End (pop 11):
20240719 11:57:04 [INFO] | | | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | .....*..... | ....***.... |
20240719 11:57:04 [INFO] | .....*..... | ....***.... | ....***.... | ...*..*.... |
20240719 11:57:04 [INFO] | ....***.... | ....*..*... | ...**.*.... | ......*.... |
20240719 11:57:04 [INFO] | ....*.**... | ....*...... | ...***..... | ..*...*.... |
20240719 11:57:04 [INFO] | .....***... | ....*...*.. | ...***..... | ......*.... |
20240719 11:57:04 [INFO] | .....***... | ....*...... | ....**..... | ...*.*..... |
20240719 11:57:04 [INFO] | .....**.... | .....*.*... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | ........... | ........... |
20240719 11:57:04 [INFO] | ........... | ........... | | |
So what's going on here? All of this is just running a 2c/4 f2b WAO search from zeros with arbitrary width:
Code: Select all
rlife llsss-recentering-wao 2c4-f2b 2c4a.in 00 --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL ... XX
This middle bit is the interesting part:
Code: Select all
... --max-pop 00:12 --ends none ...
... --max-pop 01:12 --ends none ...
It disables the default zero ends and enables the max-pop code which does three things:
(*) Filters the ongoing search to only contains parts of partials that are 12 or fewer cells in gen 00 or gen 01. Note that which generations need to be run depends on geometry (e.g. for 2c/4 gen 02 is same as gen 00). Also note the the root labels have to be 0, 1, or 2 and indicate the weight of that spine so it can be set up to count even or odd searches correctly.
(*) Outputs completed patterns that meet the same bound. Patterns which meet an even smaller bound in a different generation or the same bound in an earlier generation are tagged so it's clear they're duplicated. No sort of symmetry checking is done.
(*) Halts the search if ever there is a horizontal strip of zeros that is globally there in all partials. This will allow searches to terminate as long as the population bound is less than twice the smallest result.
As another example, with c3o.in:
Code: Select all
| | | 1222 |
| .... | .... | .... |
| .... | .... | .... |
| .... | | |
You could run:
Code: Select all
rlife llsss-recentering-wao c3-f2b c3o.in 00 --left-edge odd --wao-left-edge-errors --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --max-pop 00:34 --ends none XX
rlife llsss-recentering-wao c3-f2b c3o.in 00 --left-edge odd --wao-left-edge-errors --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --max-pop 01:34 --ends none XX
rlife llsss-recentering-wao c3-f2b c3o.in 00 --left-edge odd --wao-left-edge-errors --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --max-pop 02:34 --ends none XX
to search for pop 34 or less c/3 odd ships. The first would get:
Code: Select all
20240719 12:12:50 [INFO] End (pop 34):
20240719 12:12:50 [INFO] | .......... | .......... | .......... |
20240719 12:12:50 [INFO] | .......... | .......... | .......... |
20240719 12:12:50 [INFO] | *......... | *......... | **........ |
20240719 12:12:50 [INFO] | .*........ | **........ | **........ |
20240719 12:12:50 [INFO] | ..*....... | ..*....... | ..*....... |
20240719 12:12:50 [INFO] | **........ | **........ | .......... |
20240719 12:12:50 [INFO] | .......... | ***....... | ..*....... |
20240719 12:12:50 [INFO] | ..**...... | ..*....... | ..**.*.... |
20240719 12:12:50 [INFO] | .*...*.... | .*..***... | .*.**.*... |
20240719 12:12:50 [INFO] | .*...**... | .**..**... | .***...*.. |
20240719 12:12:50 [INFO] | .*.....*.. | .*..*..*.. | .*.*.**... |
20240719 12:12:50 [INFO] | .*.**.*... | ..*....... | .......... |
20240719 12:12:50 [INFO] | .......... | .......... | .......... |
20240719 12:12:50 [INFO] | .......... | .......... | |
This is pretty similar but...
(*) We've added `--left-edge odd` and also `--wao-left-edge-errors` to allow WAO to place first errors inside that left edge.
(*) We've labelled with roots "1222" instead since all but the leftmost spine should be double counted.
(*) We have to run gen 00, 01, and 02 for c/3 if we want to find everything.
As a final example, with p3.in:
Code: Select all
| 111 | 111 | 111 |
| ... | ... | ... |
| ... | ... | ... |
| ... | ... | ... |
You could run:
Code: Select all
rlife llsss-recentering-wao p3 p3.in 00 --wao-left-pad 00 --wao-right-pad 00 --wao-idx ALL --constraint statorless --max-pop 00:12 --ends none XX
to search for statorless p3 oscillators up to 12 cells. This is very similar but we've just added `--constraint statorless` to only find statorless oscillators and for geometry p3 we only need to check gen 00.
This is of course all very complicated but at least it's now published and can stop bitrotting every time I change something on the master branch. Please, please, if you're going to try to use any of this mess, drop your plans/ideas here for a consult (and/or read the various posts above when this feature was first in the works, but even so I'd still recommend a consult).