Page 1 of 1

Small growing seeds

Posted: January 2nd, 2017, 2:00 pm
by fluffykitty
Previous discussion is here
This thread is for finding rules which produce large patterns from small seeds. Github repo here.
I think 4-state VN or 3-state Moore will reach 1 million cells. Anyways, post any record-breaking patterns here!

Re: Small growing seeds

Posted: January 11th, 2017, 8:15 pm
by Rocknlol
Here's a rule optimized for 3-cell seed growth. The largest-growing 3-cell and 4-cell seeds I've looked at in this rule both have had a final population of 74249.

Code: Select all

@RULE Growth3

@TABLE

n_states:3
neighborhood:vonNeumann
symmetries:rotate4reflect

var a={1,2}
var b=a
var c=a
var d=a
var e={0,1}

0,0,0,e,1,2
0,0,0,a,2,a
0,0,1,0,1,2
0,0,a,0,2,1
0,0,a,1,a,2
0,1,1,1,1,2
0,1,a,1,2,a
0,a,2,2,2,a
1,0,0,0,a,0
1,0,0,1,1,0
1,0,1,0,1,2
1,0,2,1,2,0
1,1,1,1,2,0
1,1,2,2,2,2
2,0,0,0,1,1
2,0,1,1,1,0
2,e,2,1,2,1

Code: Select all

x = 9, y = 9, rule = Growth3
A4$4.A4$8.A!

Code: Select all

x = 9, y = 9, rule = Growth3
A2$6.B2$4.A4$8.A!
I'm also attaching the (very crude!) scripts I made to search for 3 and 4-cell seeds:

Code: Select all

import golly as g

minpop = 200
maxpop = 1000000
genlength = 10240
rule = g.getrule()

for i in range(1,1025):
  g.open(g.getdir('rules') + '\\3_cell_seeds\\' + str(i) + '.rle')
  g.setrule(rule)
  g.run(genlength/5)
  if int(g.getpop()) < maxpop:	
    g.run(genlength/5)
    if int(g.getpop()) < maxpop:
      g.run(genlength/5)
      if int(g.getpop()) < maxpop:
        g.run(genlength/5)
        if int(g.getpop()) < maxpop:
          popone = int(g.getpop())
          g.run(genlength/5)
          poptwo = int(g.getpop())
      popstring = g.getpop()
      g.reset()
      if int(popstring) > minpop and poptwo - popone < genlength/5 and int(popstring) < maxpop:
        g.save(g.getdir('rules') +  '\\seeds\\' + popstring + '.rle', 'rle', False)

Code: Select all

import golly as g
		
popone = 0
poptwo = 0

minpop = 200
maxpop = 1000000
genlength = 10240

for i in range(0,255):
  for j in range(i+1,255):
    for k in range(j+1,255):
      for l in range(k+1,255):
        g.setcell(i%16,i/16,1)
        g.setcell(j%16,j/16,1)
        g.setcell(k%16,k/16,1)  
        g.setcell(l%16,l/16,1)
        g.run(genlength/5)
        if int(g.getpop()) < maxpop:	
          g.run(genlength/5)
          if int(g.getpop()) < maxpop:
           g.run(genlength/5)
           if int(g.getpop()) < maxpop:
             g.run(genlength/5)
             if int(g.getpop()) < maxpop:
               popone = int(g.getpop())
               g.run(genlength/5)
               poptwo = int(g.getpop())
        popstring = g.getpop()
        g.reset()
        if int(popstring) < maxpop and int(popstring) > minpop and poptwo - popone < genlength/5:
          g.save(g.getdir('rules') + '\\seeds\\' + popstring + '.rle', 'rle', False)
        g.setcell(i%16,i/16,0)
        g.setcell(j%16,j/16,0)
        g.setcell(k%16,k/16,0)
        g.setcell(l%16,l/16,0)
The 3-cell seed script runs through a pregenerated list of 1024 seeds (every valid seed that only has state cells). It runs each seed for a time, periodically checking to see if it has exceeded a maximum population limit. If by the end it hasn't, is above a minimum population limit, and isn't still growing, the seed is saved with the final population as its name.

The 4-cell seed script is similar to the 3-cell seed one, except it just runs through every possible combination of cell positions. This means that most of the runs are redundant, and that combined with the higher possible number of seeds means that the 4-cell script is much, much slower than the 3-cell one.

To run the 4-cell script, create a folder called "seeds" in the rules directory. To run the 3-cell script, create the seeds folder and extract all the seeds in the attachment below to a folder called "3_cell_seeds" in the rules directory.

Re: Small growing seeds

Posted: January 16th, 2017, 12:17 pm
by fluffykitty
Added. Also, Growth2 no longer holds any records.

EDIT: Uhh...are you using Windows? On my (Mac) laptop, it's spewing a large number of seeds into my rules folder.

Re: Small growing seeds

Posted: January 22nd, 2017, 3:22 pm
by Rocknlol
fluffykitty wrote:Uhh...are you using Windows? On my (Mac) laptop, it's spewing a large number of seeds into my rules folder.
Yes, I'm using WIndows, so there might be some odd behavior on Macs although I don't know how that would be. It's saving seeds in the rules folder instead of the seeds folder in the rules folder?

Re: Small growing seeds

Posted: January 22nd, 2017, 4:05 pm
by BlinkerSpawn
Did you create the seeds folder and the script can't find it or did you not create the seeds folder?

Re: Small growing seeds

Posted: January 22nd, 2017, 9:25 pm
by fluffykitty
I made a seeds folder in my rules folder and I have a bunch of files like "\seeds\201.rle".

Re: Small growing seeds

Posted: January 22nd, 2017, 9:38 pm
by BlinkerSpawn
fluffykitty wrote:I made a seeds folder in my rules folder and I have a bunch of files like "\seeds\201.rle".
So these are in your seeds folder?
Can you post (or maybe PM to Rocknlol since I haven't dealt with this script) a screenshot of your seed situation?

Re: Small growing seeds

Posted: January 23rd, 2017, 1:01 am
by Rocknlol
If all of those seeds are in the seeds folder then the script is working as intended.

If the number of seeds that the script creates is starting to becoming overwhelming, then you can raise the "minpop" variable and the smaller seeds won't be saved.

Re: Small growing seeds

Posted: January 23rd, 2017, 11:58 am
by fluffykitty
fluffykitty wrote:I made a seeds folder in my rules folder and I have a bunch of files like "\seeds\201.rle".
...In my rules folder.

Re: Small growing seeds

Posted: January 23rd, 2017, 1:46 pm
by Rocknlol
Okay, in that case I think I know what the problem is.

Try these scripts:

Code: Select all

import golly as g

minpop = 200
maxpop = 1000000
genlength = 10240
rule = g.getrule()

for i in range(1,1025):
  g.open(g.getdir('rules') + '/3_cell_seeds/' + str(i) + '.rle')
  g.setrule(rule)
  g.run(genlength/5)
  if int(g.getpop()) < maxpop:   
    g.run(genlength/5)
    if int(g.getpop()) < maxpop:
      g.run(genlength/5)
      if int(g.getpop()) < maxpop:
        g.run(genlength/5)
        if int(g.getpop()) < maxpop:
          popone = int(g.getpop())
          g.run(genlength/5)
          poptwo = int(g.getpop())
      popstring = g.getpop()
      g.reset()
      if int(popstring) > minpop and poptwo - popone < genlength/5 and int(popstring) < maxpop:
        g.save(g.getdir('rules') +  '/seeds/' + popstring + '.rle', 'rle', False)

Code: Select all

import golly as g
      
popone = 0
poptwo = 0

minpop = 200
maxpop = 1000000
genlength = 10240

for i in range(0,255):
  for j in range(i+1,255):
    for k in range(j+1,255):
      for l in range(k+1,255):
        g.setcell(i%16,i/16,1)
        g.setcell(j%16,j/16,1)
        g.setcell(k%16,k/16,1)  
        g.setcell(l%16,l/16,1)
        g.run(genlength/5)
        if int(g.getpop()) < maxpop:   
          g.run(genlength/5)
          if int(g.getpop()) < maxpop:
           g.run(genlength/5)
           if int(g.getpop()) < maxpop:
             g.run(genlength/5)
             if int(g.getpop()) < maxpop:
               popone = int(g.getpop())
               g.run(genlength/5)
               poptwo = int(g.getpop())
        popstring = g.getpop()
        g.reset()
        if int(popstring) < maxpop and int(popstring) > minpop and poptwo - popone < genlength/5:
          g.save(g.getdir('rules') + '/seeds/' + popstring + '.rle', 'rle', False)
        g.setcell(i%16,i/16,0)
        g.setcell(j%16,j/16,0)
        g.setcell(k%16,k/16,0)
        g.setcell(l%16,l/16,0)