Lightcone
Lightcone
I haven't run all that many large-scale searches with it yet, but I expect it will be able to find a handful of new elementary conduits.
It's currently missing symmetry support, so using it to find new oscillators is a bit limited.
Re: Lightcone
Brute Force and Just-in-time
To search for conduits, an obvious method is to simply test each possible arrangement of catalysts and check whether all the catalysts recover. This is the approach taken by the original version of CatForce by Michael Simkin, hence the name.
Original CatForce does cut down on the search space slightly by first calculating the reaction envelope of the input pattern and making sure that at least one catalyst lies in that envelope. After that, though, all possible placements for the other catalysts are tried (within user-specified bounds). This is the case even if the other catalysts do not interact with the pattern at all! Original CatForce applies most of its filtering after a candidate configuration has already been run all the way through.
For a small number of catalysts, say 1 to 3, this strategy can run to completion in a reasonable amount of time. And if many of the catalysts are expected to be transparent the brute force approach is not too wasteful, because the configurations have to be run to completion to determine whether these transparent catalysts recover (although testing non-interacting catalyst placements is still pointless). One spectacular example is this Herschel-to-MWSS partial found by Tanner Jacobi.
Code: Select all
x = 32, y = 32, rule = LifeHistory
20.B3D2B$19.BD2BDB$20.3BD2B$19.D3BDB$20.3BD2B$19.BDBD2B$20.6B$19.6B$
20.6B$19.6B$20.6B$12.B6.6B$11.3B6.6B$9.6B4.7B$3.4B2.7B3.8B$.27B$B2A
26B$3AB2A21BD2B$B2AB3AB2E16BDBD2B$3AB2A2B2E16BDBD2B$2A25BD4B$5.26B$7.
B2.20B$10.19B$10.17B$10.18B$11.5B.11B$11.4B2.12B$18.4B.2BE3B$23.BEBE
2B$24.2E2B$26.B!On its own this is a huge improvement, because the reaction envelope can vary a lot after just a single catalyst placement.
Code: Select all
x = 62, y = 46, rule = LifeHistory
50.B$45.7B$45.8B$45.9B$45.10B$45.9B$46.8B$43.11B$43.12B3D$42.13BDBD$
41.14BDBDB$40.2B3D11BD2B$40.10B2D7B$39.BD5BDB2D2BD7B$38.2BD5B2DBDBD8B
$38.2BD5BD3BD10B$38.24B$39.2B.3D16B$43.B.3BD10B$46.2BD9B$46.2BD8B$38.
C7.11B$38.3C5.11B$41.C4.12B$12.4B24.2C3.B.11B$11.2D5B22.18B$11.2D5B2D
22.17B$12.6B2D22.13BD4B$11.9B21.14BD5B$9.5BD5B19.16BD4B$7.7BD5B17.23B
$7.2BA4BD3B.B2C15.2BA19B$6.3BABA4B3.BC.C13.3BABA7BD8B$7.2B3A4B6.C14.
2B3A7BD7B$6.5BA4B6.2C12.5BA7BD7B$5.10B20.10B2.8B$4.4B26.4B10.7B$3.4B
26.4B12.6B$2.4B26.4B12.7B$.4B26.4B14.6B$4B26.4B14.6B$3B26.4B15.7B$2B
26.4B16.6B$B26.4B18.4B$26.4B19.4B$25.4B21.2B!Contacts and Approaches
The first new idea, which functions independently of the others, is to only try placements where the active pattern is in the right shape for the catalysis to succeed. Let us consider the ordinary eater.
Code: Select all
x = 39, y = 7, rule = LifeHistory
5.A9.2A8.A10.A$5.A.A7.2A8.A9.A.A$4.D2A7.D2A7.DA8.DA2.A$2.2CD7.2CD7.2C
D7.2CD.2A$.C.C7.C.C7.C.C7.C.C$.C9.C9.C9.C$2C8.2C8.2C8.2C!If the initial interaction does not match, it is overwhelmingly likely that the catalyst is going to explode rather than recovering, and so knowing the contact points let us cut down the number of placements to check. Looking at the upper contact cell for the eater, a birth is caused when it gains exactly two active neighbours. When iterating through the reaction envelope, we only need to consider offsets for the eater that put that contact cell next to exactly two active cells.
Beyond just checking the contact point, we can look at more of the active pattern. The following (contrived) situation has the correct neighbour counts, but is also overwhelmingly likely to not work because the active pattern has the wrong shape.
Code: Select all
x = 6, y = 6, rule = LifeHistory
3A.A$4.DA$2.2CD$.C.C$.C$2C!Code: Select all
x = 6, y = 6, rule = LifeHistory
2.3DA$2.3DA$2.2C2D$.CDC2D$.C4D$2C!Code: Select all
x = 14, y = 11, rule = LifeHistory
3.2A$3.A5.DC2D$2A.A5.2D3C$A.2A.2A2.5D$5.A.A.DA3D$5.A.4A3D$6.A6.A$7.A
2.4A$6.2A2.A$11.A$10.2A!Problems and their Lightcones
If a non-transparent catalyst is destroyed, it is unlikely to reform by chance. For this reason, most search tools allow the user to specify required cells of the catalyst, which are not allowed to have their state flipped at any point. For the eater, this might be all the marked cells in:
Code: Select all
x = 5, y = 6, rule = LifeHistory
2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!If after advancing the overall state we find that one of these required cells has its state flipped, we can drop that branch of the search: it is safe to assume that the catalyst will never recover.
A required cell failing is an example of what I call a problem that may occur with a given configuration. There are a handful of other problems that Lightcone can currently test for:
- Required cells failing, as above.
- A filter for a particular state failing. For example, you may want to make sure that a glider escapes from a reaction.
- A catalyst failing to recover within a specified time.
- An overall time limit being reached without all catalysts recovered.
- An overall time limit being reached without any catalysts interacting at all
- A catalyst marked "transparent" not actually acting transparently. This is most common with blocks, and is intended to avoid "boring" results.
- A piece of junk surviving for too long.
Here is the next key idea. Rather than waiting until a problem occurs to react to it, at each node of the search tree we can run a lookahead (with no further catalyst placements) to find the next problem that will occur. Once its time and location is known, this is a strong constraint on any possible solution. There must be at least one additional catalyst placement at a time and location that has a chance of averting the problem. That is, there must be at least one catalyst placement that has its contact points within the past lightcone of the problem, and so we can save time by trying to find this catalyst placement first.
For example, consider the following interaction, with the required cells of the eater marked. After 36 generations we encounter a problem: one of the required cells of the eater has flipped.
Code: Select all
x = 46, y = 13, rule = LifeHistory
33.4B$32.A6B$32.2A6B$33.7B$32.10B$30.12B$28.12B2A$A27.12BA2B$A.A8.ACD
13.10B4.A2D$3A7.DC4D12.9B3.DC4D$2.A7.2D3CD11.BA8B3.2D3CD$11.3DCD10.2A
8B5.3DCD$13.3D11.2A14.3D!
Code: Select all
x = 23, y = 15, rule = LifeHistory
8.D2C12D$6.2AD3C11D$6.2A3D2C10D$5.3BCDC2DC9D$3.5B3C2D2C8D$.7BCDCD2C9D
$.7B4D3C8D$2BA5B6D2C7D$.A6B6DC8D$.3A4B7D3C5D$2.6B9DC5D$8.15D$8.15D$8.
15D$8.15D!Code: Select all
x = 21, y = 13, rule = LifeHistory
7.4AB$6.2AB4A$6.AB2AD2C8D$5.3BABDCD2C6D$3.4B2AB2CD2C6D$.6B2ABC10D$.9B
DC9D$10B4D2C5D$.A8B4DC6D$.ABA6B5D3C3D$.2A6B.7DC3D$10.11D$10.11D!Code: Select all
x = 21, y = 14, rule = LifeHistory
18.2A$7.4AB6.A$6.2AB4A3.A.A$6.AB2AD2C2D3C3D$5.3BABDCD3C5D$3.4B2AB2CD
2C6D$.6B2ABC10D$.9BDC9D$10B4D2C5D$.A8B4DC6D$.ABA6B5D3C3D$.2A6B.7DC3D$
10.11D$10.11D!Code: Select all
x = 24, y = 22, rule = LifeHistory
7.2A$8.A$8.A.A11.2A$9.2A11.A$20.A.A$20.2A9$A$A.A$3A$2.A$14.2A$14.A$
15.3A$17.A!Code: Select all
x = 21, y = 21, rule = LifeHistory
12.4D$12.D2CD$13.2A8$A$A.A$3A$2.A2$12.2A3.2D$11.D2CD.AC2D$11.4D.CDCD$
16.2DC2D$17.D2CD$17.4D!So much for the past lightcone of a problem. There is another place that we can use lightspeed considerations to our advantage. As it stands, after we place a catalyst, we begin anew and test all locations in the envelope of the active pattern for whether they are suitable for a catalyst placement. But we don't need to throw away all the work we've already done: the new active reaction can only be different from the previous one within the future lightcone of the placement we just made. Outside that lightcone, the determinations we made for whether a placement is valid can be reused.
Bloom Filter
For some perturbations, there are often multiple catalysts that can cause the same perturbation. The eater 1 and eater 2 are notorious examples.
Code: Select all
x = 37, y = 10, rule = LifeHistory
5.A9.2A8.A9.2A$5.A.A7.2A8.A.A7.2A$5.2A8.2A8.2A8.2A$2.2C8.2C6.C.2C6.C.
2C$.C.C7.C.C4.3C.2C4.3C.2C$.C9.C5.C9.C$2C8.2C6.3C.2C4.3C.2C$20.C.C7.C
.C$20.C.C7.C.C$21.C9.C!Code: Select all
x = 83, y = 39, rule = LifeHistory
46.C19.C$45.C.C17.C.C$45.C.C17.C.C$C19.C22.3C.2C14.3C.2C$3C9.C7.3C9.C
9.C14.C4.C14.C$3.C6.3C10.C6.3C10.3C.2C6.3C5.3C.2C6.3C$2.2C5.C12.2C5.C
15.C.2C5.C10.C.2C5.C$9.2C18.2C23.2C18.2C5$.A8.2C9.A8.2C.C12.A8.2C9.A
8.2C.C$.A.A6.C.C8.A.A6.2C.3C10.A.A6.C.C8.A.A6.2C.3C$.3A8.C8.3A12.C9.
3A8.C8.3A12.C$3.A8.2C9.A6.2C.3C12.A8.2C9.A6.2C.3C$31.C.C42.C.C$31.C.C
42.C.C$32.C44.C2$46.C20.C$11.C20.C12.C.C8.C9.C.C8.C$10.C.C18.C.C11.C.
C7.C.C8.C.C7.C.C$C9.C.C8.C9.C.C9.3C.2C6.C.C6.3C.2C6.C.C$3C6.2C.3C6.3C
6.2C.3C6.C11.2C.3C3.C11.2C.3C$3.C11.C8.C11.C6.3C.2C11.C3.3C.2C11.C$2.
2C5.2C.3C8.2C5.2C.3C9.C.2C5.2C.3C6.C.2C5.2C.3C$9.2C.C17.2C.C20.2C.C
17.2C.C5$.A8.2C10.A8.2C.C11.A8.2C10.A8.2C.C$.A.A6.C.C9.A.A6.2C.3C9.A.
A6.C.C9.A.A6.2C.3C$.3A8.C9.3A12.C8.3A8.C9.3A12.C$3.A8.2C10.A6.2C.3C
11.A8.2C10.A6.2C.3C$32.C.C42.C.C$32.C.C42.C.C$33.C44.C!The criteria for when the active pattern is tested against the Bloom filter were arrived at through trial and error. Right now, the pattern is tested and added to the filter when
- all non-transparent catalysts are present,
- at least two generations have passed since the most recent catalyst was placed, and
- the population of the active pattern is at least 12.
Future Ideas
Lightcone is certainly not the last word in conduit searching. It's much smarter than a brute force search, but still makes choices that are obviously silly to the human eye. I'd love to hear ideas on any of the following topics:
Catalyst Welding
Lightcone only tries placing complete catalysts, and excludes any placement that will cause two catalysts to interact. This will inevitably miss some solutions that involve non-trivial welds to pack catalysts slightly closer together than otherwise possible. One unsatisfying solution is for the user to provide pre-welded catalyst pairs as input, but in an ideal world Lightcone would do this systematically and automatically.
This will likely mean testing all interacting offsets of one catalyst against another, and testing whether a weld is possible. Presumably a SAT solver could make short work of this.
In a branch, I've had a go at implementing this, but the performance hit is unreasonably high (at least with the method I'm using currently).
Avoiding Hopeless Placements
Currently, some time is spent on placements where the recovery sequence of one catalyst leads to a cascade of interactions with additional catalysts. For example, the following completely hopeless chain of block reactions:
Code: Select all
x = 12, y = 10, rule = LifeHistory
3.2A.3A$5.A$2D8.2D$DCA2.2A2.ACD$DCA.D2CD.ACD$2D2.4D2.2D2$.2A6.2A$D2CD
4.D2CD$4D4.4D!Code: Select all
x = 10, y = 11, rule = LifeHistory
2.2A$A.2A$3A$.A2$.2A3.2D$D2CD.AC2D$4D.CDCD$5.2DC2D$6.D2CD$6.4D!Currently, Lightcone always tackles the chronologically earliest problem that occurs with the current configuration. In some situations this leads to poor performance, especially when the active region splits into two fairly separated pieces.
Code: Select all
x = 31, y = 31, rule = LifeHistory
22.2A$17.2A3.A.A2.2A$17.A6.A3.A$9.2A3.2A.A2.4A.3A$9.A4.A.A3.A2.A.A$
10.3A.A8.ABAB3A$12.A.2A2.B3.2B2ABA2.A$13.7B.6B2.2A$15.10B$6.A8.9B$6.
3A6.10B$9.A6.8B$8.2A3.B3.9B$8.8B.9B$10.18B2D$10.18BDBD$9.21BD$7.20BDB
2D$5.22B2D$5.2BC19B$4.3BCBC16B$5.2B3C15B$4.5BC12B.2B$3.10B2.8B$2.4B
10.9B$.4B12.6B.2A$4B12.8B2A$3B14.6B.B$2B15.BDBD$B17.DBD$18.3D!This may be an opportunity for some parallelism: if there are multiple
problems that are lightcone separated, we could attempt to resolve
them in different threads.
Re: Lightcone
Code: Select all
git submodule update --initMake is not Windows, and I have to use WSL which can't use SSH
Re: Lightcone
I checked in both clang64 and ucrt environments. Haven't checked in other environments.
Code: Select all
# install compiler toolchain
pacman -Ss gcc # confirm your package name for gcc
pacman -S mingw-w64-ucrt-x86_64-gcc # use the package name you searched above
pacman -S make
# build
git clone https://github.com/mvr/lightcone.git
cd lightcone
git submodule update --init --recursive
make CXX=g++ LDFLAGS= # default c++ compiler is clang++, so you don't need CXX=clang++ if you're using clang
[1] https://stackoverflow.com/questions/554 ... d-option-z
Re: Lightcone
Code: Select all
first-active-range = [100, 101]
min-stable-time = 40
max-stationary-time = 50
max-transparent = 1
use-bloom-filter = true
pattern-center = [30, 30]
pattern = """
x = 60, y = 60, rule = LifeHistory
BA58B$2BA57B$3A57B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$
60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$
60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$
60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B!
"""
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 120]
transparent = true
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 6,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
- LuveelVoom
- Posts: 899
- Joined: April 27th, 2022, 7:59 pm
- Location: The 102 dimensional INT hypercube
Re: Lightcone
My rules: https://conwaylife.com/forums/viewtopic.php?f=11&t=6843
Free compute: https://conwaylife.com/forums/viewtopic ... 77#p234677
Discord user: LuveelVoom
Re: Lightcone
Code: Select all
first-active-range = [1, 100]
min-stable-time = 10
max-transparent = 1
use-bloom-filter = true
pattern-center = [25, 30]
pattern = """
x = 52, y = 62, rule = LifeHistory
52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$
52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$5.47B$5.47B$.A3.47B$.
2A2.47B$3.A.47B$2.2A.47B$5.47B$5.47B$52B$52B$52B$52B$52B$52B$52B$52B$
52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B$52B!
"""
[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 2, 8,]
required = "4D$D2CD$.2A!"
approaches = [ "2D2A2D$2D2A2D$6D$2DC2D!", "2D2A2D$2D2A2D$6D$.2DC2D!",]
forbidden = [ "2.2A$2.2A$.3D$2DCD$D2C2D$DCDCD$5D!", ".2A$.2A$.3D$2DCD$D2C2D$DCDCD$5D!", "2.2A$2.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", ".2A$.2A$.3D$.DC2D$2D2CD$DCDCD$5D!",]
soup = "4b2o$4b2o5$o4b3o$obo2b3o$3o3bo$o2bob2o$o$b2ob3o$obob2obo$b2o2b2o!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 3, 6,]
required = ".2A$D2CD$4D!"
approaches = [ "D$3D2CD$7D$2D2A3D$2D2A3D!",]
summary = "2.2A$2.2A19$2.2A$.D2CD$.4D15$D$3D2CD$7D$2D2A3D$2D2A3D!"
soup = "10b2o2b2o$9bobob2obo$10b2ob3o$9bo$9bo2bob2o$9b3o3bo$9bobo2b3o$9bo4b3o5$2o$2o!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 6, 6,]
required = "4D$DAC$.2A!"
approaches = [ "2D2A2D$2D2A2D$6D$2DC3D$D3C2D!",]
summary = "2.2A$2.2A18$.4D$.DAC$2.2A19$2D2A2D$2D2A2D$6D$2DC3D$D3C2D!"
soup = "17b2o$17b2o15$3o3bo$3ob2obo$3o$4bob2o$3o2b2o$2obo2b2o$3bo2bo$bo2b3o!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 4, 5,]
required = "2.2D$.ACD$D2CD$4D!"
approaches = [ ".D3CD$6D$3D2AD$3D2AD!",]
summary = "3.2A$3.2A18$4.2D$3.ACD$2.D2CD$2.4D16$.D3CD$6D$3D2AD$3D2AD!"
soup = "o2b4o$3b5o$2obobo$ob4obo$b5o$3o2bo$b2o4bo$5bo3$3b2o$3b2o!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 50]
transparent = true
forbidden = [ ".3D$.DC2D$3DCD$D3CD$5D$4.2A$4.2A!", ".3D$.DC2D$3DCD$D3CD$5D2A$5.2A!", "5.2A$.4D2A$2D2CD$DCDCD$3DCD$2.3D!", "4.2A$4.2A$.4D$2D2CD$DCDCD$3DCD$2.3D!", "2A$2A5D$2.D3CD$2.DC3D$2.2DCD$3.3D!", "2A$2A$.5D$.D3CD$.DC3D$.2DCD$2.3D!", ".3D$.DC3D$.DCDCD$.D2C2D$.4D$2A$2A!", "2.3D$2.DC3D$2.DCDCD$2.D2C2D$2A4D$2A!", "2.3D$.2DCD$.DC3D$.D3CD$.5D$2A$2A!", "3.3D$2.2DCD$2.DC3D$2.D3CD$2A5D$2A!", "5.2A$5D2A$D3CD$3DCD$.DC2D$.3D!", "4.2A$4.2A$5D$D3CD$3DCD$.DC2D$.3D!", "2.3D$3DCD$DCDCD$2D2CD$.4D$4.2A$4.2A!", "2.3D$3DCD$DCDCD$2D2CD$.4D2A$5.2A!", "2A$2A4D$2.D2C2D$2.DCDCD$2.DC3D$2.3D!", "2A$2A$.4D$.D2C2D$.DCDCD$.DC3D$.3D!", "5D$DCDCD$2D2CD$.DC2D$.3D$3.2A$3.2A!", "5D$DCDCD$2D2CD$.DC2D$.3D$2.2A$2.2A!", "5D$DCDCD$2D2CD$.DC2D$.3D$.2A$.2A!", "5D$DCDCD$2D2CD$.DC2D$.3D$2A$2A!", "4D$D2C2D$2D2CD$DC3D2A$3D2.2A!", "4D$D2C2D$2D2CD2A$DC3D2A$3D!", "4D$D2C2D2A$2D2CD2A$DC3D$3D!", "4D.2A$D2C2D2A$2D2CD$DC3D$3D!", "3.2A$3.2A$.3D$2DCD$D2C2D$DCDCD$5D!", "2.2A$2.2A$.3D$2DCD$D2C2D$DCDCD$5D!", ".2A$.2A$.3D$2DCD$D2C2D$DCDCD$5D!", "2A$2A$.3D$2DCD$D2C2D$DCDCD$5D!", "4.3D$2.3DCD$2.D2C2D$2A2D2CD$2A.4D!", "4.3D$2.3DCD$2AD2C2D$2A2D2CD$3.4D!", "4.3D$2A3DCD$2AD2C2D$2.2D2CD$3.4D!", "2A2.3D$2A3DCD$2.D2C2D$2.2D2CD$3.4D!", "5D$DCDCD$D2C2D$2DCD$.3D$3.2A$3.2A!", "5D$DCDCD$D2C2D$2DCD$.3D$2.2A$2.2A!", "5D$DCDCD$D2C2D$2DCD$.3D$.2A$.2A!", "5D$DCDCD$D2C2D$2DCD$.3D$2A$2A!", "3.2A$3.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", "2.2A$2.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", ".2A$.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", "2A$2A$.3D$.DC2D$2D2CD$DCDCD$5D!", "3D$DC3D$2D2CD$D2C2D2A$4D.2A!", "3D$DC3D$2D2CD2A$D2C2D2A$4D!", "3D$DC3D2A$2D2CD2A$D2C2D$4D!", "3D2.2A$DC3D2A$2D2CD$D2C2D$4D!", "3.4D$2.2D2CD$2.D2C2D$2A3DCD$2A2.3D!", "3.4D$2.2D2CD$2AD2C2D$2A3DCD$4.3D!", "3.4D$2A2D2CD$2AD2C2D$2.3DCD$4.3D!", "2A.4D$2A2D2CD$2.D2C2D$2.3DCD$4.3D!",]
Re: Lightcone
It's OK to clone and update :
Code: Select all
git clone "https://github.com/mvr/lightcone.git"
Clonage dans 'lightcone'...
remote: Enumerating objects: 397, done.
remote: Counting objects: 100% (397/397), done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 397 (delta 253), reused 355 (delta 211), pack-reused 0 (from 0)
Réception d'objets: 100% (397/397), 120.32 Kio | 692.00 Kio/s, fait.
Résolution des deltas: 100% (253/253), fait.
cd lightcone
git submodule update --init --recursive
Sous-module 'LifeAPI' (https://github.com/mvr/LifeAPI.git) enregistré pour le chemin 'LifeAPI'
Sous-module 'toml11' (https://github.com/ToruNiina/toml11.git) enregistré pour le chemin 'toml'
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/LifeAPI'...
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/toml'...
Chemin de sous-module 'LifeAPI' : 'de8188f515ce9cce979eb4f2272a9a759a019632' extrait
Sous-module 'xxHash' (https://github.com/Cyan4973/xxHash.git) enregistré pour le chemin 'LifeAPI/xxHash'
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/LifeAPI/xxHash'...
Chemin de sous-module 'LifeAPI/xxHash' : 'dbea33e47e7c0fe0b7c8592cd931c7430c1f130d' extrait
Chemin de sous-module 'toml' : 'cc0bee4fd46ea1f5db147d63ea545208cc9e8405' extrait
Sous-module 'docs/themes/hugo-book' (https://github.com/alex-shpak/hugo-book.git) enregistré pour le chemin 'toml/docs/themes/hugo-book'
Sous-module 'tests/extlib/doctest' (https://github.com/doctest/doctest.git) enregistré pour le chemin 'toml/tests/extlib/doctest'
Sous-module 'tests/extlib/json' (https://github.com/nlohmann/json.git) enregistré pour le chemin 'toml/tests/extlib/json'
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/toml/docs/themes/hugo-book'...
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/toml/tests/extlib/doctest'...
Clonage dans '/home/tawal/Progs_Externs/GOL/lightcone/toml/tests/extlib/json'...
Chemin de sous-module 'toml/docs/themes/hugo-book' : '7c26d9b8b731d556a2bf89848f59e8300eabc44b' extrait
Chemin de sous-module 'toml/tests/extlib/doctest' : 'ae7a13539fb71f270b87eb2e874fbac80bc8dda2' extrait
Chemin de sous-module 'toml/tests/extlib/json' : '8c391e04fe4195d8be862c97f38cfe10e2a3472e' extraitCode: Select all
make
clang++ -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -Itoml/include -o LightCone LightCone.cpp -Wl,-stack_size -Wl,0x1000000
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:29:
toml/include/toml11/compat.hpp:433:30: error: no type named 'source_location' in namespace 'std'
using source_location = std::source_location;
~~~~~^
toml/include/toml11/compat.hpp:435:36: error: unknown type name 'source_location'
inline std::string to_string(const source_location& loc)
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:30:
In file included from toml/include/toml11/context.hpp:4:
In file included from toml/include/toml11/error_info.hpp:4:
In file included from toml/include/toml11/fwd/error_info_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../source_location.hpp:4:
In file included from toml/include/toml11/fwd/source_location_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../region.hpp:4:
In file included from toml/include/toml11/fwd/region_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../location.hpp:4:
In file included from toml/include/toml11/fwd/location_fwd.hpp:4:
toml/include/toml11/fwd/../result.hpp:363:29: error: no type named 'source_location' in namespace 'toml::cxx'
value_type& unwrap(cxx::source_location loc = cxx::source_location::current())
~~~~~^
toml/include/toml11/fwd/../result.hpp:371:35: error: no type named 'source_location' in namespace 'toml::cxx'
value_type const& unwrap(cxx::source_location loc = cxx::source_location::current()) const
~~~~~^
toml/include/toml11/fwd/../result.hpp:391:33: error: no type named 'source_location' in namespace 'toml::cxx'
error_type& unwrap_err(cxx::source_location loc = cxx::source_location::current())
~~~~~^
toml/include/toml11/fwd/../result.hpp:399:39: error: no type named 'source_location' in namespace 'toml::cxx'
error_type const& unwrap_err(cxx::source_location loc = cxx::source_location::current()) const
~~~~~^
toml/include/toml11/fwd/../result.hpp:363:56: error: no member named 'source_location' in namespace 'toml::cxx'
value_type& unwrap(cxx::source_location loc = cxx::source_location::current())
~~~~~^
toml/include/toml11/fwd/../result.hpp:371:62: error: no member named 'source_location' in namespace 'toml::cxx'
value_type const& unwrap(cxx::source_location loc = cxx::source_location::current()) const
~~~~~^
toml/include/toml11/fwd/../result.hpp:391:60: error: no member named 'source_location' in namespace 'toml::cxx'
error_type& unwrap_err(cxx::source_location loc = cxx::source_location::current())
~~~~~^
toml/include/toml11/fwd/../result.hpp:399:66: error: no member named 'source_location' in namespace 'toml::cxx'
error_type const& unwrap_err(cxx::source_location loc = cxx::source_location::current()) const
~~~~~^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:30:
In file included from toml/include/toml11/context.hpp:4:
In file included from toml/include/toml11/error_info.hpp:4:
In file included from toml/include/toml11/fwd/error_info_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../source_location.hpp:4:
In file included from toml/include/toml11/fwd/source_location_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../region.hpp:4:
In file included from toml/include/toml11/fwd/region_fwd.hpp:4:
In file included from toml/include/toml11/fwd/../location.hpp:7:
toml/include/toml11/impl/location_impl.hpp:193:12: error: no matching function for call to 'find_if'
return find_if(first, last, [val](const location::char_type c) {
^~~~~~~
toml/include/toml11/impl/../fwd/location_fwd.hpp:95:1: note: candidate template ignored: substitution failure [with F = (lambda at toml/include/toml11/impl/location_impl.hpp:193:33)]
find_if(const location& first, const location& last, const F& func) noexcept
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
In file included from toml/include/toml11/impl/literal_impl.hpp:5:
toml/include/toml11/impl/../parser.hpp:3604:15: error: no type named 'source_location' in namespace 'toml::cxx'; did you mean simply 'source_location'?
cxx::source_location loc = cxx::source_location::current())
^~~~~~~~~~~~~~~~~~~~
source_location
toml/include/toml11/impl/../fwd/source_location_fwd.hpp:14:8: note: 'source_location' declared here
struct source_location
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
In file included from toml/include/toml11/impl/literal_impl.hpp:5:
toml/include/toml11/impl/../parser.hpp:3604:42: error: no member named 'source_location' in namespace 'toml::cxx'; did you mean simply 'source_location'?
cxx::source_location loc = cxx::source_location::current())
^~~~~~~~~~~~~~~~~~~~
source_location
toml/include/toml11/impl/../fwd/source_location_fwd.hpp:14:8: note: 'source_location' declared here
struct source_location
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
In file included from toml/include/toml11/impl/literal_impl.hpp:5:
toml/include/toml11/impl/../parser.hpp:3604:64: error: no member named 'current' in 'toml::source_location'
cxx::source_location loc = cxx::source_location::current())
~~~~~~~~~~~~~~~~~^
toml/include/toml11/impl/../parser.hpp:3613:9: error: no type named 'source_location' in namespace 'toml::cxx'; did you mean simply 'source_location'?
cxx::source_location loc = cxx::source_location::current())
^~~~~~~~~~~~~~~~~~~~
source_location
toml/include/toml11/impl/../fwd/source_location_fwd.hpp:14:8: note: 'source_location' declared here
struct source_location
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
In file included from toml/include/toml11/impl/literal_impl.hpp:5:
toml/include/toml11/impl/../parser.hpp:3613:36: error: no member named 'source_location' in namespace 'toml::cxx'; did you mean simply 'source_location'?
cxx::source_location loc = cxx::source_location::current())
^~~~~~~~~~~~~~~~~~~~
source_location
toml/include/toml11/impl/../fwd/source_location_fwd.hpp:14:8: note: 'source_location' declared here
struct source_location
^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
In file included from toml/include/toml11/impl/literal_impl.hpp:5:
toml/include/toml11/impl/../parser.hpp:3613:58: error: no member named 'current' in 'toml::source_location'
cxx::source_location loc = cxx::source_location::current())
~~~~~~~~~~~~~~~~~^
In file included from LightCone.cpp:10:
In file included from ./Params.hpp:5:
In file included from toml/include/toml.hpp:40:
In file included from toml/include/toml11/literal.hpp:7:
toml/include/toml11/impl/literal_impl.hpp:71:28: error: no matching function for call to 'parse_comment_line'
auto com_res = parse_comment_line(loc, ctx);
^~~~~~~~~~~~~~~~~~
toml/include/toml11/impl/../parser.hpp:101:1: note: candidate template ignored: substitution failure [with TC = toml::type_config]
parse_comment_line(location& loc, context<TC>& ctx)
^
In file included from LightCone.cpp:10:
./Params.hpp:164:23: error: no matching function for call to 'find_or'
params.outputFile = toml::find_or(toml, "output-file", "lightcone-output.rle");
^~~~~~~~~~~~~
toml/include/toml11/find.hpp:202:1: note: candidate template ignored: could not match 'basic_value<TC>' against 'const char[21]'
find_or(basic_value<TC>& v, const K& k, basic_value<TC>& opt) noexcept
^
toml/include/toml11/find.hpp:215:1: note: candidate template ignored: could not match 'const basic_value<TC>' against 'const char[21]'
find_or(const basic_value<TC>& v, const K& k, const basic_value<TC>& opt) noexcept
^
toml/include/toml11/find.hpp:228:1: note: candidate template ignored: could not match 'basic_value<TC>' against 'const char[21]'
find_or(basic_value<TC>&& v, const K& k, basic_value<TC>&& opt) noexcept
^
toml/include/toml11/find.hpp:246:1: note: candidate template ignored: requirement 'detail::is_exact_toml_type<char[21], toml::basic_value<toml::type_config>>::value' was not satisfied [with T = char[21], TC = toml::type_config, K = char[12]]
find_or(const basic_value<TC>& v, const K& k, const T& opt)
^
toml/include/toml11/find.hpp:263:1: note: candidate template ignored: requirement 'cxx::conjunction<std::negation<std::is_const<const char[21]>>, toml::detail::is_exact_toml_type<const char[21], toml::basic_value<toml::type_config>>>::value' was not satisfied [with T = const char[21], TC = toml::type_config, K = char[12]]
find_or(basic_value<TC>& v, const K& k, T& opt)
^
toml/include/toml11/find.hpp:278:1: note: candidate template ignored: requirement 'detail::is_exact_toml_type<const char *, toml::basic_value<toml::type_config>>::value' was not satisfied [with T = const char *, TC = toml::type_config, K = char[12]]
find_or(basic_value<TC>&& v, const K& k, T opt)
^
toml/include/toml11/find.hpp:297:1: note: candidate template ignored: requirement 'detail::conjunction<std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, false>, std::integral_constant<bool, true>>::value' was not satisfied [with TC = toml::type_config, K = char[12]]
find_or(const basic_value<TC>& v, const K& k, const char* opt)
^
toml/include/toml11/find.hpp:319:1: note: candidate template ignored: requirement 'cxx::conjunction<std::negation<toml::detail::is_basic_value_impl<const char *>>, toml::detail::is_not_toml_type<const char *, toml::basic_value<toml::type_config>>, std::negation<std::is_same<const char *, const char *>>>::value' was not satisfied [with T = const char *, TC = toml::type_config, K = char[12]]
find_or(const basic_value<TC>& v, const K& ky, T opt)
^
toml/include/toml11/find.hpp:347:6: note: candidate function template not viable: requires at least 4 arguments, but 3 were provided
auto find_or(Value&& v, const K1& k1, const K2& k2, K3&& k3, Ks&& ... keys) noexcept
^
toml/include/toml11/find.hpp:364:3: note: candidate function template not viable: requires at least 4 arguments, but 3 were provided
T find_or(const basic_value<TC>& v, const K1& k1, const K2& k2, const K3& k3, const Ks& ... keys) noexcept
^
LightCone.cpp:403:55: warning: unused parameter 'params' [-Wunused-parameter]
void Configuration::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:509:51: warning: unused parameter 'params' [-Wunused-parameter]
void Lookahead::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
2 warnings and 20 errors generated.
make: *** [Makefile:15 : LightCone] Erreur 1How can I correct these errors ?
Thanks.
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Re: Lightcone
Here is the related installed packages :
Code: Select all
dpkg -l | grep clang
ii clang 1:14.0-55.7~deb12u1 amd64 C, C++ and Objective-C compiler (LLVM based), clang binary
ii clang-14 1:14.0.6-12 amd64 C, C++ and Objective-C compiler
ii clang-14-doc 1:14.0.6-12 all C, C++ and Objective-C compiler - Documentation
ii libclang-common-14-dev 1:14.0.6-12 all Clang library - Common development package
ii libclang-cpp13 1:13.0.1-11+b2 amd64 C++ interface to the Clang library
ii libclang-cpp13-dev 1:13.0.1-11+b2 amd64 C++ interface to the Clang library
ii libclang-cpp14 1:14.0.6-12 amd64 C++ interface to the Clang library
ii libclang-rt-14-dev:amd64 1:14.0.6-12 amd64 Compiler-rt - development package
ii libclang1-14 1:14.0.6-12 amd64 C interface to the Clang libraryThanks.
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Re: Lightcone
I'd installed clang-15.
Also, I'd updated the alternatives links :
Code: Select all
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-15 100Code: Select all
make
clang++ -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -Itoml/include -o LightCone LightCone.cpp -Wl,-stack_size -Wl,0x1000000
LightCone.cpp:403:55: warning: unused parameter 'params' [-Wunused-parameter]
void Configuration::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:509:51: warning: unused parameter 'params' [-Wunused-parameter]
void Lookahead::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:728:14: error: no matching constructor for initialization of 'LookaheadOutcome'
return LookaheadOutcome(problem, bloomSeenGen, timeoutGen, winnerGen, winner);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LightCone.cpp:471:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 5 were provided
struct LookaheadOutcome {
^
LightCone.cpp:471:8: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 5 were provided
LightCone.cpp:471:8: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 5 were provided
LightCone.cpp:775:69: warning: unused parameter 'search' [-Wunused-parameter]
PlacementValidity TestPlacement(const SearchData &data, SearchNode &search,
^
3 warnings and 1 error generated.
make: *** [Makefile:15 : LightCone] Erreur 1Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Code: Select all
return LookaheadOutcome(problem, bloomSeenGen, timeoutGen, winnerGen, winner);Code: Select all
return {problem, bloomSeenGen, timeoutGen, winnerGen, winner};Re: Lightcone
And get this new error now :
Code: Select all
make
clang++ -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -Itoml/include -o LightCone LightCone.cpp -Wl,-stack_size -Wl,0x1000000
LightCone.cpp:403:55: warning: unused parameter 'params' [-Wunused-parameter]
void Configuration::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:509:51: warning: unused parameter 'params' [-Wunused-parameter]
void Lookahead::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:775:69: warning: unused parameter 'search' [-Wunused-parameter]
PlacementValidity TestPlacement(const SearchData &data, SearchNode &search,
^
LightCone.cpp:17:12: warning: variable 'debug_bloom_pattern' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_pattern = "";
^
LightCone.cpp:18:12: warning: variable 'debug_bloom_key' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_key = "";
^
5 warnings generated.
/usr/bin/ld : avertissement : le groupement des options courtes de la ligne de commande est obsolète : -stack_size
/usr/bin/ld : Erreur : incapable de résoudre les ambigüités : -stack_size (voulez-vous dire --stack_size ?)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:15 : LightCone] Erreur 1Here is my gcc version :
Code: Select all
gcc --version
gcc (Debian 12.2.0-14) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Code: Select all
LDFLAGS = -Wl,-stack_size -Wl,0x1000000Re: Lightcone
mvr wrote: March 26th, 2025, 9:56 am Now you'll have to change the Makefile and delete the lineCode: Select all
LDFLAGS = -Wl,-stack_size -Wl,0x1000000
Until you answer, I've made some searches.
And try :
Code: Select all
LDFLAGS = -Wl,-zsatck_size=0x1000000By deleting the 'LDFLAGS = …' line as you tell, I get exactly the same error as my last attempt shown above :
Code: Select all
make
clang++ -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -Itoml/include -o LightCone LightCone.cpp
LightCone.cpp:403:55: warning: unused parameter 'params' [-Wunused-parameter]
void Configuration::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:509:51: warning: unused parameter 'params' [-Wunused-parameter]
void Lookahead::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:775:69: warning: unused parameter 'search' [-Wunused-parameter]
PlacementValidity TestPlacement(const SearchData &data, SearchNode &search,
^
LightCone.cpp:17:12: warning: variable 'debug_bloom_pattern' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_pattern = "";
^
LightCone.cpp:18:12: warning: variable 'debug_bloom_key' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_key = "";
^
5 warnings generated.
/usr/bin/ld: /tmp/lto-llvm-ec9b57.o: attention: réadressage sur « _ZNSt12out_of_rangeD1Ev@@GLIBCXX_3.4 » dans la section en lecture seule « .text._ZN4toml12format_errorB5cxx11ERKNS_10error_infoE[_ZN4toml12format_errorB5cxx11ERKNS_10error_infoE] »
/usr/bin/ld: /tmp/lto-llvm-ec9b57.o: réadressage R_X86_64_PC32 vers symbole « _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4 » ne peut pas être utilisé en créant un objet PIE; recompilez avec -fPIE
/usr/bin/ld : échec de l'édition de liens finale : mauvaise valeur
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:15 : LightCone] Erreur 1Code: Select all
CXXFLAGS = -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -fPIECode: Select all
make
clang++ -std=c++20 -Wall -Wextra -pedantic -O3 -DNDEBUG -march=native -mtune=native -flto -fno-stack-protector -fomit-frame-pointer -fno-pic -fPIE -Itoml/include -o LightCone LightCone.cpp
LightCone.cpp:403:55: warning: unused parameter 'params' [-Wunused-parameter]
void Configuration::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:509:51: warning: unused parameter 'params' [-Wunused-parameter]
void Lookahead::MakePlacement(const SearchParams ¶ms, const CatalystData &catalyst,
^
LightCone.cpp:775:69: warning: unused parameter 'search' [-Wunused-parameter]
PlacementValidity TestPlacement(const SearchData &data, SearchNode &search,
^
LightCone.cpp:17:12: warning: variable 'debug_bloom_pattern' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_pattern = "";
^
LightCone.cpp:18:12: warning: variable 'debug_bloom_key' is not needed and will not be emitted [-Wunneeded-internal-declaration]
const auto debug_bloom_key = "";
^
5 warnings generated.Now I have to test it with an example …
Thanks a lot.
Edit:
I'm glad I managed to compile lightcone with your advice.
But I'll try it later as I've already got some research going on.
I'll be back to tell you how it goes.
Edit2:
Great it works fine
I've launched this command line from the lightcone directory :
Code: Select all
./LightCone tests/minimal.tomlCode: Select all
Winner: 28$32b2o$32b2o3$32b3o$28b2o2bobo2b2o$28b2o2bobo2b2o!
Winner: 28$33b2o$33b2o3$32b3o$28b2o2bobo2b2o$28b2o2bobo2b2o!
Winner: 28$32b2o$32b2o3$32b3o$28b2o2bobo$28b2o2bobo!
Winner: 27$32b2o$32b2o5b2o$39bo$37bobo$37b2o$32b3o$28b2o2bobo$28b2o2bobo!
Winner: 26$38bo$36b3o$35bo$35b2o3$32b3o$28b2o2bobo$28b2o2bobo!
Winner: 27$32b2o$32b2o4$32b3o$28b2o2bobo$28b2o2bobo!
…
beaucoup. (Thank you very much)Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
But I think as my matter is solved that the discussion around is closed.
I've made a bash script to create a .rle file with the results (in the directory of the input file).
It outputs that "LightCone is laucnhing" then outputs the number of results found (number of "Winner" lines).
At the end, it outputs the 'Bloom Filter' results.
It creates a rle file with the results vertically arranged and spaced by default by 50 empty lines (this value can be changed on the command line).
(edit: I added an option '-t' to get the Too Long results in another rle file calling Input_Name_Too_Long.rle)
Here is the script :
Code: Select all
#!/usr/bin/bash
### HERE THE ABSOLUTE PATH TO 'LightCone' EXECUTABLE ####
LightCone="/home/tawal/Progs_Externs/GOL/lightcone/LightCone"
if [ -f "$1" ]
then
file_out="${1%.*}.rle"
else
>&2 echo "Bad file : '$1'"
exit 1
fi
# Number of vertically empty lines between 2 results.
# You can lanch the script with an affectation of this variable on the command line like this :
# Space=80 lightcone.sh in_file
[ -z "$Space" ] && Space=50
s="$Space$'$'"
too_long_file=""
while getopts :t opt
do
case sopt in
t) too_long_file="${1%.*}_Too_Long.rle"
echo "x = 0, y = 0, rule = Life" > "$too_long_file"
;;
*) echo "Bad option : '$OPTARG'"
exit 1
;;
esac
done
shift $((OPTIND-1))
echo "Launching 'LightCone' …"
echo "x = 0, y = 0, rule = Life" > "$file_out"
while read -r l
do
if [[ "$l" =~ ^Winner:\ (.*)$ ]]
then
echo "${BASH_REMATCH[1]%!}$s" >> "$file_out"
((n++))
tput dl1
echo -n "$n results …"
elif [ -n "$too_long_file" ] && [[ "$l" =~ ^Too\ Long:\ (.*)$ ]]
then
echo "${BASH_REMATCH[1]%!}$s" >> "$too_long_file"
elif [[ "$l" =~ ^B ]]
then
echo -e "\n$l"
fi
done < <("$LightCone" "$1")
[ "$(wc -l < "$file_out")" -eq 1 ] && rm "$file_out"
[ -f "$too_long_file" ] && [ "$(wc -l < "$too_long_file")" -eq 1 ] && rm "$too_long_file"
Code: Select all
./lightcone.sh H_to_edgychaos.toml
Launching 'LightCone' …
20 results …
Bloom filter population: 39
Bloom filter approx : 39
Bloom filter error rate: 0I just have to open it in Golly to see the results.
The file is "real time" created : I mean as soon as a Winner line appears, the script appends the result in the rle file.
So you can see some results during the execution of the script.
Edit:
I'm looking for adding an option to get the "Too Long" results in another file.
As this will come soon, I'll edit this post …
Done.
Edit:
Corrected an error on regex.
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Re: Lightcone
Code: Select all
min-stable-time = 40
max-stationary-time = 40Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
max-stationary-time is the maximum time that any ash is allowed to sit before the configuration is discarded
Re: Lightcone
On this search pattern :
Code: Select all
x = 20, y = 20, rule = LifeHistory
20B$20B$20B$20B$20B$20B$20B$20B$20B$5.15B$5.15B$3A2.15B$2.A2.15B$3A2.
15B$11.9B2$4.2A$4.A$5.3A$7.A!Code: Select all
first-active-range = [0, 50]
min-stable-time = 30
max-catalyst = 3
use-bloom-filter = true
pattern-center = [10, 10]
pattern = """
x = 20, y = 20, rule = LifeHistory
20B$20B$20B$20B$20B$20B$20B$20B$20B$5.15B$5.15B$3A2.15B$2.A2.15B$3A2.
15B$11.9B2$4.2A$4.A$5.3A$7.A!
"""
[[filter]]
rle = "$b2o$bo$2b3o$4bo!"
filter-pos = [14, 26]
filter-gen = 50
filter-type = "EXACT"
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [4, 16]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approach = "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 16]
required = ".2D$ACD$ACD$.2D!"
approach = ".3D$4D$2D2A$CD2A$4D$4D!"
Code: Select all
Winner: 29$22b2o$22b2o3$22b3o2b2o$24bo2b2o$22b3o3$26b2o$26bo$27b3o$29bo!
Winner: 33$22b3o$24bo5b2o$22b3o5b2o3$26b2o$26bo$27b3o$29bo!
Winner: 28$32b2o$32bobo$34bo$34b2o2$22b3o$24bo5b2o$22b3o5b2o3$26b2o$26bo$27b3o$29bo!
Winner: 23$29bo$27b3o$26bo$26b2o7$22b3o$24bo$22b3o3$26b2o$26bo$27b3o$29bo!
Winner: 27$31b2o$31b2o5$22b3o$24bo$22b3o3$26b2o$26bo$27b3o$29bo!
Winner: 23$34bo$32b3o$31bo$31b2o6$32b2o$22b3o7bobo$24bo9bo$22b3o9b2o3$26b2o$26bo$27b3o$29bo!
Winner: 32$31b2o$22b3o6bo$24bo7b3o$22b3o9bo3$26b2o$26bo$27b3o$29bo!
Winner: 28$33b2o$33b2o4$22b3o$24bo$22b3o3$26b2o$26bo$27b3o$29bo!
Winner: 31$33b2o$33bobo$22b3o10bo$24bo10b2o$22b3o3$26b2o$26bo$27b3o$29bo!
Winner: 24$36b2o$36bo$34bobo$34b2o6$22b3o$24bo$22b3o3$26b2o$26bo$27b3o$29bo!
Bloom filter population: 1078
Bloom filter approx : 1078
Bloom filter error rate: 0
Code: Select all
x = 0, y = 0, rule = B3/S23
23$34bo$32b3o$31bo$31b2o6$32b2o$22b3o7bobo$24bo9bo$22b3o9b2o3$26b2o$26bo$27b3o$29bo!
#C [[ STOP 38 ]]Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Re: Lightcone
And it has a nasty habit of locking up active regions … which leads to a lot of useless results.
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ
Re: Lightcone
Ok, I've copied over the EVER and EXACT filters, and this file now works:
Code: Select all
first-active-range = [0, 50]
min-stable-time = 30
max-catalyst = 3
use-bloom-filter = true
pattern-center = [10, 10]
pattern = """
x = 20, y = 20, rule = LifeHistory
20B$20B$20B$20B$20B$20B$20B$20B$20B$5.15B$5.15B$3A2.15B$2.A2.15B$3A2.
15B$11.9B2$4.2A$4.A$5.3A$7.A!
"""
[[filter]]
filter = """
x = 4, y = 4, rule = LifeHistory
2C$C$.3C$3.C!
"""
filter-pos = [-6, 6]
filter-gen = 50
filter-type = "EXACT"
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [4, 16]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approach = "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!"
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 16]
required = ".2D$ACD$ACD$.2D!"
approach = ".3D$4D$2D2A$CD2A$4D$4D!"
Re: Lightcone

I also see that you solved/removed the "Lookahead" matter I've encountered. Thanks.
I still had to remove the LDFLAGS line in the Makefile.
(edit: I had to add -fPIE option in the CXXFLAGS line)
I had these "verbose" lines in the LightCone.cpp :
Code: Select all
int main(int, char *argv[]) {
if constexpr (print_progress) {
std::cout << "Loading parameters …" << std::endl;
}
…
if constexpr (print_progress) {
std::cout << "Searching …" << std::endl;
}
RunSearch(params, data, search, problem);
if constexpr (print_progress) {
std::cout << "End of search." << std::endl;
}Edit: Ideas for ameliorations
A real time writing result in a file.
A command line option to split the results file belong a given number (avoiding to have a too big result file).
I have already made this on my bash script
I'm pretty sure you feel when I use DeepL or not
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ