def expected_case(cli: Classifier, percept: list) -> Classifier: """ :rtype: Classifier """ diff = get_differences(cli.mark, percept) if diff == [cons.symbol] * cons.lenCondition: cli.q += cons.beta * (1 - cli.q) return None else: spec = number_of_spec(cli.condition) spec_new = number_of_spec(diff) child = Classifier(cli) if spec == cons.uMax: remove_random_spec_att(child.condition) spec -= 1 while spec + spec_new > cons.beta: if spec > 0 and random() < 0.5: remove_random_spec_att(child.condition) spec -= 1 else: remove_random_spec_att(diff) spec_new -= 1 else: while spec + spec_new > cons.beta: remove_random_spec_att(diff) spec_new -= 1 child.condition = diff if child.q < 0.5: child.q = 0.5 child.exp = 1 assert isinstance(child, Classifier), 'Should be a Classifier' return child
def gen_match_set(pop: list, percept: list): """ Generate a list of Classifier thats match current perception :param pop: :type pop: list :param percept: :type percept: list :return: :rtype: list """ ma = [] if time == 0 or len(pop) == 0: for i in range(cons.nbAction): newcl = Classifier() newcl.condition = [cons.symbol] * cons.lenCondition newcl.action = i newcl.effect = [cons.symbol] * cons.lenCondition newcl.exp = 0 newcl.t = time newcl.q = 0.5 pop.append(newcl) for c in pop: if does_match(c, percept): ma.append(c) return ma
def generate_covering_classifier(env, action): newcl = Classifier() newcl.condition = ['0'] * len(env) for i in range(len(env)): if rd.random() < cons.P_dontcare: newcl.condition[i] = cons.dontCare else: newcl.condition[i] = env[i] for i in range(len(action)): if action[i] is False: newcl.action = i newcl.prediction = cons.predictionIni newcl.predictionError = cons.predictionErrorIni newcl.fitness = cons.fitnessIni newcl.experience = 0 newcl.timeStamp = time newcl.actionSetSize = 1 newcl.numerosity = 1 return newcl