Genetic Turmit Evolver
python
c
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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