<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在本節中,我們將學習一種比隨機選擇動作更復雜的策略來解決 CartPole
問題——隨機搜尋策略。
一種簡單但有效的方法是將智慧體對環境的觀測值對映到代表兩個動作的二維向量,然後我們選擇值較高的動作執行。對映函數使用權重矩陣描述,權重矩陣的形狀為 4 x 2
,因為在CarPole環境中狀態是一個 4
維向量,而動作有 2
個可能值。在每個回合中,首先隨機生成權重矩陣,並用於計算此回合中每個步驟的動作,並在回合結束時計算總獎勵。重複此過程,最後將能夠得到最高總獎勵的權重矩陣作為最終的動作選擇策略。由於在每個回合中我們均會隨機選擇權重矩陣,因此稱這種方法為隨機搜尋,期望通過在多個回合的測試中找到最佳權重。
在本節中,我們使用 PyTorch
實現隨機搜尋演演算法。
首先,匯入 Gym
和 PyTorch
以及其他所需庫,並建立一個 CartPole
環境範例:
import gym import torch from matplotlib import pyplot as plt env = gym.make('CartPole-v0')
獲取並列印狀態空間和行動空間的尺寸:
n_state = env.observation_space.shape[0] print(n_state) # 4 n_action = env.action_space.n print(n_action) # 2
當我們在之後定義權重矩陣時,將會使用這些尺寸,即權重矩陣尺寸為 (n_state, n_action) = (4 x 2)
。
接下來,定義函數用於使用給定輸入權重模擬 CartPole
環境的一個遊戲回合並返回此回合中的總獎勵:
def run_episode(env, weight): state = env.reset() total_reward = 0 is_done = False while not is_done: state = torch.from_numpy(state).float() action = torch.argmax(torch.matmul(state, weight)) state, reward, is_done, _ = env.step(action.item()) total_reward += reward return total_reward
在以上程式碼中,我們首先將狀態陣列 state
轉換為浮點型張量,然後計算狀態陣列和權重矩陣張量的乘積 torch.matmul(state, weight)
,以將狀態陣列進行對映對映為動作陣列,使用 torch.argmax()
操作選擇值較高的動作,例如值為 [0.122, 0.333]
,則應選擇動作 1
。然後使用 item()
方法獲取操作結果值,因為此處的 step()
方法需要接受單元素張量,獲取新的狀態和獎勵。重複以上過程,直到回合結束。
指定回合數,並初始化變數用於記錄最佳總獎勵和相應權重矩陣,並初始化陣列用於記錄每個回合的總獎勵:
n_episode = 1000 best_total_reward = 0 best_weight = None total_rewards = []
接下來,我們執行 n_episode
個回合,在每個回合中,執行以下操作:
for e in range(n_episode): weight = torch.rand(n_state, n_action) total_reward = run_episode(env, weight) print('Episode {}: {}'.format(e+1, total_reward)) if total_reward > best_total_reward: best_weight = weight best_total_reward = total_reward total_rewards.append(total_reward)
執行 1000
次隨機搜尋獲得最佳策略,最佳策略由 best_weight
引數化。在測試最佳策略之前,我們可以計算通過隨機搜尋獲得的平均總獎勵:
print('Average total reward over {} episode: {}'.format(n_episode, sum(total_rewards) / n_episode)) # Average total reward over 1000 episode: 46.722
可以看到,對比使用隨機動作獲得的結果 (22.19
),使用隨機搜尋獲取的總獎勵是其兩倍以上。
接下來,我們使用隨機搜尋得到的最佳權重矩陣,在 1000
個新的回合中測試其表現如何:
n_episode_eval = 1000 total_rewards_eval = [] for episode in range(n_episode_eval): total_reward = run_episode(env, best_weight) print('Episode {}: {}'.format(episode+1, total_reward)) total_rewards_eval.append(total_reward) print('Average total reward over {} episode: {}'.format(n_episode_eval, sum(total_rewards_eval) / n_episode_eval)) # Average total reward over 1000 episode: 114.786
隨機搜尋演演算法的效果能夠獲取較好結果的主要原因是 CartPole
環境較為簡單。它的觀察狀態陣列僅由四個變陣列成。而在 Atari Space Invaders
遊戲中的觀察值超過 100000
(即 210 times 160 times 3210×160×3)。同樣 CartPole
中動作狀態的維數也僅僅為 2
。通常,使用簡單演演算法可以很好地解決簡單問題。
我們也可以注意到,隨機搜尋策略的效能優於隨機選擇動作。這是因為隨機搜尋策略將智慧體對環境的當前狀態考慮在內。有了關於環境的相關資訊,隨機搜尋策略中的動作就可以比完全隨機的選擇動作更加智慧。
我們還可以在訓練和測試階段繪製每個回合的總獎勵:
plt.plot(total_rewards, label='search') plt.plot(total_rewards_eval, label='eval') plt.xlabel('episode') plt.ylabel('total_reward') plt.legend() plt.show()
可以看到,每個回合的總獎勵是非常隨機的,並且並沒有因為回合數的增加顯示出改善的趨勢。在訓練過程中,可以看到在實現前期有些回合的總獎勵已經可以達到 200
,由於智慧體的策略並不會因為回合數的增加而改善,因此我們可以在回合總獎勵達到 200
時結束訓練:
n_episode = 1000 best_total_reward = 0 best_weight = None total_rewards = [] for episode in range(n_episode): weight = torch.rand(n_state, n_action) total_reward = run_episode(env, weight) print('Episode {}: {}'.format(episode+1, total_reward)) if total_reward > best_total_reward: best_weight = weight best_total_reward = total_reward total_rewards.append(total_reward) if best_total_reward == 200: break
由於每回合的權重都是隨機生成的,因此獲取最大獎勵的策略出現的回合也並不確定。要計算所需訓練回合的期望,可以重複以上訓練過程 1000
次,並取訓練次數的平均值作為期望:
n_training = 1000 n_episode_training = [] for _ in range(n_training): for episode in range(n_episode): weight = torch.rand(n_state, n_action) total_reward = run_episode(env, weight) if total_reward == 200: n_episode_training.append(episode+1) break print('Expectation of training episodes needed: ', sum(n_episode_training) / n_training) # Expectation of training episodes needed: 14.26
可以看到,平均而言,我們預計大約需要 14
個回合才能找到最佳策略。
到此這篇關於使用PyTorch實現隨機搜尋策略的文章就介紹到這了,更多相關PyTorch隨機搜尋內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45