前言 :
最近終於找到工作了(灑花
不過公司有夠遠,就算騎腳踏車(所有不才能夠使用的交通工具中最快的)也要半小時左右
.
不過工作目前還蠻輕鬆的
(應該是)不用加班
程式碼看起來也還算乾淨
可喜可賀
.
正文 :
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
.
目前只支援這兩款遊戲
看之後作者會不會新增其他遊戲吧
.
以上
.
然後之後如果有時間再翻一下程式碼好了
.





