|
@@ -0,0 +1,99 @@
|
|
1
|
+import argparse
|
|
2
|
+import logging
|
|
3
|
+import numpy as np
|
|
4
|
+from random import randint
|
|
5
|
+
|
|
6
|
+logging.basicConfig(level=logging.DEBUG,
|
|
7
|
+ format="%(created)d %(asctime)s:%(module)s(%(lineno)d):%(levelname)s:%(message)s %(relativeCreated)dms")
|
|
8
|
+logger = logging.getLogger(__name__)
|
|
9
|
+logger.debug('Logger started')
|
|
10
|
+
|
|
11
|
+from . import turmit, rpnlib
|
|
12
|
+from .turmit import Turmit
|
|
13
|
+
|
|
14
|
+parser = argparse.ArgumentParser(description='Genetic Turmit Evolver')
|
|
15
|
+
|
|
16
|
+parser.add_argument('--list-op', action='store_const', default=False,
|
|
17
|
+ const=True)
|
|
18
|
+parser.add_argument('--list-var', action='store_const', default=False,
|
|
19
|
+ const=True)
|
|
20
|
+parser.add_argument('--rand-sym', '-r', action='store_const', default=False,
|
|
21
|
+ const=True)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+args = parser.parse_args()
|
|
25
|
+
|
|
26
|
+if args.list_op:
|
|
27
|
+ for i,(op, desc) in enumerate(rpnlib._op_list.items()):
|
|
28
|
+ print('#%02X %7s%s' % (i, op.upper(), desc[0].__doc__))
|
|
29
|
+ exit(0)
|
|
30
|
+elif args.list_var:
|
|
31
|
+ print([op.upper() for op in rpnlib._op_list.keys()])
|
|
32
|
+ exit(0)
|
|
33
|
+elif args.rand_sym:
|
|
34
|
+ for _ in range(10):
|
|
35
|
+ print(rpnlib.RpnSymbol.random())
|
|
36
|
+ exit(0)
|
|
37
|
+
|
|
38
|
+x = 512
|
|
39
|
+y = 512
|
|
40
|
+nb_turmit = 10
|
|
41
|
+steps = 1024
|
|
42
|
+
|
|
43
|
+img = [[(0,0,0) for _ in range(x)] for _ in range(y)]
|
|
44
|
+
|
|
45
|
+prog = rpnlib.RpnExpr.random(10)
|
|
46
|
+prog.append(rpnlib.RpnSymbol.rand_op())
|
|
47
|
+
|
|
48
|
+turmits = [Turmit(prog=prog) for _ in range(nb_turmit)]
|
|
49
|
+turmits_color = [(randint(0,255), randint(0,255), randint(0,255))
|
|
50
|
+ for _ in range(nb_turmit)]
|
|
51
|
+turmits_pos = [(randint(0,y-1), randint(0,x-1)) for _ in range(nb_turmit)]
|
|
52
|
+
|
|
53
|
+import time
|
|
54
|
+
|
|
55
|
+print(str(prog))
|
|
56
|
+start = time.time()
|
|
57
|
+for step in range(steps):
|
|
58
|
+ for i in range(nb_turmit):
|
|
59
|
+ ty, tx = turmits_pos[i]
|
|
60
|
+ r,g,b = img[ty][tx]
|
|
61
|
+ turmit = turmits[i]
|
|
62
|
+ tdir = turmit(x=tx,y=ty,r=r,g=g,b=b) % 8
|
|
63
|
+
|
|
64
|
+ img[ty][tx] = turmits_color[i]
|
|
65
|
+
|
|
66
|
+ if tdir == 0 or tdir == 4 or tdir == 5:
|
|
67
|
+ tx += 1
|
|
68
|
+ if tdir == 1 or tdir == 4 or tdir == 6:
|
|
69
|
+ ty += 1
|
|
70
|
+ if tdir == 2 or tdir == 6 or tdir == 7:
|
|
71
|
+ if tx == 0:
|
|
72
|
+ tx = x -1
|
|
73
|
+ else:
|
|
74
|
+ tx -= 1
|
|
75
|
+ if tdir == 3 or tdir == 5 or tdir == 7:
|
|
76
|
+ if ty == 0:
|
|
77
|
+ ty = y - 1
|
|
78
|
+ else:
|
|
79
|
+ ty -= 1
|
|
80
|
+ tx %= x
|
|
81
|
+ ty %= y
|
|
82
|
+ #print('Turmit #%d dir:%d x:%d y:%d prog="%s"' % (i, tdir, tx, ty,
|
|
83
|
+ # str(turmit._prog)))
|
|
84
|
+ turmits_pos[i] = (ty,tx)
|
|
85
|
+ if step % 100 == 0:
|
|
86
|
+ print('%d/%d' % (step, steps))
|
|
87
|
+stop = time.time()
|
|
88
|
+print('Exec %d steps in %.2fs : %.4fs/step' % (steps, stop - start,
|
|
89
|
+ (stop - start) / steps))
|
|
90
|
+from .fractdim import *
|
|
91
|
+I = rgb2gray(np.array(img))
|
|
92
|
+print(fractal_dimension(I))
|
|
93
|
+
|
|
94
|
+import scipy.misc
|
|
95
|
+scipy.misc.imsave('/tmp/GTE.jpg', img)
|
|
96
|
+print('saved to : /tmp/GTE.jpg')
|
|
97
|
+print()
|
|
98
|
+
|
|
99
|
+
|