iT邦幫忙

DAY 10
2

科學運算和資料處理的潛力新秀--Julia語言系列 第 10

julia (10) -- 用亂猜的玩2048能走多遠?

在前面的文章裡面,我們用julia完成了2048的基本架構。有了這個基本架構之後,就可以用它來做一些有趣的事情。

我們可以從一個簡單的問題開始:假如完全用隨機的方式選下一步(就是閉著眼睛玩的意思),大概會得到多少分呢?

首先我們可來實作一個random player的agent來取代gameloop裡的humanPlayer,這是我們在設計遊戲的主程式迴圈gameloop所預留的伏筆。

function randomAgent(board)

    legalMoves=getLegalMoves(board)

    lmIndex=rand(1:length(legalMoves))

    return legalMoves[lmIndex]
    
end

這個函式會先執行getLegalMoves(board),這個函式的功能是用來找出"合法"的下一步,也就是遊戲的所以下一步的選項。legalMoves這個陣列沒有任何元素時就表示game over。而這個getLegalMoves已經包含在2048遊戲主架構的code裡面,就不再多做介紹。

我的方法是跑這個遊戲至少1000次,然後把結果圖的分布畫出來。

julia的資料視覺化有兩種方法。第一種是透過python使用matplotlib,另一種方法是根植於繪圖套件Gadfly。Gadfly的官網就開宗明義的說這個套件是參照ggplot2設計的,對於常使用這個套件的R使用者應該會覺得很熟悉。套件的安裝非常簡單,只要在julia的指令列打入Pkg.add("Gadfly")就可以了。以下是我的實作:

using julia2048
using Gadfly

# 跑10000次模擬
numberOfTrials=10000
scores=zeros(numberOfTrials)
for i=1:length(scores)
    scores[i]=julia2048.gameLoop(julia2048.randomAgent)
end

#畫圖
p=plot(x=scores,Geom.histogram,Guide.xlabel("score"),Guide.ylabel("occurences"))
draw(PNG("myplot.png", 12cm, 6cm), p)

以下就是我跑了10000次遊戲的結果。從這張可以很清楚的看到,隨便亂玩所得到的分數大概就在幾百分左右,運氣好一點的話可以拉到1000,要突破2000的話,玩個10000次大概有一次可以達成。

今天就先到這邊,我們之後會來介紹一些不同的AI策略。


上一篇
julia (9) -- julia版2048完成(歡迎下載測試:p)
下一篇
julia (11) -- 隨機的結果不好,那麼greedy呢?
系列文
科學運算和資料處理的潛力新秀--Julia語言30

尚未有邦友留言

立即登入留言