def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) rand = randint(2, 100) rule = Rule([ModuloFeature(rand)], [1.0]) rule.mappers = [BooleanMapper()] self.add_rule(rule, 1.0) self._log(logging.DEBUG, 'Created with rule={}'.format(rule))
def invent_number(self, low, high): '''Invent new number from given interval.''' self._log(logging.DEBUG, "Inventing number from ({}, {})" .format(low, high)) ars = [] steps = 0 while len(ars) < 10 and steps < 1000: steps += 1 r = randint(low, high) ar = Artifact(self, r) ar.domain = int if ar not in self.A: ars.append(ar) if len(ars) == 0: self._log(logging.INFO, "Could not invent new number!".format(self)) return 1, 0.0 best_eval, fr = self.evaluate(ars[0]) ars[0].add_eval(self, best_eval, fr) best_number = ars[0].obj best_ar = ars[0] for ar in ars[1:]: e, fr = self.evaluate(ar) ar.add_eval(self, e, fr) if e > best_eval: best_eval = e best_number = ar.obj best_ar = ar self._log(logging.DEBUG, "Invented number {}, with e = {}." .format(best_number, best_eval)) if best_eval > 0.5: rule = Rule([ModuloFeature(best_number)], [1.0]) rule.mappers = [BooleanMapper()] self.add_rule(rule, 1.0) self._log(logging.INFO, "Appended {} to features.".format(best_number)) return best_ar