def give_instructions(self, event):
        # TODO event not used, answer, give_away_message def outside __init__, var separator not used,
        """ pick how many objects in total will be enumerated.  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 = {}
        message = ""
        total = random.randint(1, 5)
        for i in range(0, total):
            if i == total - 2:
                separator = " and "
            elif i == total - 1:
                separator = ""
            else:
                separator = ", "
            obj = random.choice(global_objects)
            message += msg.indef_article(obj)
            message += separator
            if obj not in counter:
                counter[obj] = 0
            counter[obj] += 1
        object_in_question = random.choice(global_objects)
        self.answer = "Yes" if counter.get(object_in_question, 0) > 0 else "No"
        self.give_away_message = "I do have {object}." if self.answer == "Yes" else "I do not have {object}."
        self.give_away_message = self.give_away_message.format(object = msg.indef_article(object_in_question))
        self.give_away_message = "Wrong. " + self.give_away_message
        self.set_message('I have {listing_objects}. Do I have {object}? '.format(
                listing_objects = message, object = msg.indef_article(object_in_question)))
 def on_object_given(self, event):
     object_ = event.get_match(2)
     if object_ in self.state.teacher_accepts:
         self.state.learner_inventory[object_] -= 1
         self.state.teacher_inventory[object_] += 1
         self.set_message("You gave me {indef_object}.".format(
             indef_object=msg.indef_article(object_)))
     else:
         self.set_message("I haven't asked you for {indef_object}.".format(
             indef_object=msg.indef_article(object_)))
Пример #3
0
 def on_object_given(self, event):
     object_ = event.get_match(2)
     if object_ in self.state.teacher_accepts:
         self.state.learner_inventory[object_] -= 1
         self.state.teacher_inventory[object_] += 1
         self.set_message("You gave me {indef_object}.".format(
             indef_object=msg.indef_article(object_)))
     else:
         self.set_message("I haven't asked you for {indef_object}.".format(
             indef_object=msg.indef_article(object_)))
    def on_start(self, event):
        ws = self.get_world().state
        # pick a random object
        target_obj, = random.sample(objects, 1)
        self.state.target_obj = target_obj
        # save how many objects of this we have
        self.state.initial_count = ws.teacher_inventory[target_obj]
        # save how many instances of the object the learner intially had
        self.state.learner_initial_count = ws.learner_inventory[target_obj]
        # choose some random direction
        self.direction = random.choice(list(self.get_world().valid_directions
                                            .keys()))
        # measure a cell one step in that direction
        self.obj_pos = ws.learner_pos + \
            self.get_world().valid_directions[self.direction]
        # put an object in the given position
        self.get_world().put_entity(self.obj_pos, target_obj, True, True)
        # initialize a variable to check if the object has been picked up
        self.object_picked_up = False
        # inform the world that we can expect to receive such an object
        ws.teacher_accepts.add(self.state.target_obj)

        self.set_message("There is {indef_object} {direction} from you."
                         " Pick it up and give it to me.".format(
                             indef_object=msg.indef_article(
                                 self.state.target_obj),
                             direction=self.direction))
Пример #5
0
    def on_start(self, event):
        ws = self.get_world().state
        # pick a random object
        target_obj, = random.sample(objects, 1)
        self.state.target_obj = target_obj
        # save how many objects of this we have
        self.state.initial_count = ws.teacher_inventory[target_obj]
        # save how many instances of the object the learner intially had
        self.state.learner_initial_count = ws.learner_inventory[target_obj]
        # choose some random direction
        self.direction = random.choice(
            list(self.get_world().valid_directions.keys()))
        # measure a cell one step in that direction
        self.obj_pos = ws.learner_pos + \
            self.get_world().valid_directions[self.direction]
        # put an object in the given position
        self.get_world().put_entity(self.obj_pos, target_obj, True, True)
        # initialize a variable to check if the object has been picked up
        self.object_picked_up = False
        # inform the world that we can expect to receive such an object
        ws.teacher_accepts.add(self.state.target_obj)

        self.set_message("There is {indef_object} {direction} from you."
                         " Pick it up and give it to me.".format(
                             indef_object=msg.indef_article(
                                 self.state.target_obj),
                             direction=self.direction))
Пример #6
0
    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)))
Пример #7
0
 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_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 give_instructions(self, event):

        separator = ""
        counter = {}
        message = ""

        # pick how many objects in total will be enumerated
        total = random.randint(1, 5)
        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 = random.choice(global_objects)

            # build up message
            message += msg.indef_article(obj)
            message += separator

            # update counter
            if obj not in counter:
                counter[obj] = 0
            counter[obj] += 1

        # pick object to ask the question
        object_in_question = random.choice(global_objects)

        self.answer = "Yes" if counter.get(object_in_question, 0) > 0 else "No"

        self.give_away_message = "I do have {object}." \
            if self.answer == "Yes" else "I do not have {object}."
        self.give_away_message = self.give_away_message \
                        .format(object=msg.indef_article(object_in_question))
        self.give_away_message = "Wrong. " + self.give_away_message
        self.set_message('I have {listing_objects}. Do I have {object}? '
                            .format(
                                listing_objects=message,
                                object=msg.indef_article(object_in_question)
                            ))
Пример #10
0
    def give_instructions(self, event):

        separator = ""
        counter = {}
        message = ""

        # pick how many objects in total will be enumerated
        total = random.randint(1, 5)
        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 = random.choice(global_objects)

            # build up message
            message += msg.indef_article(obj)
            message += separator

            # update counter
            if obj not in counter:
                counter[obj] = 0
            counter[obj] += 1

        # pick object to ask the question
        object_in_question = random.choice(global_objects)

        self.answer = "Yes" if counter.get(object_in_question, 0) > 0 else "No"

        self.give_away_message = "I do have {object}." \
            if self.answer == "Yes" else "I do not have {object}."
        self.give_away_message = self.give_away_message \
                        .format(object=msg.indef_article(object_in_question))
        self.give_away_message = "Wrong. " + self.give_away_message
        self.set_message('I have {listing_objects}. Do I have {object}? '
                            .format(
                                listing_objects=message,
                                object=msg.indef_article(object_in_question)
                            ))
Пример #11
0
    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):
        ws = self.get_world().state
        # pick a random object
        self.state.target_obj, = random.sample(objects, 1)
        # give one of it to the learner
        ws.learner_inventory[self.state.target_obj] += 1
        # save how many objects of this we have
        self.state.initial_count = ws.teacher_inventory[self.state.target_obj]
        # inform the world that we can expect to receive such an object
        ws.teacher_accepts.add(self.state.target_obj)

        self.set_message("I gave you {indef_object}. Give it back to me "
                         "by saying \"I give you {indef_object}\"."
                          .format(indef_object=msg.indef_article(
                              self.state.target_obj)))
Пример #13
0
    def on_start(self, event):
        """ pick a random object.  give one of it to the learner.  save how many objects of this we have.  inform the
        world that we can expect to receive such an object.

        :param event:
        :return:
        """
        # TODO event not used
        ws = self.get_world().state
        self.state.target_obj, = random.sample(objects, 1)
        ws.learner_inventory[self.state.target_obj] += 1
        self.state.initial_count = ws.teacher_inventory[self.state.target_obj]
        ws.teacher_accepts.add(self.state.target_obj)
        self.set_message("I gave you {indef_object}. Give it back to me " "by saying \"I give you {indef_object}\"."
                         .format(indef_object = msg.indef_article(self.state.target_obj)))
Пример #14
0
 def on_start(self, event):
     # TODO event not used, Target_obj def outside __inti__
     """ choose some random object,  find the cell in front of the learner.  place the object there
     :param event:
     :return:
     """
     self.target_obj, = random.sample(objects, 1)
     ws = self.get_world().state
     ld = self.get_world().valid_directions[ws.learner_direction]
     lp = ws.learner_pos
     self.state.initial_count = ws.learner_inventory[self.target_obj]
     self.get_world().put_entity(lp + ld, self.target_obj, True, True)
     self.add_handler(on_state_changed(lambda ws, ts: ws.learner_inventory[self.target_obj] == ts.initial_count + 1)
                      (self.on_object_picked_up))
     self.set_message("You have {indef_object} in front of you. " "Pick up the {object}.".format(
                     indef_object = msg.indef_article(self.target_obj), object = self.target_obj))
Пример #15
0
 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)
Пример #17
0
    def on_start(self, event):
        # TODO event not used, target_obj, direction, def outside __inti__, ws shadows
        """ choose a random object.  find a random cell around the learner. place the object there.

        :param event:
        :return:
        """
        self.target_obj, = random.sample(objects, 1)
        self.direction = random.choice(list(self.get_world().valid_directions.keys()))
        ws = self.get_world().state
        p = ws.learner_pos + self.get_world().valid_directions[self.direction]
        self.state.initial_count = ws.learner_inventory[self.target_obj]
        self.get_world().put_entity(p, self.target_obj, True, True)
        self.add_handler(on_state_changed(lambda ws, ts: ws.learner_inventory[self.target_obj] == ts.initial_count + 1)
                         (self.on_object_picked_up))
        self.set_message("There is {indef_object} {direction} from you, " "pick up the {object}.".format(
                indef_object = msg.indef_article(self.target_obj),
                direction = self.direction, object = self.target_obj))
    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)
        ))
Пример #19
0
    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)
        ))
Пример #20
0
    def on_start(self, event):
        # TODO target_obj, n def outside __init__ event not used
        """ choose a random object.  select a random number of steps.  place the object that number of steps in front
        of the learner.

        :param event:
        :return:
        """
        self.target_obj, = random.sample(objects, 1)
        ws = self.get_world().state
        self.n = random.randint(1, PickUpInFrontTask.max_steps_forward)
        p = ws.learner_pos + self.n * self.get_world().valid_directions[ws.learner_direction]
        self.state.initial_count = ws.learner_inventory[self.target_obj]
        self.get_world().put_entity(p, self.target_obj, True, True)
        self.add_handler(
                on_state_changed(lambda ws, ts: ws.learner_inventory[self.target_obj] == ts.initial_count + 1)
                (self.on_object_picked_up))
        self.set_message("There is {indef_object} {n} steps forward, " "pick up the {object}.".format(
                        indef_object = msg.indef_article(self.target_obj), n = msg.number_to_string(self.n),
                        object = self.target_obj))
    def on_start(self, event):
        # choose some random object
        self.target_obj, = random.sample(objects, 1)
        # find the cell in front of the learner
        ws = self.get_world().state
        ld = self.get_world().valid_directions[ws.learner_direction]
        lp = ws.learner_pos
        self.state.initial_count = ws.learner_inventory[self.target_obj]
        # place the object there
        self.get_world().put_entity(lp + ld, self.target_obj, True, True)

        self.add_handler(
            on_state_changed(lambda ws, ts:
                             ws.learner_inventory[self.target_obj] ==
                             ts.initial_count + 1)
            (self.on_object_picked_up))

        self.set_message("You have {indef_object} in front of you. "
                         "Pick up the {object}.".format(
                             indef_object=msg.indef_article(self.target_obj),
                             object=self.target_obj))
Пример #22
0
    def give_instructions(self, event):
        object_, property_ = self.get_random_object_property()
        # we find the set of baskets that have the relevant
        # object and property combination
        self.basket_set = set(
            basket for basket, object_properties in global_properties.items()
            if object_ in object_properties
            and property_ in object_properties[object_])
        # at this point, if baskets list is empty we add "nobody" as
        # the only item in it
        if not self.basket_set:
            self.basket_set.add('nobody')

        self.question = "who has {property_object} in the basket?".format(
            property_object=msg.indef_article(property_ + " " + object_))
        self.set_message(self.question)

        # building a regexp to match the answer
        enum_re = delimiters.join([r'([a-z]+)'] * len(self.basket_set))
        # final string must be delimited by period
        enum_re += r'\.$'
        self.re_query = re.compile(enum_re)
Пример #23
0
    def on_start(self, event):
        # TODO event not used, direction, obj_pos, obj_picked up def outside __inti__
        """ pick a random object.  save how many objects of this we have.  save how many instances of the object the
        learner initially had. choose some random direction.  measure a cell one step in that direction.  put an
        object in the given position.  initialize a variable to check if the object has been picked up.  inform the
        world that we can expect to receive such an object.

        :param event:
        :return:
        """
        ws = self.get_world().state
        target_obj, = random.sample(objects, 1)
        self.state.target_obj = target_obj
        self.state.initial_count = ws.teacher_inventory[target_obj]
        self.state.learner_initial_count = ws.learner_inventory[target_obj]
        self.direction = random.choice(list(self.get_world().valid_directions.keys()))
        self.obj_pos = ws.learner_pos + self.get_world().valid_directions[self.direction]
        self.get_world().put_entity(self.obj_pos, target_obj, True, True)
        self.object_picked_up = False
        ws.teacher_accepts.add(self.state.target_obj)
        self.set_message("There is {indef_object} {direction} from you." " Pick it up and give it to me.".format(
                indef_object = msg.indef_article(self.state.target_obj), direction = self.direction))
    def give_instructions(self, event):
        object_, property_ = self.get_random_object_property()
        # we find the set of baskets that have the relevant
        # object and property combination
        self.basket_set = set(basket for basket, object_properties
                                in global_properties.items()
                                if object_ in object_properties and
                                   property_ in object_properties[object_])
        # at this point, if baskets list is empty we add "nobody" as
        # the only item in it
        if not self.basket_set:
            self.basket_set.add('nobody')

        self.question = "who has {property_object} in the basket?".format(
            property_object=msg.indef_article(property_ + " " + object_))
        self.set_message(self.question)

        # building a regexp to match the answer
        enum_re = delimiters.join(
            [r'([a-z]+)'] * len(self.basket_set))
        # final string must be delimited by period
        enum_re += r'\.$'
        self.re_query = re.compile(enum_re)
    def on_start(self, event):
        # choose a random object
        self.target_obj, = random.sample(objects, 1)
        # find a random cell around the learner
        self.direction = random.choice(list(self.get_world().valid_directions
                                            .keys()))
        ws = self.get_world().state
        p = ws.learner_pos + self.get_world().valid_directions[self.direction]
        self.state.initial_count = ws.learner_inventory[self.target_obj]
        # place the object there
        self.get_world().put_entity(p, self.target_obj, True, True)

        self.add_handler(
            on_state_changed(lambda ws, ts:
                             ws.learner_inventory[self.target_obj] ==
                             ts.initial_count + 1)
            (self.on_object_picked_up))

        self.set_message("There is {indef_object} {direction} from you, "
                         "pick up the {object}.".format(
                             indef_object=msg.indef_article(self.target_obj),
                             direction=self.direction,
                             object=self.target_obj))
    def on_start(self, event):
        # choose a random object
        self.target_obj, = random.sample(objects, 1)
        ws = self.get_world().state
        # select a random number of steps
        self.n = random.randint(1, PickUpInFrontTask.max_steps_forward)
        # place the object that number of steps in front of the learner
        p = ws.learner_pos + self.n * self.get_world().valid_directions[
            ws.learner_direction]
        self.state.initial_count = ws.learner_inventory[self.target_obj]
        self.get_world().put_entity(p, self.target_obj, True, True)

        self.add_handler(
            on_state_changed(lambda ws, ts:
                             ws.learner_inventory[self.target_obj] ==
                             ts.initial_count + 1)
            (self.on_object_picked_up))

        self.set_message("There is {indef_object} {n} steps forward, "
                         "pick up the {object}."
                         .format(
                             indef_object=msg.indef_article(self.target_obj),
                             n=msg.number_to_string(self.n),
                             object=self.target_obj))