diffusion_policy_gbc / scripts /generate_particle.py
ducido's picture
Initial commit
987ed1b verified
Raw
History Blame Contribute Delete
2.65 kB
if __name__ == "__main__":
import sys
import os
import pathlib
import imageio
ROOT_DIR = str(pathlib.Path(__file__).parent.parent.parent)
sys.path.append(ROOT_DIR)
import os
import click
import pathlib
import numpy as np
from tqdm import tqdm
from diffusion_policy.common.replay_buffer import ReplayBuffer
from tf_agents.environments.wrappers import TimeLimit
from tf_agents.environments.gym_wrapper import GymWrapper
from tf_agents.trajectories.time_step import StepType
from diffusion_policy.env.particle.spread_env import ParticleSpreadEnv
from diffusion_policy.env.particle.oracles.spread_oracle import SpreadOracle
@click.command()
@click.option('-o', '--output', required=True)
@click.option('-n', '--n_episodes', default=1000)
@click.option('-c', '--chunk_length', default=-1)
def main(output, n_episodes, chunk_length):
buffer = ReplayBuffer.create_empty_numpy()
env = TimeLimit(GymWrapper(ParticleSpreadEnv()), duration=350)
# for i in tqdm(range(n_episodes)):
i = 0
num_failed_episodes = 0
while buffer.n_episodes < n_episodes:
print(i)
obs_history = list()
action_history = list()
env.seed(i)
policy = SpreadOracle(env)
time_step = env.reset()
policy_state = policy.get_initial_state(1)
# images = [env.render(mode='rgb_array')]
while True:
action_step = policy.action(time_step, policy_state)
obs = time_step.observation
action = action_step.action
obs_history.append(obs)
action_history.append(action)
if time_step.step_type == 2:
# assert time_step.reward == 1.0
break
# state = env.wrapped_env().gym.get_pybullet_state()
time_step = env.step(action)
# images.append(env.render(mode='rgb_array'))
if time_step.reward < 1.0:
print("Episode failed")
num_failed_episodes += 1
continue
i += 1
obs_history = np.array(obs_history)
action_history = np.array(action_history)
episode = {
'obs': obs_history,
'action': action_history
}
buffer.add_episode(episode)
# # Save video
# if not os.path.exists(output):
# os.makedirs(output)
# imageio.mimsave(f'{output}/episode_{i}.gif', images)
print("Length of episode:", len(obs_history), "Last reward:", time_step.reward)
buffer.save_to_path(output)
print("Number of failed episodes:", num_failed_episodes)
if __name__ == '__main__':
main()