data/envs/download_expert_scores.py (184 lines of code) (raw):
"""
This script donwload the expert score from the dataset for all the
metaworld environments and saves them in a dictionary.
"""
import json
import os
import numpy as np
from datasets import load_dataset
from tqdm import tqdm
ENV_NAMES = [
"atari-alien",
"atari-amidar",
"atari-assault",
"atari-asterix",
"atari-asteroids",
"atari-atlantis",
"atari-bankheist",
"atari-battlezone",
"atari-beamrider",
"atari-berzerk",
"atari-bowling",
"atari-boxing",
"atari-breakout",
"atari-centipede",
"atari-choppercommand",
"atari-crazyclimber",
"atari-defender",
"atari-demonattack",
"atari-doubledunk",
"atari-enduro",
"atari-fishingderby",
"atari-freeway",
"atari-frostbite",
"atari-gopher",
"atari-gravitar",
"atari-hero",
"atari-icehockey",
"atari-jamesbond",
"atari-kangaroo",
"atari-krull",
"atari-kungfumaster",
"atari-montezumarevenge",
"atari-mspacman",
"atari-namethisgame",
"atari-phoenix",
"atari-pitfall",
"atari-pong",
"atari-privateeye",
"atari-qbert",
"atari-riverraid",
"atari-roadrunner",
"atari-robotank",
"atari-seaquest",
"atari-skiing",
"atari-solaris",
"atari-spaceinvaders",
"atari-stargunner",
"atari-surround",
"atari-tennis",
"atari-timepilot",
"atari-tutankham",
"atari-upndown",
"atari-venture",
"atari-videopinball",
"atari-wizardofwor",
"atari-yarsrevenge",
"atari-zaxxon",
"babyai-action-obj-door",
"babyai-blocked-unlock-pickup",
"babyai-boss-level-no-unlock",
"babyai-boss-level",
"babyai-find-obj-s5",
"babyai-go-to-door",
"babyai-go-to-imp-unlock",
"babyai-go-to-local",
"babyai-go-to-obj-door",
"babyai-go-to-obj",
"babyai-go-to-red-ball-grey",
"babyai-go-to-red-ball-no-dists",
"babyai-go-to-red-ball",
"babyai-go-to-red-blue-ball",
"babyai-go-to-seq",
"babyai-go-to",
"babyai-key-corridor",
"babyai-mini-boss-level",
"babyai-move-two-across-s8n9",
"babyai-one-room-s8",
"babyai-open-door",
"babyai-open-doors-order-n4",
"babyai-open-red-door",
"babyai-open-two-doors",
"babyai-open",
"babyai-pickup-above",
"babyai-pickup-dist",
"babyai-pickup-loc",
"babyai-pickup",
"babyai-put-next-local",
"babyai-put-next",
"babyai-synth-loc",
"babyai-synth-seq",
"babyai-synth",
"babyai-unblock-pickup",
"babyai-unlock-local",
"babyai-unlock-pickup",
"babyai-unlock-to-unlock",
"babyai-unlock",
"metaworld-assembly",
"metaworld-basketball",
"metaworld-bin-picking",
"metaworld-box-close",
"metaworld-button-press-topdown-wall",
"metaworld-button-press-topdown",
"metaworld-button-press-wall",
"metaworld-button-press",
"metaworld-coffee-button",
"metaworld-coffee-pull",
"metaworld-coffee-push",
"metaworld-dial-turn",
"metaworld-disassemble",
"metaworld-door-close",
"metaworld-door-lock",
"metaworld-door-open",
"metaworld-door-unlock",
"metaworld-drawer-close",
"metaworld-drawer-open",
"metaworld-faucet-close",
"metaworld-faucet-open",
"metaworld-hammer",
"metaworld-hand-insert",
"metaworld-handle-press-side",
"metaworld-handle-press",
"metaworld-handle-pull-side",
"metaworld-handle-pull",
"metaworld-lever-pull",
"metaworld-peg-insert-side",
"metaworld-peg-unplug-side",
"metaworld-pick-out-of-hole",
"metaworld-pick-place-wall",
"metaworld-pick-place",
"metaworld-plate-slide-back-side",
"metaworld-plate-slide-back",
"metaworld-plate-slide-side",
"metaworld-plate-slide",
"metaworld-push-back",
"metaworld-push-wall",
"metaworld-push",
"metaworld-reach-wall",
"metaworld-reach",
"metaworld-shelf-place",
"metaworld-soccer",
"metaworld-stick-pull",
"metaworld-stick-push",
"metaworld-sweep-into",
"metaworld-sweep",
"metaworld-window-close",
"metaworld-window-open",
"mujoco-ant",
"mujoco-doublependulum",
"mujoco-halfcheetah",
"mujoco-hopper",
"mujoco-humanoid",
"mujoco-pendulum",
"mujoco-pusher",
"mujoco-reacher",
"mujoco-standup",
"mujoco-swimmer",
"mujoco-walker",
]
FILENAME = "jat/eval/rl/scores_dict.json"
for env_name in tqdm(ENV_NAMES):
tqdm.write(f"Downloading expert scores for {env_name}")
dataset = load_dataset("jat-project/jat-dataset", env_name)
# Initialize the variables
rewards = dataset["train"]["rewards"] + dataset["test"]["rewards"]
episode_sum_rewards = [np.sum(r) for r in rewards]
# Load the scores dictionary
if not os.path.exists(FILENAME):
scores_dict = {}
else:
with open(FILENAME, "r") as file:
scores_dict = json.load(file)
# Add the expert scores to the dictionary
if env_name not in scores_dict:
scores_dict[env_name] = {}
scores_dict[env_name]["expert"] = {"mean": np.mean(episode_sum_rewards), "std": np.std(episode_sum_rewards)}
# Save the dictionary to a file
with open(FILENAME, "w") as file:
scores_dict = {
task: {agent: scores_dict[task][agent] for agent in sorted(scores_dict[task])}
for task in sorted(scores_dict)
}
json.dump(scores_dict, file, indent=4)