Zhehui-Huang / quad-swarm-rl

Additional environments compatible with OpenAI gym
98 stars 39 forks source link

Multi_drone training #53

Closed CowFromSpace closed 2 months ago

CowFromSpace commented 6 months ago

When I executed the train.sh you provided, I obtained the actual execution parameters as follows:

python -m swarm_rl.train --env=quadrotor_multi --train_for_env_steps=1000000000 --algo=APPO --use_rnn=False --num_workers=2 --num_envs_per_worker=8 --learning_rate=0.0001 --ppo_clip_value=5.0 --recurrence=1 --nonlinearity=tanh --actor_critic_share_weights=False --policy_initialization=xavier_uniform --adaptive_stddev=False --with_vtrace=False --max_policy_lag=100000000 --rnn_size=256 --with_pbt=False --gae_lambda=1.00 --max_grad_norm=5.0 --exploration_loss_coeff=0.0 --rollout=128 --batch_size=1024 --quads_use_numba=True --quads_num_agents=1 --quads_mode=static_same_goal --quads_episode_duration=15.0 --quads_neighbor_encoder_type=no_encoder --quads_neighbor_hidden_size=0 --quads_neighbor_obs_type=none --quads_neighbor_visible_num=0 --replay_buffer_sample_prob=0.75 --anneal_collision_steps=300000000 --normalize_input=False --normalize_returns=False --reward_clip=10.0 --save_milestones_sec=3600 --with_wandb=False --wandb_project=Quad-Swarm-RL --wandb_group=single --wandb_user=multi-drones

I observed that following the settings in train.sh, the training seems to involve only one drone flying to a specific target point. This results in continuous collisions when testing with eight drones. Therefore, I attempted to execute the following command:

python -m swarm_rl.train --env=quadrotor_multi --train_for_env_steps=1000000000 --algo=APPO --use_rnn=False --num_workers=2 --num_envs_per_worker=8 --learning_rate=0.0001 --ppo_clip_value=5.0 --recurrence=1 --nonlinearity=tanh --actor_critic_share_weights=False --policy_initialization=xavier_uniform --adaptive_stddev=False --with_vtrace=False --max_policy_lag=100000000 --rnn_size=256 --with_pbt=False --gae_lambda=1.00 --max_grad_norm=5.0 --exploration_loss_coeff=0.0 --rollout=128 --batch_size=1024 --quads_use_numba=True --quads_num_agents=8 --quads_mode=static_same_goal --quads_episode_duration=15.0 --quads_neighbor_encoder_type=no_encoder --quads_neighbor_hidden_size=0 --quads_neighbor_obs_type=none --quads_neighbor_visible_num=6 --replay_buffer_sample_prob=0.75 --anneal_collision_steps=300000000 --normalize_input=False --normalize_returns=False --reward_clip=10.0 --save_milestones_sec=3600 --with_wandb=False --wandb_project=Quad-Swarm-RL --wandb_group=single --wandb_user=multi-drones

I made two changes: --quads_num_agents=8 and --quads_neighbor_visible_num=6. However, this resulted in the following error:

[2023-12-22 17:52:10,271][16072] EvtLoop [rollout_proc1_evt_loop, process=rollout_proc1] unhandled exception in slot='init' connected to emitter=Emitter(object_id='Sampler', signal_name='_inference_workers_initialized'), args=() Traceback (most recent call last): File "/home/handsome/anaconda3/envs/swarm-rl/lib/python3.8/site-packages/signal_slot/signal_slot.py", line 355, in _process_signal slot_callable(*args) File "/home/handsome/anaconda3/envs/swarm-rl/lib/python3.8/site-packages/sample_factory/algo/sampling/rollout_worker.py", line 150, in init env_runner.init(self.timing) File "/home/handsome/anaconda3/envs/swarm-rl/lib/python3.8/site-packages/sample_factory/algo/sampling/non_batched_sampling.py", line 418, in init self._reset() File "/home/handsome/anaconda3/envs/swarm-rl/lib/python3.8/site-packages/sample_factory/algo/sampling/non_batched_sampling.py", line 430, in _reset observations, info = e.reset(seed=seed) # new way of doing seeding since Gym 0.26.0 File "/home/handsome/anaconda3/envs/swarm-rl/lib/python3.8/site-packages/gymnasium/core.py", line 414, in reset return self.env.reset(seed=seed, options=options) ... ValueError: operands could not be broadcast together with shapes (8,36) (0,) (0,)

It seems I encountered an error, and I'm wondering what steps I might have missed.

Zhehui-Huang commented 6 months ago

You also need to specify at least following hyper-parameters:

  1. --quads_neighbor_encoder_type.
  2. --quads_neighbor_hidden_size.
  3. --quads_neighbor_obs_type.