iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
Software Development

30 天的 SFC 學習日誌系列 第 26

Day 26 - DQN實作 - MountainCar(2)

大家好,我是毛毛。
今天是Day 26
今天要來看MountainCar的訓練結果啦~ ヽ(✿゚▽゚)ノ


Main

Gym and Load_weights

   env = gym.make("MountainCar-v0")
   dqn_agent = DQN(env=env, gamma=0.9, epsilon = .95)
   
   print("=================================================================")
   print("Old weights: \n", dqn_agent.get_weights())
   print("=================================================================")
   
   filepath = "./dqn.MountainCar_weights.h5"

   if os.path.isfile(filepath):
     print("Exist\n")
     dqn_agent.load_weights("./dqn.MountainCar_weights.h5")
     print("=================================================================")
     print("Revised weights: \n", dqn_agent.get_weights())
     print("=================================================================")
   else:
     print("Not exist\n")

這邊也跟CartPole一樣

  • 建立gym的環境和DQN
  • 讀取之前的權重

Loop

   times  = 3000
   max_step = 500
   for time in range(times):
       total_reward = 0
       obs = env.reset().reshape(1,2)

       for step in range(max_step):
           env.render()
           action = dqn_agent.choose_action(obs)
           obs_, reward, terminal, _ = env.step(action)
           total_reward += reward

           obs_ = obs_.reshape(1,2)
           dqn_agent.store_transition(obs, action, reward, obs_, terminal)

           dqn_agent.replay_transition()  
           
           dqn_agent.target_replacement() 
           obs = obs_

           if terminal:
               env.render()
               break

       if total_reward == -200:
           print("Failed to complete in time {} with {} reward".format(time, total_reward))

       else:
           print('Nice!! 。:.゚ヽ(*´∀`)ノ゚.:。')
           print("Completed in {} times with {} steps and {} reward".format(time, step, total_reward))
           dqn_agent.save_weights("./dqn.MountainCar_weights.h5")
           #break

   env.close()

重複的部分就不講啦,這邊因為MountainCar的回合結束,只看是不是到了終點,或是走了200步,也就是得到-200的reward,因為只要沒到終點,每一步的reward都是-1。
所以我只有在到終點的時候才將weights更新。
這邊新加的一個就是env.close(),用來關閉gym的模擬視窗。


執行結果


執行結果

https://ithelp.ithome.com.tw/upload/images/20201002/20129934te0rNgeXvJ.png
這邊只放一個weights的圖,因為一開始訓練的時候幾乎不會走到終點,所以權重都沒什麼更新到,old weights和revised weights印出來基本上都一樣。

https://ithelp.ithome.com.tw/upload/images/20201002/201299346tw7BvhLqK.png
Console的執行結果,成功的結果中,所花的steps有愈來愈少的趨勢~ d(d'∀')


MountainCar的實作就到這啦~ 0(:3 )~ ('、3_ヽ)_
大家明天見/images/emoticon/emoticon29.gif


上一篇
Day 25 - DQN實作 - MountainCar(1)
下一篇
Day 27 - DQN實作 - Acrobot(1)
系列文
30 天的 SFC 學習日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
rtfgvb74125
iT邦新手 4 級 ‧ 2021-01-10 15:48:40

請問老師在Main當中的Max_step代表的是什麼?

毛毛 iT邦新手 4 級 ‧ 2021-01-10 17:43:14 檢舉

總共3000次的iterations,其中每次可以走的最大步數

白話一點說是每執行一次最多只能走500步,總共執行3000次,我這樣翻譯對嗎?

我要留言

立即登入留言