mhsnar's picture
Add files using upload-large-folder tool
7985e7e verified
Raw History Blame Contribute Delete
1.82 kB
import numpy as np
from .d4rl import load_environment
def compose(*fns):
def _fn(x):
for fn in fns:
x = fn(x)
return x
return _fn
def get_preprocess_fn(fn_names, env):
fns = [eval(name)(env) for name in fn_names]
return compose(*fns)
def get_policy_preprocess_fn(fn_names):
fns = [eval(name) for name in fn_names]
return compose(*fns)
def arctanh_actions(*args, **kwargs):
epsilon = 1e-4
def _fn(dataset):
actions = dataset["actions"]
assert (
actions.min() >= -1 and actions.max() <= 1
), f"applying arctanh to actions in range [{actions.min()}, {actions.max()}]"
actions = np.clip(actions, -1 + epsilon, 1 - epsilon)
dataset["actions"] = np.arctanh(actions)
return dataset
return _fn
def add_deltas(env):
def _fn(dataset):
deltas = dataset["next_observations"] - dataset["observations"]
dataset["deltas"] = deltas
return dataset
return _fn
def maze2d_set_terminals(env):
env = load_environment(env) if type(env) == str else env
goal = np.array(env._target)
threshold = 0.5
def _fn(dataset):
xy = dataset["observations"][:, :2]
distances = np.linalg.norm(xy - goal, axis=-1)
at_goal = distances < threshold
timeouts = np.zeros_like(dataset["timeouts"])
timeouts[:-1] = at_goal[:-1] * ~at_goal[1:]
timeout_steps = np.where(timeouts)[0]
path_lengths = timeout_steps[1:] - timeout_steps[:-1]
print(
f"[ utils/preprocessing ] Segmented {env.name} | {len(path_lengths)} paths | "
f"min length: {path_lengths.min()} | max length: {path_lengths.max()}"
)
dataset["timeouts"] = timeouts
return dataset
return _fn