網路城邦
上一篇 回創作列表 下一篇   字體:
[機器學習][教學] 如何建置MarI/O,透過機器學習玩模擬器內的遊戲
2017/07/16 19:01:54瀏覽2664|回應0|推薦0

前言 : 

最近終於找到工作了(灑花

不過公司有夠遠,就算騎腳踏車(所有不才能夠使用的交通工具中最快的)也要半小時左右

.

不過工作目前還蠻輕鬆的

(應該是)不用加班

程式碼看起來也還算乾淨

可喜可賀

.


正文 : 

https://www.youtube.com/watch?v=qv6UVOQ0F44

話說最近看到這個影片

(如果會過來這邊的估計都有看過這影片吧

.

簡單來說,就是透過機器學習的方式

讓電腦自動玩模擬器內的遊戲

.

遊戲畫面內左上角的圖是電腦實際看到的東西

後來翻了下程式碼是透過記憶體位址去抓的樣子,不是用截圖看顏色的方式

白色是障礙物

黑色是敵人,或是道具

.

右邊是可以按的按鈕

.

然後中間各種顏色的線

看起來像機器學習出來的線(不才不太確定)

只要在線上面有物件

就會觸發按鈕

.

例如說如果螢幕上從左邊數來第三格

由上往下數第五個有東西

就觸發按鈕A...的樣子

.

如果不才是透過牆壁上或是桌子上有東西

才會連想到該撿起地板上的東西

估計會被打死吧wwwww

.

雖然這也算是機器學習的一種就是了

如果以不能把遊戲規則(包含這是橫向卷軸遊戲這件事)寫在程式碼內的話

目前也沒想出有啥比較好的方式

.

簡單來說設定Fitness數字越高(表示人物走到越右邊,也就越接近終點)

就代表越結果越成功

然後失敗條件就是死掉或是待在同個地方太久

.

在每次失敗後都會修正參數

例如修正觸發按鈕的位置等等

.

技術部分說完了

接下來來說一下該怎麼建置環境

.

因為建置環境有點麻煩

所以不才全部包成一份直接給大家使用

.

https://drive.google.com/open?id=0B3hpPe6AAVmzR0RaLVh0Y3l2akE

傳送門

.

首先先打開程式(EmuHawk.exe)

.

然後把NES_ROM 資料夾裡面的遊戲

Super Mario Bros..nes

或是 Super Mario World (USA).smc

其中一個拖移到視窗中

就會在

.

然後點開模擬器中的Tool >> Lua

.

就會出現視窗

簡單來說這個視窗是跑腳本用的

然後把Lua_MachineLearngin >> neatevolve.lua 拖曳進去

.

如果沒問題的話就會開始跑了

然後會多出一個視窗

.

這個是控制台的部分

點開"show Map " 可以看到機器人看到的地圖(左邊有黑白格子的那個)

點開"Show M-Rates" 可以看到下面的參數

.

然後就開始給他跑吧

電腦一開始很笨,連要按按鈕都不知道

不過之後會開始學習

跑個幾百次後就會開始知道要往右邊移動

.

不過不知道為啥就算有存檔

下一次打開腳本時還是會重新學習

.

然後如果覺得跑得有夠慢,可以打開模擬器的View>> speed

我是直接調成400%,不然會跑到天荒地老

快轉對學習結果不會有影響

.

以上

.

然後如果希望機器學習玩其他關卡

要自己玩到那一關後

選擇File >> SaveState

.

遊戲存檔應該是放在NES 或是 SNES 的State 資料夾內

然後改存檔名稱和副檔名

附檔名要記得改,原本的State是大寫,要改成小寫

.

如果是Super Mario Bros..nes就改 SMB1-1.state 

如果是 Super Mario World (USA).smc 就改 DP1.state

.

目前只支援這兩款遊戲

看之後作者會不會新增其他遊戲吧

.

以上

.

然後之後如果有時間再翻一下程式碼好了

.

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=andy840119&aid=106546228