Пример #1
0
def main():
    args = parse_args()
    if args.very_verbose:
        args.verbose = args.very_verbose
        warnings.simplefilter("default", textworld.TextworldGenerationWarning)

    if args.seed is None:
        args.seed = np.random.randint(65635)

    grammar_flags = {
        "theme": args.theme,
        "include_adj": args.include_adj,
        "only_last_action": args.only_last_action,
        "blend_instructions": args.blend_instructions,
        "blend_descriptions": args.blend_descriptions,
        "ambiguous_instructions": args.ambiguous_instructions
    }

    print("Random seed: {}".format(args.seed))
    rng = np.random.RandomState(args.seed)

    agent = make_agent(args)

    reward_history = []
    for i in range(args.nb_games) if args.nb_games > 0 else itertools.count():
        # Get a game seed to make everything reproducible.
        game_seed = rng.randint(65635)
        game_file, game = textworld.make(args.world_size,
                                         args.nb_objects,
                                         args.quest_length,
                                         grammar_flags,
                                         seed=game_seed,
                                         games_dir=args.output)

        print("Starting game {}".format(game_file))
        env = textworld.start(game_file, backend=args.backend)
        agent.reset(env)

        if args.vizu >= 0:
            from textworld.envs.wrappers import HtmlViewer
            env = HtmlViewer(env, port=args.vizu)

        game_state = env.reset()
        if args.mode == "human" or args.verbose:
            env.render()

        reward = 0
        done = False

        for t in range(
                args.max_steps) if args.max_steps > 0 else itertools.count():
            command = agent.act(game_state, reward, done)
            game_state, reward, done = env.step(command)

            if args.mode == "human" or args.verbose:
                env.render()

            if done:
                break

        env.close()
        print("Done after {} steps. Score {}/{}.".format(
            game_state.nb_moves, game_state.score, game_state.max_score))

        reward_history.append(reward)
        if args.nb_games == 0:  # Interactive mode.
            input("Press enter to generate a new game.")
def main():
    args = parse_args()
    if args.very_verbose:
        args.verbose = args.very_verbose
        warnings.simplefilter("default", textworld.TextworldGenerationWarning)

    if args.seed is None:
        args.seed = np.random.randint(65635)

    print("Random seed: {}".format(args.seed))
    rng = np.random.RandomState(args.seed)

    options = textworld.GameOptions()
    options.grammar.theme = args.theme
    options.grammar.include_adj = args.include_adj
    options.grammar.only_last_action = args.only_last_action
    options.grammar.blend_instructions = args.blend_instructions
    options.grammar.blend_descriptions = args.blend_descriptions
    options.grammar.ambiguous_instructions = args.ambiguous_instructions

    options.nb_rooms = args.world_size
    options.nb_objects = args.nb_objects
    options.quest_length = args.quest_length
    options.quest_breadth = args.quest_breadth

    agent = make_agent(args)

    reward_history = []
    for i in range(args.nb_games) if args.nb_games > 0 else itertools.count():
        options = options.copy()
        options.seeds = rng.randint(65635)
        game_file, game = textworld.make(options, args.output)

        print("Starting game {}".format(game_file))
        env = textworld.start(game_file)
        agent.reset(env)

        if args.vizu >= 0:
            from textworld.envs.wrappers import HtmlViewer
            env = HtmlViewer(env, port=args.vizu)

        game_state = env.reset()
        if args.mode == "human" or args.verbose:
            env.render()

        reward = 0
        done = False

        for t in range(
                args.max_steps) if args.max_steps > 0 else itertools.count():
            command = agent.act(game_state, reward, done)
            game_state, reward, done = env.step(command)

            if args.mode == "human" or args.verbose:
                env.render()

            if done:
                break

        env.close()
        print("Done after {} steps. Score {}/{}.".format(
            game_state.nb_moves, game_state.score, game_state.max_score))

        reward_history.append(reward)
        if args.nb_games == 0:  # Interactive mode.
            input("Press enter to generate a new game.")
Пример #3
0
def main():
    args = build_parser().parse_args()
    if args.very_verbose:
        args.verbose = args.very_verbose

    if args.state_fn:
        state_wf = logging.StreamHandler(open(args.state_fn, "w"))
        state_wf.setLevel(logging.INFO)
        state_logger = logging.getLogger("states")
        state_logger.setLevel(logging.INFO)
        state_logger.addHandler(state_wf)
        # open(args.state_fn, 'w')
    if args.utts_fn:
        # bc = logging.basicConfig(filename=args.utts_fn)
        utts_wf = logging.StreamHandler(open(args.utts_fn, "w"))
        # utts_wf = open(args.utts_fn, 'w')
    else:
        # bc = logging.basicConfig()
        utts_wf = logging.StreamHandler(sys.stdout)
    utts_wf.terminator = ''
    utts_wf.setLevel(logging.INFO)
    utts_logger = logging.getLogger("utterances")
    utts_logger.setLevel(logging.INFO)
    utts_logger.addHandler(utts_wf)

    request_infos = textworld.EnvInfos(inventory=True,
                                       description=True,
                                       facts=True)
    env = textworld.start(args.game, infos=request_infos)

    if args.mode == "random":
        agent = textworld.agents.NaiveAgent(seed=args.seed)
    elif args.mode == "random-cmd":
        # TODO get rid of redundancy
        agent = textworld.agents.RandomCommandAgent(seed=args.seed)
    elif args.mode == "human":
        agent = textworld.agents.HumanAgent()
    elif args.mode == 'walkthrough':
        agent = textworld.agents.WalkthroughAgent()

    agent.reset(env)
    if args.viewer is not None:
        from textworld.envs.wrappers import HtmlViewer
        env = HtmlViewer(env, port=args.viewer)

    if args.mode == "human" or args.very_verbose:
        utts_logger.info("Using {}.\n".format(env.__class__.__name__))

    game_state = env.reset()
    if args.mode == "human" or args.verbose:
        contents = env.render(mode="text")
        contents = '\n'.join(
            contents.split('\n')[22:])  # remove `TEXTWORLD` heading
        contents = contents.replace('\n\n', '\n')
        utts_logger.info(contents)
        if args.state_fn:
            state_logger.info(
                json.dumps({
                    'facts':
                    [Proposition.serialize(prop) for prop in env.state.facts],
                    'inventory':
                    env.state.inventory.replace('\n\n', '\n'),
                    'description':
                    env.state.description.replace('\n\n', '\n'),
                }))

    reward = 0
    done = False

    for _ in range(
            args.max_steps) if args.max_steps > 0 else itertools.count():
        # tw_inform7.py
        command = agent.act(game_state, reward, done)
        # env.state.game.world.facts
        game_state, reward, done = env.step(command)

        if args.mode == "human" or args.verbose:
            contents = env.render(mode="text")
            contents = contents.replace('\n\n', '\n').replace('\n\n', '\n')
            utts_logger.info(contents)
            if args.state_fn:
                state_logger.info(
                    json.dumps({
                        'facts': [
                            Proposition.serialize(prop)
                            for prop in env.state.facts
                        ],
                        'inventory':
                        env.state.inventory.replace('\n\n', '\n'),
                        'description':
                        env.state.description.replace('\n\n', '\n'),
                    }))

        if done:
            break

    env.close()
    utts_logger.info("Done after {} steps. Score {}/{}.".format(
        game_state.moves, game_state.score, game_state.max_score))