def give_instructions(self, event): # TODO event not used, separator not used, local var separtor not used """ pick how many objects in total will be described. for last object change separator from "," to "and". pick object. build up message update counter. pick object to ask the question. :param event: :return: """ separator = "" counter = {} partial_message = "" total = random.randint(1, max_total) for i in range(0, total): if i == total - 2: separator = " and " elif i == total - 1: separator = "" else: separator = ", " obj = vocabulary[random.randint(1, vocab_size - 1)] partial_message += msg.indef_article(obj) partial_message += separator if obj not in counter: counter[obj] = 0 counter[obj] += 1 object_in_question = vocabulary[random.randint(1, vocab_size - 1)] # TODO def outside __init__ .answer, .give_away_message self.answer = msg.numbers_in_words[counter.get(object_in_question, 0)] self.give_away_message = 'Wrong. The right answer is: {answer}.'.format( answer=self.answer) self.set_message( "I have {listing_objects}. How many {object} do I have? ".format( listing_objects=partial_message, object=msg.pluralize(object_in_question, 2)))
def on_start(self, event): # TODO event not used, target_obj def outside __inti__ """ :param event: :return: """ self.target_obj, = random.sample(objects, 1) self.set_message("How many {0} do you have?".format(msg.pluralize(self.target_obj, 2)))
def on_gave_me_target_object(self, event): if self.stage == 'waiting-give-back': self.time_gave_me_object = self.get_time() self.set_message( "Good! You gave me {indef_object}. " "How many {objects} do you have now?".format( indef_object=msg.indef_article(self.state.target_obj), objects=msg.pluralize(self.state.target_obj, 2))) self.stage = 'final-query'
def on_start(self, event): self.failed = False self.time_gave_me_object = None self.state.target_obj, = random.sample(objects, 1) self.state.initial_count = \ self.get_world().state.learner_inventory[self.state.target_obj] self.set_message("How many {0} do you have?".format( msg.pluralize(self.state.target_obj, 2))) self.stages = ['initial-query', 'one-more-query', 'waiting-give-back', 'final-query'] self.stage = 'initial-query'
def on_gave_me_target_object(self, event): # TODO event not used, time_gave_me_oject, stage def outside __init__ """ if I have one more of the target object, the learner solved the task if it also picked up the object in the grid. :param event: :return: """ if self.stage == 'waiting-give-back': self.time_gave_me_object = self.get_time() self.set_message("Good! You gave me {indef_object}. " "How many {objects} do you have now?".format( indef_object = msg.indef_article(self.state.target_obj), objects = msg.pluralize(self.state.target_obj, 2))) self.stage = 'final-query'
def on_start(self, event): # TODO event not used, failed, time_gave_me_object, stage, def outside __inti__ """ :param event: :return: """ self.failed = False self.time_gave_me_object = None self.state.target_obj, = random.sample(objects, 1) self.state.initial_count = self.get_world().state.learner_inventory[self.state.target_obj] self.set_message("How many {0} do you have?".format(msg.pluralize(self.state.target_obj, 2))) self.stages = ['initial-query', 'one-more-query', 'waiting-give-back', 'final-query'] self.stage = 'initial-query'
def on_start(self, event): self.failed = False self.time_gave_me_object = None self.state.target_obj, = random.sample(objects, 1) self.state.initial_count = \ self.get_world().state.learner_inventory[self.state.target_obj] self.set_message("How many {0} do you have?".format( msg.pluralize(self.state.target_obj, 2))) self.stages = [ 'initial-query', 'one-more-query', 'waiting-give-back', 'final-query' ] self.stage = 'initial-query'
def on_something_said(self, event): """ find out the correct answer. get the answer of the learner and parse it :param event: :return: """ count = self.get_world().state.learner_inventory[self.target_obj] answer = event.get_match(1) num_answer = msg.string_to_number(answer) if num_answer == count: self.set_reward(1, "Correct!") else: self.set_message("{negative_feedback} " "You have {count} {objects}.".format( negative_feedback = random.choice(msg.failed), count = count, objects = msg.pluralize(self.target_obj, count)))
def on_something_said(self, event): # find out the correct answer count = self.get_world().state.learner_inventory[self.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) num_answer = msg.string_to_number(answer) if num_answer == count: self.set_result(1, "Correct!") else: self.set_message("{negative_feedback} " "You have {count} {objects}.".format( negative_feedback=random.choice(msg.failed), count=count, objects=msg.pluralize(self.target_obj, count)))
def on_answer_query(self, event): # if we are waiting for an object, then we don't expect an answer # to a query if self.stage == 'waiting-give-back': return # if you just gave me an object, then this is not the # answer for a query if self.time_gave_me_object == self.get_time(): return # short variable for the world state ws = self.get_world().state # we check if the learner's answer matches the number of instances # it has of the given object count = ws.learner_inventory[self.state.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) try: num_answer = msg.string_to_number(answer) except ValueError: num_answer = None # check if the learner has failed self.failed = self.failed or num_answer != count # get a feedback response feedback = random.choice(msg.congratulations) if num_answer == count \ else random.choice(msg.failed) if self.stage == 'initial-query': ws.learner_inventory[self.state.target_obj] += 1 self.set_message( "{feedback} I gave you {indef_object}. " "How many {objects} do you have now?".format( indef_object=msg.indef_article(self.state.target_obj), objects=msg.pluralize(self.state.target_obj, 2), feedback=feedback)) self.stage = 'one-more-query' elif self.stage == 'one-more-query': self.set_message( "{feedback} Now give the {object} back to me.".format( object=self.state.target_obj, feedback=feedback)) ws.teacher_accepts.add(self.state.target_obj) self.stage = 'waiting-give-back' elif self.stage == 'final-query': # reward the learner if it replied correctly all the questions if not self.failed: self.set_reward(1, feedback) else: self.set_reward(0, feedback)
def on_answer_query(self, event): # if we are waiting for an object, then we don't expect an answer # to a query if self.stage == 'waiting-give-back': return # if you just gave me an object, then this is not the # answer for a query if self.time_gave_me_object == self.get_time(): return # short variable for the world state ws = self.get_world().state # we check if the learner's answer matches the number of instances # it has of the given object count = ws.learner_inventory[self.state.target_obj] # get the answer of the learner and parse it answer = event.get_match(1) try: num_answer = msg.string_to_number(answer) except ValueError: num_answer = None # check if the learner has failed self.failed = self.failed or num_answer != count # get a feedback response feedback = random.choice(msg.congratulations) if num_answer == count \ else random.choice(msg.failed) if self.stage == 'initial-query': ws.learner_inventory[self.state.target_obj] += 1 self.set_message( "{feedback} I gave you {indef_object}. " "How many {objects} do you have now?".format( indef_object=msg.indef_article(self.state.target_obj), objects=msg.pluralize(self.state.target_obj, 2), feedback=feedback)) self.stage = 'one-more-query' elif self.stage == 'one-more-query': self.set_message("{feedback} Now give the {object} back to me." .format(object=self.state.target_obj, feedback=feedback)) ws.teacher_accepts.add(self.state.target_obj) self.stage = 'waiting-give-back' elif self.stage == 'final-query': # reward the learner if it replied correctly all the questions if not self.failed: self.set_result(1, feedback) else: self.set_result(0, feedback)
def give_instructions(self, event): separator = "" counter = {} partial_message = "" # pick how many objects in total will be described total = random.randint(1, max_total) for i in range(0, total): # for last object change separator from "," to "and" if i == total - 2: separator = " and " elif i == total - 1: separator = "" else: separator = ", " # pick object obj = vocabulary[random.randint(1, vocab_size - 1)] # build up message partial_message += msg.indef_article(obj) partial_message += separator # update counter if obj not in counter: counter[obj] = 0 counter[obj] += 1 # pick object to ask the question object_in_question = vocabulary[random.randint(1, vocab_size - 1)] self.answer = msg.numbers_in_words[counter.get(object_in_question, 0)] self.give_away_message = 'Wrong. The right answer is: {answer}.'.format( answer=self.answer ) self.set_message("I have {listing_objects}. How many {object} do I have? "\ .format( listing_objects=partial_message, object=msg.pluralize(object_in_question, 2) ))
def on_start(self, event): self.target_obj, = random.sample(objects, 1) self.set_message("How many {0} do you have?".format( msg.pluralize(self.target_obj, 2)))