num2words = { 1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve", 13: "thirteen", 14: "fourteen", 15: "fifteen", 16: "sixteen", 17: "seventeen", 18: "eighteen", 19: "nineteen", 20: "twenty" } num2words_2 = { 1: "first", 2: "second", 3: "third", 4: "fourth", 5: "fifth", 6: "sixth", 7: "seventh", 8: "eighth", 9: "ninth", 10: "tenth", 11: "eleventh", 12: "twelfth", 13: "thirteenth", 14: "fourteenth", 15: "fifteenth", 16: "sixteenth", 17: "seventeenth", 18: "eighteenth", 19: "nineteenth", 20: "twentieth" } def get_language_goal(self, env): language_goals = [] if env == "BinFill": color_counts = { "red": getattr(self.env.unwrapped, "red_cubes_target_number", 0), "blue": getattr(self.env.unwrapped, "blue_cubes_target_number", 0), "green": getattr(self.env.unwrapped, "green_cubes_target_number", 0), } phrases = [] for color, count in color_counts.items(): if count <= 0: continue word = num2words.get(count, str(count)) noun = "cube" if count == 1 else "cubes" phrases.append(f"{word} {color} {noun}") if not phrases: language_goals.append("put the cubes into the bin, then press the button to stop") language_goals.append("put the cubes into the bin and press the button to stop") elif len(phrases) == 1: language_goals.append(f"put {phrases[0]} into the bin, then press the button to stop") language_goals.append(f"put {phrases[0]} into the bin and press the button to stop") elif len(phrases) == 2: language_goals.append(f"put {phrases[0]} and {phrases[1]} into the bin, then press the button to stop") language_goals.append(f"put {phrases[0]} and {phrases[1]} into the bin and press the button to stop") else: language_goals.append(f"put {', '.join(phrases[:-1])} and {phrases[-1]} into the bin, then press the button to stop") language_goals.append(f"put {', '.join(phrases[:-1])} and {phrases[-1]} into the bin and press the button to stop") elif env == "PickXtimes": repeats = getattr(self.env.unwrapped, "num_repeats", 1) target_color = getattr(self.env.unwrapped, "target_color_name", "unknown") if repeats > 1: word = num2words.get(repeats, str(repeats)) language_goals.append(f"pick up the {target_color} cube and place it on the target, repeating this action {word} times, then press the button to stop") language_goals.append(f"pick up the {target_color} cube and place it on the target, repeating this pick-and-place action {word} times, then press the button to stop") else: language_goals.append(f"pick up the {target_color} cube and place it on the target, then press the button to stop") elif env == "SwingXtimes": repeats = getattr(self.env.unwrapped, "num_repeats", 1) target_color = getattr(self.env.unwrapped, "target_color_name", "unknown") if repeats > 1: word = num2words.get(repeats, str(repeats)) language_goals.append(f"pick up the {target_color} cube, move it to the top of the right-side target, then move it to the top of the left-side target, repeating this back-and-forth motion {word} times, finally press the button to stop") language_goals.append(f"pick up the {target_color} cube, move it to the right-side target and then to the left-side target, repeating this right-to-left swing motion {word} times, then put down the cube and press the button to stop") else: language_goals.append(f"pick up the {target_color} cube, move it to the top of the right-side target, then put it down on the left-side target, finally press the button to stop") language_goals.append(f"pick up the {target_color} cube, move it to the right-side target and then put it down on the left-side target, then press the button to stop") elif env == "VideoUnmask": color_names = getattr(self.env.unwrapped, "color_names", ["unknown", "unknown", "unknown"]) cube_0_color = color_names[0] cube_1_color = color_names[1] if self.env.unwrapped.configs[self.difficulty]['pick'] > 1: language_goals.append(f"watch the video carefully, then pick up the container hiding the {cube_0_color} cube, finally pick up another container hiding the {cube_1_color} cube") else: language_goals.append(f"watch the video carefully, then pick up the container hiding the {cube_0_color} cube") elif env == "VideoUnmaskSwap": color_names = getattr(self.env.unwrapped, "color_names", ["unknown", "unknown", "unknown"]) cube_0_color = color_names[0] cube_1_color = color_names[1] if self.pick_times == 2: language_goals.append(f"watch the video carefully, then pick up the container hiding the {cube_0_color} cube, finally pick up another container hiding the {cube_1_color} cube") else: language_goals.append(f"watch the video carefully, then pick up the container hiding the {cube_0_color} cube") elif env == "ButtonUnmask": color_names = getattr(self.env.unwrapped, "color_names", ["unknown", "unknown", "unknown"]) cube_0_color = color_names[0] cube_1_color = color_names[1] if self.env.unwrapped.configs[self.difficulty]['pick'] > 1: language_goals.append(f"first press the button, then pick up the container hiding the {cube_0_color} cube, finally pick up another container hiding the {cube_1_color} cube") else: language_goals.append(f"first press the button, then pick up the container hiding the {cube_0_color} cube") elif env == "ButtonUnmaskSwap": color_names = getattr(self.env.unwrapped, "color_names", ["unknown", "unknown", "unknown"]) cube_0_color = color_names[0] cube_1_color = color_names[1] if self.pick_times == 2: language_goals.append(f"first press both buttons on the table, then pick up the container hiding the {cube_0_color} cube, finally pick up another container hiding the {cube_1_color} cube") else: language_goals.append(f"first press both buttons on the table, then pick up the container hiding the {cube_0_color} cube") elif env == "VideoPlaceButton": target_color_name = self.target_color_name target_target_language = self.target_target_language language_goals.append(f"watch the video carefully, then place the {target_color_name} cube on the target right {target_target_language} the button was pressed") language_goals.append(f"watch the video carefully, and place the {target_color_name} cube on the target where it was placed immediately {target_target_language} the button was pressed") language_goals.append(f"watch the video carefully, then place the {target_color_name} cube on the target where it was previously placed {target_target_language} the button was pressed") if target_target_language == "before": language_goals.append(f"watch the video carefully, then place the {target_color_name} cube on the target where it was last placed before the button was pressed") else: language_goals.append(f"watch the video carefully, then place the {target_color_name} cube on the target where it was first placed after the button was pressed") elif env == "VideoPlaceOrder": target_color_name = self.target_color_name which_in_subset = self.which_in_subset num = num2words_2.get(which_in_subset, str(which_in_subset)) language_goals.append(f"watch the video carefully, then place the {target_color_name} cube on the {num} target it was previously placed on") language_goals.append(f"watch the video carefully and place the {target_color_name} cube on the {num} target where it was placed") elif env == 'PickHighlight': language_goals.append(f"first press the button, then pick up all cubes that have been highlighteted with white areas on the table") language_goals.append(f"first press the button, then pick up all highlighted cubes, finally press the button again to stop") elif env == "VideoRepick": num_repeats = self.num_repeats if num_repeats > 1: word = num2words.get(num_repeats, str(num_repeats)) language_goals.append(f'watch the video carefully, then repeatedly pick up and put down the same block that was previously picked up for {word} times, finally put it down and press the button to stop') if word == "two": language_goals.append(f"watch the video carefully, then pick up the same cube that was previously picked up twice, and finally press the button to stop") language_goals.append(f"watch the video carefully, identify the cube that was picked up, then pick up and place down the same cube twice, finally press the button to stop") else: language_goals.append(f"watch the video carefully, then pick up the same cube that was previously picked up {word} times, and finally press the button to stop") language_goals.append(f"watch the video carefully, identify the cube that was picked up, then pick up and place down the same cube {word} times, finally press the button to stop") else: language_goals.append(f'watch the video carefully, then pick up the same block that was previously picked up again, finally put it down and press the button to stop') language_goals.append(f"watch the video carefully, then pick up the same cube that was previously picked up again, finally press the button to stop") elif env == "StopCube": repeats = getattr(self.env.unwrapped, "stop_time", 1) word = num2words_2.get(repeats, str(repeats)) language_goals.append(f"press the button to stop the cube just as it reaches the target for the {word} time") language_goals.append(f"press the button to stop the cube exactly at the target on its {word} visit") elif env == "InsertPeg": language_goals.append(f"watch the video carefully, then grasp the same end of the same peg you've picked before and insert it into the same side of the box") language_goals.append(f"watch the video carefully, then grasp the same peg at the same end and insert it into the same side of the box as in the video") elif env == "MoveCube": language_goals.append(f"watch the video carefully, then move the cube to the target in the same manner as before") language_goals.append(f"watch the video carefully, then move the cube to the target in the same manner shown in the video") elif env == "PatternLock": language_goals.append(f"watch the video carefully, then use the stick attached to the robot to retrace the same pattern") language_goals.append(f"watch the video carefully, then use the stick attached to the robot to retrace the same pattern shown in the video") elif env == "RouteStick": language_goals.append(f"watch the video carefully, then use the stick attached to the robot to navigate around the sticks on the table, following the same path") language_goals.append(f"watch the video carefully, then use the stick attached to the robot to navigate around the sticks on the table, following the same path shown in the video") return language_goals