字體:小 中 大 | |
|
|
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 ) |