mirror of
https://github.com/Farama-Foundation/Gymnasium.git
synced 2025-08-31 02:06:08 +00:00
optimize reinforce_invpend_gym_v26.py (#638)
This commit is contained in:
@@ -193,29 +193,34 @@ class REINFORCE:
|
|||||||
"""Updates the policy network's weights."""
|
"""Updates the policy network's weights."""
|
||||||
running_g = 0
|
running_g = 0
|
||||||
gs = []
|
gs = []
|
||||||
|
|
||||||
# Discounted return (backwards) - [::-1] will return an array in reverse
|
# Discounted return (backwards) - [::-1] will return an array in reverse
|
||||||
for R in self.rewards[::-1]:
|
for R in self.rewards[::-1]:
|
||||||
running_g = R + self.gamma * running_g
|
running_g = R + self.gamma * running_g
|
||||||
gs.insert(0, running_g)
|
gs.insert(0, running_g)
|
||||||
|
|
||||||
deltas = torch.tensor(gs)
|
deltas = torch.tensor(gs)
|
||||||
|
|
||||||
loss = 0
|
log_probs = torch.stack(self.probs)
|
||||||
# minimize -1 * prob * reward obtained
|
|
||||||
for log_prob, delta in zip(self.probs, deltas):
|
# Calculate the mean of log probabilities for all actions in the episode
|
||||||
loss += log_prob.mean() * delta * (-1)
|
log_prob_mean = log_probs.mean()
|
||||||
|
|
||||||
|
# Update the loss with the mean log probability and deltas
|
||||||
|
# Now, we compute the correct total loss by taking the sum of the element-wise products.
|
||||||
|
loss = -torch.sum(log_prob_mean * deltas)
|
||||||
|
|
||||||
# Update the policy network
|
# Update the policy network
|
||||||
self.optimizer.zero_grad()
|
self.optimizer.zero_grad()
|
||||||
loss.backward()
|
loss.backward()
|
||||||
self.optimizer.step()
|
self.optimizer.step()
|
||||||
|
|
||||||
# Empty / zero out all episode-centric/related variables
|
# Empty / zero out all episode-centric/related variables
|
||||||
self.probs = []
|
self.probs = []
|
||||||
self.rewards = []
|
self.rewards = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# %%
|
# %%
|
||||||
# Now lets train the policy using REINFORCE to master the task of Inverted Pendulum.
|
# Now lets train the policy using REINFORCE to master the task of Inverted Pendulum.
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user