Guest User

Untitled

a guest
Oct 20th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.24 KB | None | 0 0
  1. import random
  2.  
  3. class ContextFree(object):
  4. def __init__(self):
  5. self.rules = {}
  6. self.instancemethod = type(self.add_rule)
  7. self.max_depth = 100
  8. self.depth = 0
  9.  
  10. def add_rule(self, func, prob=1):
  11. rule_name = func.__name__
  12.  
  13. if not rule_name in self.rules:
  14. self.rules[rule_name] = { 'funcs' : [], 'total' : 0 }
  15.  
  16. total = self.rules[rule_name]['total']
  17. self.rules[rule_name]['funcs'].append([range(total,(prob+total)), func])
  18. self.rules[rule_name]['total'] += prob
  19.  
  20. def augmented_func(self, options={}):
  21. if not self.depth >= self.max_depth:
  22. self.depth += 1
  23. pick = self.determine_rule(rule_name)
  24. print('Generation', self.depth)
  25. pick(self)
  26.  
  27. self.__dict__[rule_name] = self.instancemethod(augmented_func, self)
  28.  
  29. def determine_rule(self, rule_name):
  30. rule = self.rules[rule_name]
  31. winning_number = random.randrange(0, self.rules[rule_name]['total'])
  32. for func in rule['funcs']:
  33. if winning_number in func[0]:
  34. return func[1]
  35.  
  36. cf = ContextFree()
  37.  
  38. def box(self):
  39. print('Rule for box1')
  40. self.box()
  41.  
  42. cf.add_rule(box)
  43.  
  44. def box(self):
  45. print('Rule for box2')
  46. self.box()
  47.  
  48. cf.add_rule(box)
  49.  
  50. cf.box()
Add Comment
Please, Sign In to add comment