Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- class ContextFree(object):
- def __init__(self):
- self.rules = {}
- self.instancemethod = type(self.add_rule)
- self.max_depth = 100
- self.depth = 0
- def add_rule(self, func, prob=1):
- rule_name = func.__name__
- if not rule_name in self.rules:
- self.rules[rule_name] = { 'funcs' : [], 'total' : 0 }
- total = self.rules[rule_name]['total']
- self.rules[rule_name]['funcs'].append([range(total,(prob+total)), func])
- self.rules[rule_name]['total'] += prob
- def augmented_func(self, options={}):
- if not self.depth >= self.max_depth:
- self.depth += 1
- pick = self.determine_rule(rule_name)
- print('Generation', self.depth)
- pick(self)
- self.__dict__[rule_name] = self.instancemethod(augmented_func, self)
- def determine_rule(self, rule_name):
- rule = self.rules[rule_name]
- winning_number = random.randrange(0, self.rules[rule_name]['total'])
- for func in rule['funcs']:
- if winning_number in func[0]:
- return func[1]
- cf = ContextFree()
- def box(self):
- print('Rule for box1')
- self.box()
- cf.add_rule(box)
- def box(self):
- print('Rule for box2')
- self.box()
- cf.add_rule(box)
- cf.box()
Add Comment
Please, Sign In to add comment