[ML] 在 Mac 上安裝 Cannonball (Out run) 遊戲,練習強化學習
最近因為公司的 AI 比賽,開始在學習 Machine Learning (機器學習) 的東西~
一個還沒完全搞懂的東西是 Reinforcement Learning (強化學習),
剛看到這東西時,就想到可以拿德軍總部來學習,
結果上網查,已經有一堆人拿遊戲在練習了~
像是 Out Run 這個賽車遊戲,
看到畫面就覺得很久以前好像有玩過 (←老人…)
Out Run 這個遊戲本來是在大型電玩上面,
有人用可移植的 C++ 重寫一次,開源在 GitHub 上分享,
名字則叫做 Cannonball~
lopespm 大大修改了 Cannonball,以方便從遊戲裡取得必要的資訊,
並藉由這些資料,寫了個強化學習的程式,
用來控制遊戲裡的車子,感覺還蠻厲害的~
(可參考 Deep Reinforcement Learning: Playing a Racing Game)
我們這次要裝的就是 lopespm 修改過,適合用來作 Reinforcement Learning 的版本~
這一篇就先記錄一下,要怎麼在 Mac 上安裝這個 Cannonball 吧~
1. 安裝 cmake、boost 和 SDL2
先用 Homebrew 安裝 cmake、boost 和 sdl2 這幾個編譯工具與函式庫:
brew install cmake brew install boost brew install sdl2
2. 取得 Cannonball
從 Github 複製 cannonball 下來:
git clone https://github.com/lopespm/cannonball.git cd cannonball
3. 修改 cmake 設定檔
在 Mac 上要用的 cmake 設定檔是 cmake/sdl2_macosx.cmake,
將它打開編輯,主要就是將 SDK 以及相關函式庫的位置正確設定:
-set(CMAKE_CXX_FLAGS "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -mmacosx-version-min=10.7") +set(CMAKE_CXX_FLAGS "-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mmacosx-version-min=10.7") -include_directories("~/Library/Frameworks/SDL2.framework/Headers" "${lib_base}/boost/1.60.0_1/include") +include_directories("${lib_base}/sdl2/2.0.8/include/SDL2" "${lib_base}/boost/1.67.0_1/include")
4. 編譯 Cannonball
先建立 build 目錄,再在這目錄裡執行 cmake 與 make 編譯:
mkdir build cd build cmake -G "Unix Makefiles" -DTARGET:STRING=sdl2_macosx ../cmake make
成功的話,會編譯出 cannonball-exe 和 libcannonball.so~
如果失敗的話,看一下錯誤訊息,抓抓問題吧。
比較有可能出現的問題是錯誤的函式庫路徑,
可以回到上一步,先用 brew info boost、brew info sdl2 等等指令,
確定一下這些函式庫安裝的路徑,正確的寫在 cmake/sdl2_macosx.cmake 裡面後,
再重新開始編譯囉~
5. 下載遊戲 ROM 檔
上網找一下 OutRun Revision B ROM 的檔案~
原本我是從 EmuParadise 下載的,沒想到隔天站台就關了 @@…
下載之後,把 zip 檔解壓縮到 cannonball/roms 目錄下,
再到 cannonball/build 目錄,建一個符號連結指向那個 roms 目錄:
unzip ~/Downloads/outrun.zip -d ../roms/ ln -s ../roms roms
6. 執行 Cannonball 遊戲
在 build 目錄下執行 cannonball-exe,應該可以看到遊戲畫面囉:
./cannonball-exe
遊戲的操作鍵如下:
- 左右方向鍵:控制車子左右轉
- Z:加速
- X:剎車
- 空白鍵:換檔
- 5:投錢
- 1:開始遊戲
- Shift:切換攝影機視角
- F1:暫停
- F2:暫停時,往前一格 (用來查看顯示問題)
- F3:切換計時方式 (時間無限)
- F5:遊戲選單
像在遊戲一開始的畫面,可以在 Play Game 上按 Z,
接著看到 Insert coins 提示時按 5,
接著看到 Push start button 提示時按 1,就可以開始玩啦~
按 Z 加速、X 剎車、左右鍵控制方向~
預設遊戲是有時間限制的 (非常難),
可以到選單裡 Settings > Game engine > Time 那邊按 Z 切換到 Time Infinite,
就可以無限時間玩了~
如上,我們已經成功把 Cannonball 編譯並執行起來,
之後就可以用這個遊戲來練習強化學習囉~^^