File: RuleTreeGen.py

package info (click to toggle)
golly 2.3-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 10,080 kB
  • sloc: cpp: 41,951; python: 6,339; sh: 3,912; perl: 1,172; java: 49; makefile: 47
file content (56 lines) | stat: -rw-r--r-- 1,556 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class GenerateRuleTree:

    def __init__(self,numStates,numNeighbors,f):
    
        self.numParams = numNeighbors + 1 ;
        self.world = {}
        self.r = []
        self.params = [0]*self.numParams
        self.nodeSeq = 0
        self.numStates = numStates
        self.numNeighbors = numNeighbors
        self.f = f
        
        self.recur(self.numParams)
        self.writeRuleTree()

    def getNode(self,n):
        if n in self.world:
            return self.world[n]
        else:
            new_node = self.nodeSeq
            self.nodeSeq += 1
            self.r.append(n)
            self.world[n] = new_node
            return new_node

    def recur(self,at):
        if at == 0:
            return self.f(self.params)
        n = str(at)
        for i in range(self.numStates):
            self.params[self.numParams-at] = i
            n += " " + str(self.recur(at-1))
        return self.getNode(n)
      
    def writeRuleTree(self):
        print "num_states=" + str(self.numStates)
        print "num_neighbors=" + str(self.numNeighbors)
        print "num_nodes=" + str(len(self.r))
        for rule in self.r:
            print rule

# define your own transition function here:
def my_transition_function(a):
   # B3/S23
   n = a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7]
   if n == 2 and not a[8] == 0:
      return 1
   if n == 3:
      return 1
   return 0

# call the rule tree generator with your chosen parameters
n_states = 2
n_neighbors = 8
GenerateRuleTree(n_states,n_neighbors,my_transition_function)