符號a為 ai agent。
符號@為金幣,ai agent需要盡可能的接取。
符號* 為炸彈,ai agent需要盡可能的躲避。
遊戲下方一組數字含義如下:
bomb hit: 代表目前ai agent所接取的炸彈數。
coin hit: 代表目前ai agent所接取的金幣數。
game play:每幀會隨機產生乙個炸彈和乙個金幣,或者只產生乙個炸彈或金幣。每幀ai agent可以行動一次, 以及所有的炸彈和金幣下降一格。
當金幣和炸彈到最後一格時會自動消失,此時不在參與ai agent碰撞。
學習種類: 增強學習又稱強化學習
學習細節:q演算法 + 值函式線性(引數)逼近,如果您還不知啥麼是q演算法,啥麼是值函式,啥麼又是線性引數逼近。那麼我推薦您先看看一下資源。
a painless q-learning tutorial (乙個 q-learning 演算法的簡明教程)
q-learning toturial
然後,我來給你講講什麼是線性引數逼近。我們由淺入深,先**一下向量。在2維空間中,我們可以用兩個正交的二維基向量i,j來任意二維向量v。寫作v= x*i+y*j; 我們只需調整x,y,也就是調整基向量的權重引數,就可以表示不同的向量。同理,n維空間,我們也可以用n個正交的n維基向量表示任意n維向量。那麼需要調整的權重也會相應的增加到n個。 回到函式的問題,我們是否可以用類似的方式,用n個基函式的和來表示乙個復合函式,並且通過修改每個函式的權重引數來表示不同的復合函式。很明顯,答案是可以的。那麼現在的問題是如何調整這些權重,使它表達的復合函式更接近我的目標函式?
進一步對於強化學習來說,我們不知道目標函式的具體樣子。我們通過不斷的實驗得知函式的輸入輸出模式為 in:a0 out:b0; in:a1 out:b1.......
所以我們要建立乙個函式f,使其的輸入輸出與我們的目標函式的輸入輸出匹配即可。完美的匹配所有輸入輸出怕是找不到,退而求其次,我們去尋找平均情況下最好的匹配,即允許建構函式f與目標函式t某些輸入與輸出存在差異,但總體上差距最小。在這裡我們使用隨機梯度下降。
q(s, a)
= φ(s, a)t
θ (θ
是有多個權重構成的向量,我們要不斷調整θ, φ(s, a)t
則為基函式,返回值為向量
)c =1/2(q+(s, a) - q(s, a))2
=1/2 (q+(s, a) - φ(s, a)t
θ)2∂c/∂θ = -φ(s, a)(q+(s, a) - φ(s, a)t
θ).
θ ← θ + β φ(s, a)(q+(s, a) - q(s, a)) β
為調整步長。
game state:
本文 ai agent 採取對其上方4*3區域進行二進位制編碼。0代表空位置,1代表空間被bomb或coin佔據。那麼4*3區域需要24bit的資料來表示coin 和 bomb,以本文為例,前12位代表bomb後12位**coin。相同位置的bomb和coin可以同時為0,代表既沒有bomb也麼有coin,但不能同時為1,即二者不可重疊。
對其進行二進位制編碼的好處為可以把state抽象成為乙個int數值,大大了減少了描述state所需的空間。當然監測區域越大狀態空間就越大,那麼agent就越智慧型。
game action:
左移,右移,不動。
feature base φ(s, a
):用於描述當前狀態特徵的基函式,在程式中它不返回乙個12維向量,而是增加引數i,代表獲取第幾個特徵,函式輸入為狀態s和指令a,特徵函式φ(s, a,i)
的返回值取值範圍為 -1,0,1。
φ(s, a)的計算需要使用當前的狀態s 和 當下要執行的action。
feature base weight θ
:θ也是12維向量,用以表示feature base中不同元素的權重。
q value:
q(s, a) = φ(s, a)t
θ, 這裡是向量的點積,乘積的和。
本遊戲採用值函式線性引數化逼近,對動作狀態值函式q(s, a)進行
線性引數話逼近。值函式近似多用於求解連續狀態集或大規模狀態集。因為state或action太多無法全部儲存,所以需要抽象出乙個函式,函式的引數為state和 action ,返回值為其分數。
最後我們的q值函式可表示為:
q(s, a) = φ(s, a)t
θ,更新權重法則為:θ ← θ + β φ(s, a)(q+(s, a) - q(s, a)),
對於本文給出的小遊戲,簡單的使用隨機梯度下降法可以對動作狀態值函式進行線性近似。並可以取得較好的效果。
相關**,已上傳
需要的同學請自行獲取。
研究機器學習只是筆者的業餘愛好,故本文使用的最基本的強化學習演算法,如有錯誤請耐心指正。如果讀者想要進一步深入學習,不妨了解一下google deepmind的各種dqn,openal剛剛出新的強化學習演算法ppo。這些新的強化學習演算法從效率和效果都有很大提高。當然,具體研究起來肯定是很複雜的,有興趣的讀者自己去研究吧。
作為乙個遊戲開發者,在適當的地方使用機器學習是很好的選擇。謹記,我們做遊戲是為了讓玩家開心,不是為了讓ai吊打玩家。至於人工智慧學者總愛拿遊戲做例子,一是為了方便向民間傳播研究進度,刷存在感,拉投資。二是某些遊戲的狀態空間確實比較複雜。比如搞搞圍棋,搞搞dota2,搞搞星際2。
如何玩遊戲
1 註冊 略2 建立虛擬雲伺服器 跳轉到支付頁面。然後再執行一遍deploy上述配置。重置例項 完成例項 注意 1 不要同時幾個人使用同乙個ip。2 centos7 3 xshell連線ip 網路不好,多試幾次。4 使用python部署 5 安裝公升級pip pip install upgrade ...
她玩遊戲好都不准我玩遊戲了 我們可以玩遊戲嗎?
她玩遊戲好都不准我玩遊戲了 boy was i wrong.男孩,我錯了。開發人員和使用者這兩個相互交織的核心群體的心智之戰仍然是一場更大得多的戰爭。蘋果的整個業務都建立在這兩個基礎上。似乎每隔一周,由於這種舉動,蘋果正在侵蝕與開發人員的關係。如果這種情況持續下去,在某個時候,它也必須改變方程式的另...
英語單詞玩遊戲
甲乙兩個人用乙個英語單詞玩遊戲。兩個人輪流進行,每個人每次從中刪掉任意乙個字母,如果剩餘的字母序列是嚴格單調遞增的 按字典序a b c z 則這個人勝利。兩個人都足夠聰明,甲先開始,問他能贏麼?public static void main string args else str arr new ...