Variable Life Search (VLS)

For scripts to aid with computation or simulation in cellular automata.
Post Reply
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Variable Life Search (VLS)

Post by speedydelete »

This is a new supercharged version of lifesrc that I wrote in C and TypeScript. I think it is generally faster than all other lifesrc-style programs. (LLS does not count here because it is not really a lifesrc, however I intend to surpass LLS at some point.) It is as general as LLS, the "variable" means that it supports variables like in LLS, making searches much more general. It can for instance search for catalysts like Barrister (however this is currently extremely slow), or do complicated oscillator searches. Source code is available here.

To install on Linux or WSL:

Code: Select all

git clone https://github.com/speedydelete/lifeweb
cd lifeweb
./install
It depends on gcc and NodeJS. The installer will automatically install the best way to install Node on Linux, however do not try this on Macs. I repeat, do not run ./install on Macs until you have installed Node separately from here. If the installer script fails, just try reloading your shell and run it again (it needs to update PATH), if it still fails, ask here, and please provide the error message.

To get some information about how to use it, run ./vls -h.

Here are some example searches:

Code: Select all

# finds the glider
./vls B3/S23 periodic 'c/4d' 4 4
# does not finds the glider because of how the bounding box works
# generations 0 to <period> must fit in the box
# this is not the same as rlifesrc
./vls B3/S23 periodic 'c/4d' 3 4
# finds the xWSSes
./vls B3/S23 periodic '2c/4o' 7 9
# finds all 3x3 c/2o's in INT
./vls B/S B1e2345678/S012345678 periodic 'c/2o' 3 3
# disproves 8x8 (2, 1)c/3 in OT (outer-totalistic, aka life-like) rules
./vls B2/S B2345678/S012345678 periodic '(2, 1)c/3' 8 8 -rulespace=ot -o='g-f2b'
# find all parents of the glider
./vls B3/S23 parent 'bo$2bo$3o!'
There is much more functionality than described here, it's in the help text.

There is very advanced duplicate solution detection, however it is still broken in a few places. It also keeps track of and reports max partials.

Search order is an important part of using VLS effectively, it is set via the -o option. For instance, the OT 8x8 (2, 1)c/3 search above would take far too long with f2b search order, but it is very quick with g-f2b. However, some searches are slower with g-f2b. This is explained in more detail in the help text (including fully custom search orders), but the basics is, you can provide "f2b" (front to back, the default), "b2f" (back to front), and "s2s" (side to side), but you can also prefix them with the g- option, which makes it find all generations of the row before going on to the next, this can increase or decrease speed depending on the search.

There are a few options that can increase the speed depending on the search. I don't fully understand what causes them to be faster and not faster. They are -no-cache-trs, --check-times, and -clang.
Last edited by speedydelete on September 16th, 2026, 5:20 pm, edited 2 times in total.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Re: Variable Life Search (VLS)

Post by speedydelete »

I've updated the program and the above post to use a different option format.

To update VLS, just do "./update" in the lifeweb directory.

Also, the goals of VLS are to be as fast and user-friendly as possible, those are the two most important things.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
splitterrules
Posts: 118
Joined: April 11th, 2025, 6:11 pm

Re: Variable Life Search (VLS)

Post by splitterrules »

I tried running "./vls B3/S23 periodic 'c/4d' 4 4" and it gave me these errors:
Screenshot 2026-09-14 120222.png
Screenshot 2026-09-14 120222.png (96.17 KiB) Viewed 358 times
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Re: Variable Life Search (VLS)

Post by speedydelete »

splitterrules wrote: September 14th, 2026, 12:04 pm I tried running "./vls B3/S23 periodic 'c/4d' 4 4" and it gave me these errors:
Screenshot 2026-09-14 120222.png
Should be fixed now, update your VLS using "./update". Also, you seem to be using an old version of gcc, perhaps you should update it too.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Re: Variable Life Search (VLS)

Post by speedydelete »

BREAKING CHANGE:

For spaceship searches the bounding box now includes the location of the spaceship AT generation <period>, so "./vls B3/S23 periodic c/4d 3 4" no longer finds the glider (but "4 4" does).

I've also added input files! These are kind of a mini programming language that you use to specify problems, for more information see this document. The "VLSFile.rule" is available here.

For example, this file searches for a completion to the B3/S23-a5 boat-based stable reflector partial:

Code: Select all


pattern 16 gens

5 = unknown

gen 0:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$24.A7.16D$25.3A4.
16D$22.2A4.A3.16D$25.A2.2A2.16D$24.A.A2.A2.16D$27.2A3.16D$32.16D$32.16D
$32.16D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D
$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!

4 = nop

gen 1:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$25.2A5.16D$23.5A
4.16D$24.2A2.2A2.16D$23.3A.3A2.16D$25.2A2.A2.16D$27.2A3.16D$32.16D$32.
16D$32.16D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!

gens 2 to 10:
x = 64, y = 64, rule = VLSFile
64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B
$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$
64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B
$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B$64B!

4 = unknown
0 = unknown
6 = off
gen 11:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$22.4F6.16D
$22.FA2F6.16D$22.F2AF6.16D$22.FA2F6.16D$22.4F6.16D$32.16D$32.16D$32.16D
$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D
$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!
gen 12:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$21.5F6.16D
$21.2F2AF6.16D$21.F3AF6.16D$21.2F2AF6.16D$21.5F6.16D$32.16D$32.16D$32.
16D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!
gen 13:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$21.6F5.16D
$21.FA4F5.16D$21.FAF2AF5.16D$21.FA4F5.16D$21.6F5.16D$32.16D$32.16D$32.
16D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!
gen 14:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$20.5F7.16D
$20.3FAF7.16D$20.F2A2F7.16D$20.3FAF7.16D$20.5F7.16D$32.16D$32.16D$32.
16D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!
4 = nop
0 = off
delete 6

gen 15:
x = 64, y = 64, rule = VLSFile
E16$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$32.16D$22.
A9.16D$22.2A3.A4.16D$22.A3.A.A3.16D$27.2A3.16D$32.16D$32.16D$32.16D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.32D$16.
32D$16.32D$16.32D$16.32D$16.32D$16.32D16$63.E!

The state 5 cells are just being used to make it convenient to increase the bounding box by a large amount.

For these catalyst searches, this search order should be used to speed it up: "t, max(abs(x-X)\,abs(y-Y))", where X and Y are the coordinates of the first catalyst cell that interacts with the active region, using coordinates where the top left is (0, 0), X axis increases right, Y axis increases downwards.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
splitterrules
Posts: 118
Joined: April 11th, 2025, 6:11 pm

Re: Variable Life Search (VLS)

Post by splitterrules »

VLS now works for most commands, but when I try "./vls B/S B1e2345678/S012345678 periodic 'c/2o' 3 3", this happens:
Screenshot 2026-09-16 133844.png
Screenshot 2026-09-16 133844.png (20.99 KiB) Viewed 240 times
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Re: Variable Life Search (VLS)

Post by speedydelete »

I'm currently working on making:
- Better symmetry specification and searching
- Tree search (breadth-first)
- CDCL - I think this plus tree search will make it faster than ikpx2!
splitterrules wrote: September 16th, 2026, 1:44 pm VLS now works for most commands, but when I try "./vls B/S B1e2345678/S012345678 periodic 'c/2o' 3 3", this happens:
Screenshot 2026-09-16 133844.png
This is fixed now, again, I am very sorry.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
User avatar
TheWayOfTheCon
Posts: 378
Joined: March 28th, 2025, 11:40 pm
Location: Always moving, always traveling through time

Re: Variable Life Search (VLS)

Post by TheWayOfTheCon »

Code: Select all

 ~ 
$ git clone https://github.com/speedydelete/lifeweb
Cloning into 'lifeweb'...
remote: Enumerating objects: 10316, done.
remote: Counting objects: 100% (239/239), done.
remote: Compressing objects: 100% (153/153), done.
remote: Total 10316 (delta 164), reused 140 (delta 73), pack-reused 10077 (from 2)
Receiving objects: 100% (10316/10316), 2.15 MiB | 11.53 MiB/s, done.
Resolving deltas: 100% (7980/7980), done.

 ~
$ cd lifeweb

 ~/lifeweb
$ ./install
Cannot find Node
Would you like to install Node (Warning: this will modify PATH and .bashrc)? (y/n): y
./install: line 15: wget: command not found
I haven't been able to do ./install on my Windows computer, even with Nodejs downloaded seperately.
I could've chose a better username, but oh well.

I think I've learned the ropes of cellular automata. My current interest is range-two LTLs.
splitterrules
Posts: 118
Joined: April 11th, 2025, 6:11 pm

Re: Variable Life Search (VLS)

Post by splitterrules »

This worked when I tried it:

Code: Select all

sudo apt install nodejs npm
speedydelete wrote: September 16th, 2026, 5:53 pm snip
Thank you!
User avatar
speedydelete
Posts: 129
Joined: October 7th, 2025, 9:44 pm
Contact:

Re: Variable Life Search (VLS)

Post by speedydelete »

TheWayOfTheCon wrote: September 17th, 2026, 12:35 am I haven't been able to do ./install on my Windows computer, even with Nodejs downloaded seperately.
Yes, VLS cannot be used on Windows without the use of Windows Subsystem for Linux (WSL). Even if you got the ./install working, the program itself would probably fail.
I manage the 5S project, which collects all known spaceship speeds in certain rulespaces.
Post Reply