This example focuses on:
Even if this example shows how to record episode generated by a human player, the same wrapper can be used with any kind of agent, including trained bots. It can thus be leveraged to collect a dataset for offline training.
A dedicated section describing the episode recording wrapper settings is presented here and provides additional details on their usage and purpose.
Depending on the Operating System used, specific permissions may be needed in order to read the keyboard inputs.
- On Windows, by default no specific permissions are needed. However, if you have some third-party security software you may need to white-list Python.
- On Linux you need to add the user the input
group: sudo usermod -aG input $USER
- On Mac, it is possible you need to use the settings application to allow your program to access the input devices (see this reference).
Official inputs
python package reference guide can be found at this link
import os
from os.path import expanduser
import diambra.arena
from diambra.arena import SpaceTypes, EnvironmentSettings, RecordingSettings
from diambra.arena.utils.controller import get_diambra_controller
import argparse
def main(use_controller):
# Environment Settings
settings = EnvironmentSettings()
settings.step_ratio = 1
settings.frame_shape = (256, 256, 1)
settings.action_space = SpaceTypes.MULTI_DISCRETE
# Recording settings
home_dir = expanduser("~")
game_id = "doapp"
recording_settings = RecordingSettings()
recording_settings.dataset_path = os.path.join(home_dir, "DIAMBRA/episode_recording", game_id if use_controller else "mock")
recording_settings.username = "alexpalms"
env = diambra.arena.make(game_id, settings, episode_recording_settings=recording_settings, render_mode="human")
if use_controller is True:
# Controller initialization
controller = get_diambra_controller(env.get_actions_tuples())
controller.start()
observation, info = env.reset(seed=42)
while True:
env.render()
if use_controller is True:
actions = controller.get_actions()
else:
actions = env.action_space.sample()
observation, reward, terminated, truncated, info = env.step(actions)
done = terminated or truncated
if done:
observation, info = env.reset()
break
if use_controller is True:
controller.stop()
env.close()
# Return success
return 0
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--use_controller', type=int, default=1, help='Flag to activate use of controller')
opt = parser.parse_args()
print(opt)
main(bool(opt.use_controller))