Example #1
0
    def __init__(self, cfg):
        super(TextWorld, self).__init__()

        self.cfg = cfg

        # Load vocab
        self.nlp = spacy.load('en')
        with open('./vocab.txt') as f:
            self.vocab = f.read().split('\n')

        # Create tokenized dict
        self.word2id = {}
        for i, w in enumerate(self.vocab):
            self.word2id[w] = i

        # Set important tokens
        self.start = self.word2id['<S>']
        self.pad = self.word2id['<PAD>']
        self.end = self.word2id['</S>']
        self.unk = self.word2id['<UNK>']

        self.preposition_map = {
            'chop': 'with',
            'cook': 'with',
            'dice': 'with',
            'insert': 'into',
            'lock': 'with',
            'put': 'on',
            'slice': 'with',
            'take': 'from',
            'unlock': 'with'
        }
        self.preposition_map_encoded = {
            self.word2id[key]: self.word2id[val]
            for (key, val) in self.preposition_map.items()
        }

        self.possible_cmds = [
            'chop', 'close', 'cook', 'dice', 'drink', 'drop', 'eat', 'examine',
            'go', 'insert', 'inventory', 'lock', 'look', 'open', 'prepare',
            'put', 'slice', 'take', 'unlock'
        ]
        self.possible_cmds_encoded = [
            self.word2id[cmd] for cmd in self.possible_cmds
        ]

        # Get list of games
        self.games = glob.glob(cfg['data_dir'] + '*.ulx')

        # Start session
        requested_infos = EnvInfos(extras=['walkthrough'])
        requested_infos.entities = True
        requested_infos.admissible_commands = True
        env_id = textworld.gym.register_games(
            self.games, requested_infos, max_episode_steps=cfg['max_steps'])
        env_id = textworld.gym.make_batch(env_id,
                                          batch_size=cfg['num_agents'],
                                          parallel=False)
        self.env = gym.make(env_id)
Example #2
0
 def infos_to_request(self) -> EnvInfos:
     request_infos = EnvInfos()
     request_infos.description = True
     request_infos.inventory = True
     request_infos.entities = True
     request_infos.verbs = True
     request_infos.extras = ["recipe"]
     return request_infos
Example #3
0
 def select_additional_infos():
     request_infos = EnvInfos()
     request_infos.description = True
     request_infos.inventory = True
     request_infos.entities, request_infos.verbs = True, True
     request_infos.max_score = True
     request_infos.extras = ["recipe"]
     request_infos.admissible_commands = True
     return request_infos
Example #4
0
 def select_additional_infos(self) -> EnvInfos:
     request_infos = EnvInfos()
     request_infos.has_won = True
     request_infos.has_lost = True
     request_infos.description = True
     request_infos.inventory = True
     request_infos.command_templates = True
     request_infos.entities = False
     request_infos.admissible_commands = False
     return request_infos
    def select_additional_infos(self) -> EnvInfos:
        request_infos = EnvInfos()
        request_infos.description = True
        request_infos.inventory = True
        request_infos.entities = True
        request_infos.verbs = True
        request_infos.extras = ["recipe", "walkthrough"]
        request_infos.admissible_commands = True

        return request_infos
    def select_additional_infos(self) -> EnvInfos:
        request_infos = EnvInfos()
        request_infos.description = True
        request_infos.inventory = True
        if self.config['general']['hcp'] >= 2:
            request_infos.entities = True
            request_infos.verbs = True
        if self.config['general']['hcp'] >= 4:
            request_infos.extras = ["recipe"]
        if self.config['general']['hcp'] >= 5:
            request_infos.admissible_commands = True

        # TEST
        request_infos.entities = True
        request_infos.verbs = True
        request_infos.extras = ["recipe", "walkthrough"]
        request_infos.admissible_commands = True

        return request_infos
Example #7
0
    def select_additional_infos(self) -> EnvInfos:
        """
        Returns what additional information should be made available at each game step.

        Requested information will be included within the `infos` dictionary
        passed to `CustomAgent.act()`. To request specific information, create a
        :py:class:`textworld.EnvInfos <textworld.envs.wrappers.filter.EnvInfos>`
        and set the appropriate attributes to `True`. The possible choices are:

        * `description`: text description of the current room, i.e. output of the `look` command;
        * `inventory`: text listing of the player's inventory, i.e. output of the `inventory` command;
        * `max_score`: maximum reachable score of the game;
        * `objective`: objective of the game described in text;
        * `entities`: names of all entities in the game;
        * `verbs`: verbs understood by the the game;
        * `command_templates`: templates for commands understood by the the game;
        * `admissible_commands`: all commands relevant to the current state;

        In addition to the standard information, game specific information
        can be requested by appending corresponding strings to the `extras`
        attribute. For this competition, the possible extras are:

        * `'recipe'`: description of the cookbook;
        * `'walkthrough'`: one possible solution to the game (not guaranteed to be optimal);

        Example:
            Here is an example of how to request information and retrieve it.

            >>> from textworld import EnvInfos
            >>> request_infos = EnvInfos(description=True, inventory=True, extras=["recipe"])
            ...
            >>> env = gym.make(env_id)
            >>> ob, infos = env.reset()
            >>> print(infos["description"])
            >>> print(infos["inventory"])
            >>> print(infos["extra.recipe"])

        Notes:
            The following information *won't* be available at test time:

            * 'walkthrough', 'facts'
        """
        request_infos = EnvInfos()
        request_infos.description = True
        request_infos.inventory = True
        request_infos.entities = True
        request_infos.verbs = True
        request_infos.extras = ["recipe"]
        request_infos.facts = True
        request_infos.location = True
        return request_infos
Example #8
0
    def request_infos() -> Optional[EnvInfos]:
        """Request the infos the agent expects from the environment

        Returns:
            request_infos: EnvInfos"""
        request_infos = EnvInfos()
        request_infos.description = True
        request_infos.inventory = True
        request_infos.entities = True
        request_infos.verbs = True
        request_infos.admissible_commands = True
        request_infos.command_templates = True
        request_infos.max_score = True
        return request_infos
    def setup(self) -> EnvInfos:
        requested_infos = EnvInfos()
        requested_infos.description = True
        requested_infos.inventory = True
        requested_infos.entities = True
        requested_infos.verbs = True
        requested_infos.extras = ["recipe", "walkthrough"]
        requested_infos.admissible_commands = True

        env_id = textworld.gym.register_games(
            self.games,
            requested_infos,
            max_episode_steps=self.max_nb_steps,
            name="training")
        env_id = textworld.gym.make_batch(env_id,
                                          batch_size=self.batch_size,
                                          parallel=True)

        return gym.make(env_id)