La mère du maire est allée à la mer.

Partially -but only partially- off topic.

NO3-50-1999-2004

Annunci

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, … BIS

The Bernoulli excursions for 6 steps, enumerated by the Catalan sequence for n=3.
We have 5 different excursions, leaving the x-axis at the first move and coming back
after 6 moves. Some of them come back to the x-axis during the trip.
The colums of the Catalan triangle classify the excursions according to the number of times they come back during the trip: 2 times (#1), 1 times (#2) and zero times (#2). The line to be used in the case of n=3 is the line n=2 of the triangle shown in the previous post.
Cat_Tria

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, …

Catalan numbers are an interesting sequence of integers, among many applications they have in counting problems they enumerate the celebrated Bernoulli excursions.
The n-th Catalan number can be obtained using the Catalan triangle:

n\k_____0_______1_______2_______3_______4_______5_______6_______7
0_______1
1_______1_______1
2_______1_______2_______2
3_______1_______3_______5_______5
4_______1_______4_______9_______14______14
5_______1_______5_______14______28______42______42
6_______1_______6_______20______48______90______132_____132
7_______1_______7_______27______75______165_____297_____429_____429
Each element in the triangle is obtained taking what he has at his
left plus what he has on the top.
Each column of the triangle has a nice counting property, it enumerates the subset
of Bernoulli excursions touching the x-axis a fixed number of times.
The leftmost column counts for the single Bernoulli excursion touching the maximum number of times the x-axis whilst the rightmost column enumerates the excursions with minimum number of times. The inner columns enumerate all the intermediate cases …
next post for a picture to show this in practice 🙂

GOING SMOOTHER

With an additive rule adding one or zero according to
an ordering between the cell and its two near neighbors we get 1024 different
CA. The plots seems smoother and the complexity lower than in the cases shown before.
Rule 364 shows some familiar triangular structure but fading away …
plot_256_383
As for the previous post … to generate the plots above, I used the following rattlesnake script:

# Script to generate simple Cellular Automata
# PL 26.VI.2015

import numpy as np
import matplotlib.pyplot as plt

# Aux Functions
########################################

def rule_creator_1024(rule):

    a = map(int,bin(rule)[2:].zfill(10)) # rule creator

    return a


def CA(rule,cells3):

    a = cells3[0];
    b = cells3[1];
    c = cells3[2];
    
    if ( a > b) & (a > c ) & ( b > c)  : nn = 0
    if ( a > b) & (a > c ) & ( b < c)  : nn = 1
    
    if ( b > a) & (b > c ) & ( a > c)  : nn = 2
    if ( b > a) & (b > c ) & ( a < c)  : nn = 3
    
    if ( c > a) & (c > b ) & ( a > b)  : nn = 4
    if ( c > a) & (c > b ) & ( a < b)  : nn = 5

    if ( a == b)                       : nn = 6
    if ( b == c)                       : nn = 7
    if ( a == c)                       : nn = 8
    if ( a == b) & (a == c)            : nn = 9
    return rule[nn]   
    
# Main program
########################################

N=30 # Number of Cellular Automata Steps

# memory matrix init

dat=np.zeros([N,N*4+1],np.int)

dat[0,2*N]=1;

cells3=[0,0,0];

plt.figure(figsize=(20, 20))

# do the job 

counter = 0

for rule in range(1024):

    print "Rule Number -->", rule

    plt.subplot(16,8,(rule)%128+1)

    res=rule_creator_1024(rule)

    for stp in np.arange(1,N):
        for i in np.arange(1,4*N):

            cells3[0]  = dat[stp-1,i-1];
            cells3[1]  = dat[stp-1,i];
            cells3[2]  = dat[stp-1,i+1];

            dat[stp,i] = dat[stp-1,i] + CA(res,cells3);                 # apply the Cellular Automata with rule --> res

#   completed one realization ...

    dat_to_plot=dat[:,N+1:3*N].copy()                    # plot only the central window

    plt.gca().xaxis.set_major_locator(plt.NullLocator()) # remove ticks and labels
    plt.gca().yaxis.set_major_locator(plt.NullLocator())

    plt.pcolor(dat_to_plot[::-1], cmap='Greys')

    rulenm='rule ' + str(rule); plt.xlabel(rulenm,fontsize='xx-small')

    if (counter+1)%128 == 0: #plot first page
        file_out = 'plot_' + str(counter-127).zfill(3) + '_' + str(counter).zfill(3) + '.png'
        plt.savefig(file_out, format='png',dpi=900)
        plt.clf()
        plt.figure(figsize=(20, 20))
 
 
    counter = counter +1;

print 'EOB'