強化學習 2 機械人找金幣例子

2021-08-27 11:41:43 字數 3053 閱讀 6462

本文介紹乙個簡單的案例。目標如下:

我們的機械人在上面的地圖上行走,目的是要找到寶藏,如果進入骷髏頭,遊戲就失敗。

我們對地圖上的小方格進行編號: 1 - 8

**簡單表示如下:

self.states = [1,2,3,4,5,6,7,8] #狀態空間
同時定義終止狀態:

self.terminate_states = dict()  #終止狀態為字典格式

self.terminate_states[6] = 1

self.terminate_states[7] = 1

self.terminate_states[8] = 1

動作空間很簡單:上,下,左,右

self.actions = ['n','e','s','w']
self.rewards = dict();        #回報的資料結構為字典

(如果不知道怎麼用 gym 畫圖,請跳**

**如下:

def render(self, mode='human', close=false):

# 建立地圖

lines =

line1 = rendering.line((0, 0), (0, 200))

line2 = rendering.line((120, 0), (120, 200))

line3 = rendering.line((0, 200), (600, 200))

line4 = rendering.line((0, 100), (600, 100))

line5 = rendering.line((240, 0), (240, 200))

line6 = rendering.line((360, 0), (360, 200))

line7 = rendering.line((480, 0), (480, 200))

line8 = rendering.line((600, 0), (600, 200))

line9 = rendering.line((0, 0), (120, 0))

line10 = rendering.line((240, 0), (360, 0))

line11 = rendering.line((480, 0), (600, 0))

# 建立骷髏

kulos =

kulo1 = rendering.make_circle(40)

kulo1_transiform = rendering.transform(translation=(60, 50))

kulo1.add_attr(kulo1_transiform)

kulo1.set_color(0, 0, 0)

kulo2 = rendering.make_circle(40)

kulo2_transiform = rendering.transform(translation=(540, 50))

kulo2.add_attr(kulo2_transiform)

kulo2.set_color(0, 0, 0)

# 建立寶藏

golds =

gold = rendering.make_circle(40)

circletrans = rendering.transform(translation=(300, 50))

gold.add_attr(circletrans)

gold.set_color(1, 0.9, 0)

# 建立機械人

robots =

robot = rendering.make_circle(40)

robot.set_color(0.8, 0.6, 0.4)

robot_transilation = rendering.transform(translation=(420, 150))

robot.add_attr(robot_transilation)

transiform = rendering.transform(translation=(50, 50))

for line_ in

lines:

line_.set_color(0, 0, 0)

line_.add_attr(transiform)

self.viewer.add_geom(line_)

for kulo_ in kulos:

kulo_.add_attr(transiform)

self.viewer.add_geom(kulo_)

for gold_ in golds:

gold_.add_attr(transiform)

self.viewer.add_geom(gold_)

for robot_ in robots:

robot_.add_attr(transiform)

self.viewer.add_geom(robot_)

return self.viewer.render(return_rgb_array=mode == 'rgb_array')

本例子用的演算法是dqn, 讀者可以先不管dqn是什麼

機械人找金幣

q 乙個機械人一天能夠找到4個金幣,而50個金幣可以購買新的機械人,問 在第n天,能夠找到的金幣數量的最大值?a 簡單分析可得,如果有足夠的錢,越早換機械人,對於不久後的某一天找到的金幣數量越多。於是,依據動態規劃的方法,構造乙個換機械人的天數以及剩餘金幣的列表。然後,遍歷這個列表找到金幣最多的機器...

強化學習訓練機械人2 Unity3D環境

前言 之前在unity3d中嘗試訓練四足機械人學習奔跑前進,只是做了簡單的嘗試。在19年的寒假裡由於要寫 所以基於強化學習提出一種分層學習演算法,實現四足機械人在腿瘸後仍可以繼續向前運動。這種是一種比較簡單的,所以也就只發表在國內的核心期刊上面。這也是我第一次寫 個人感覺還是相比國內許多 來講,我的...

深度強化學習控制移動機械人

860122112 qq.com 使用深度強化學習控制移動機械人在複雜環境中避障 收集物品到指定點。所用到的演算法包括dqn deuling ddqn a3c ddpg naf。1.實驗環境 ros gazebo 2.移動機械人模型 安裝有kinect的pioneer3移動機械人 機械人從kinec...