def _create_classifier(self, message = None): """Create a new classifier that optionally matches a message""" c = Classifier() min_specifity = 10 total_str = 0 if self.classifiers: for classify in self.classifiers: total_str += classify.strength average_str = total_str / len(self.classifiers) c.strength = average_str else: c.strength = 100 # Set condition(s) elements = range(len(Message.game_msg_index)) random.shuffle(elements) elements_specifity = [ random.randint(1,5) for x in xrange(len(Message.game_msg_index))] c.specifity = 0 # Create the condition for i,value in enumerate(elements): c.specifity += 6 - elements_specifity[i] c.conditions[0][value] = \ random.sample(xrange(0,5),elements_specifity[i] ) # Ensure message's value is in the condition if ( message != None ): if ( message.status[value] not in c.conditions[0][value] ): c.conditions[0][value][0] = message.status[value] c.conditions[0][value].sort() # Stop adding to the condition sometime after you have > min_specifity if ( c.specifity > min_specifity ): if ( random.random() < float(i) / float(len(Message.game_msg_index) ) ): break if ( random.random() < 0.01 and c.specifity < min_specifity * 0.3 ): c.conditions.append( [ None ] * len( Message.game_msg_index) ) break if ( len(c.conditions) == 2 ): elements = range(len(Message.game_msg_index)) random.shuffle(elements) elements_specifity = [ random.randint(1,5) for x in xrange(len(Message.game_msg_index))] # Create the condition for i,value in enumerate(elements): c.specifity += 6 - elements_specifity[i] c.conditions[1][value] = \ random.sample(xrange(0,5),elements_specifity[i] ) # Ensure message's value is in the condition if ( message != None ): if ( message.status[value] not in c.conditions[1][value] ): c.conditions[1][value][0] = message.status[value] c.conditions[1][value].sort() # Stop adding to the condition sometime after you have > min_specifity if ( c.specifity > min_specifity ): if ( random.random() < float(i) / float(len(Message.game_msg_index) ) ): break if ( random.random() < 0.01 and c.specifity < min_specifity * 0.3 ): c.conditions.append( [ None ] * len( Message.game_msg_index) ) break # Set output output_message = Message() output_message.classifier_message() output_message.emitter = c c.output = output_message, random.choice(['Heal','Mine','Attack','Wait']) return c