@@ -137,7 +137,13 @@ class ReplayBuffer
137137 if (capacity () - dones.size () >= players_states[i].size ())
138138 {
139139 // printf("Saving...\n");
140- auto stacked = torch::stack (players_states[i]);
140+ torch::Tensor stacked = torch::stack (players_states[i]);
141+ int64_t T = stacked.size (0 );
142+ int64_t remainder = T % seq_len;
143+ if (remainder != 0 )
144+ {
145+ stacked = stacked.slice (0 , remainder, T);
146+ }
141147 // while(true)
142148 // {
143149 // stacked = torch::stack(players_states[i]);
@@ -150,31 +156,48 @@ class ReplayBuffer
150156 // printf("2\n");
151157
152158 stacked = torch::stack (players_actions[i]);
159+ if (remainder != 0 )
160+ {
161+ stacked = stacked.slice (0 , remainder, T);
162+ }
153163 // printf("2.1\n");
154164 // actions.index({(long long)(dones.size())}).copy_(stacked, true);
155165 actions.index ({torch::indexing::Slice (dones.size (), dones.size () + stacked.size (0 ))}).copy_ (stacked, true );
156166 players_actions[i].clear ();
157167 // printf("3\n");
158168
159169 stacked = torch::stack (players_log_probs[i]);
170+ if (remainder != 0 )
171+ {
172+ stacked = stacked.slice (0 , remainder, T);
173+ }
160174 log_probs.index ({torch::indexing::Slice (dones.size (), dones.size () + stacked.size (0 ))}).copy_ (stacked, true );
161175 // log_probs.index({(long long)(dones.size())}).copy_(stacked, true);
162176 players_log_probs[i].clear ();
163177 // printf("4\n");
164178
165179 stacked = torch::stack (players_h_lstm[i]);
180+ if (remainder != 0 )
181+ {
182+ stacked = stacked.slice (0 , remainder, T);
183+ }
166184 h_lstm.index ({0 , torch::indexing::Slice (dones.size (), dones.size () + stacked.size (0 ))}).copy_ (stacked, true );
167185 players_h_lstm[i].clear ();
168186
169187 stacked = torch::stack (players_c_lstm[i]);
188+ if (remainder != 0 )
189+ {
190+ stacked = stacked.slice (0 , remainder, T);
191+ }
170192 c_lstm.index ({0 , torch::indexing::Slice (dones.size (), dones.size () + stacked.size (0 ))}).copy_ (stacked, true );
171193 players_c_lstm[i].clear ();
172194
173- rewards.insert (rewards.end (), players_rewards[i].begin (), players_rewards[i].end ());
195+ rewards.insert (rewards.end (), players_rewards[i].begin () + remainder, players_rewards[i].end ());
196+ accumulation_resets.insert (accumulation_resets.end (), players_accumulation_resets[i].begin () + remainder, players_accumulation_resets[i].end ());
197+ dones.insert (dones.end (), players_dones[i].begin () + remainder, players_dones[i].end ());
198+
174199 players_rewards[i].clear ();
175- accumulation_resets.insert (accumulation_resets.end (), players_accumulation_resets[i].begin (), players_accumulation_resets[i].end ());
176200 players_accumulation_resets[i].clear ();
177- dones.insert (dones.end (), players_dones[i].begin (), players_dones[i].end ());
178201 players_dones[i].clear ();
179202 // printf("Saved.\n");
180203 count_episodes += 1 ;
0 commit comments