預測玩家行為動態調整關卡難度——最小二乘問題求解

遊資網發表於2019-09-27
預測玩家行為動態調整關卡難度——最小二乘問題求解


簡介

在遊戲開發中,遊戲的關卡難度一直是個重要的問題。如果某個關卡難度固定,那麼對於新手來說會有些困難,對於熟練的玩家來說又過於簡單。但我們如果把它看成最小二乘問題,根據玩家在之前關卡中的表現,預測玩家在之後一關中的表現,就能把此關卡調整到合適的難度。

資料和問題分析

假如在一個冒險遊戲中,玩家有一種屬性:戰鬥力。而不同關卡所有敵人都是相同的,只是數量不同。根據前四關玩家的表現:

  • 第一關,玩家戰鬥力為2,幹掉的敵人數目為1
  • 第二關,玩家戰鬥力為5,幹掉的敵人數目為2
  • 第三關,玩家戰鬥力為7,幹掉的敵人數目為3
  • 第四關,玩家戰鬥力為8,幹掉的敵人數目為3


於是繪製得到如下的圖:

預測玩家行為動態調整關卡難度——最小二乘問題求解

我們想知道,在第五關時,假設玩家的戰鬥力為x,那麼玩家能夠幹掉敵人的數目y是多少。我們想要找出一條近似公式。

根據圖中的資料來看,發現它的變化趨勢趨近一條直線,因此我們想到選取x的一次表示式ax + b = y來表達。也就是說,我們想要找到適當的a,b使下面的等式都成立。

2a + b - 1 = 0

5a + b - 2 = 0

7a + b - 3 = 0

8a + b - 3 = 0

但找到這樣的a,b實際上是不可能的。於是我們想要找到的a,b變為了使上面各式的誤差的平方和最小,即找到a,b使

預測玩家行為動態調整關卡難度——最小二乘問題求解

最小。這兒的誤差的平方就是二乘方,所以我們尋找的這條直線ax + b = y為最小二乘直線。,而解就是最小二乘解。

最小二乘直線求解

閱讀以下內容需要矩陣乘法,轉置矩陣以及逆矩陣的知識,這些知識可在任何一本有關線性代數的書上找到。

首先根據b + ax = y來構造矩陣。我們需要求解的方程組為

b + ax1  = y1

b + ax2  = y2

...

b + axn  = yn

我們把這個方程組寫為

預測玩家行為動態調整關卡難度——最小二乘問題求解

我們需要求的就是β。對於本文開頭提到的冒險遊戲例子,就是

預測玩家行為動態調整關卡難度——最小二乘問題求解

對於Xβ = y的最小二乘解,我們可以根據公式

預測玩家行為動態調整關卡難度——最小二乘問題求解

來計算。

預測玩家行為動態調整關卡難度——最小二乘問題求解

方程在座標軸上影象為:

預測玩家行為動態調整關卡難度——最小二乘問題求解

我們可以證明,這樣找到的最小二乘直線,其誤差是最小的。當然最小二乘解不只這一種解法。

結語

於是,我們根據第五關玩家獲得的戰鬥力,就粗略計算出玩家根據自己的水平能幹掉的敵人,並讓系統生成相應數量的敵人。於是,不同水平的玩家就都可以在遊戲中自得其樂了。

由於上面的例子中,玩家屬性只有一個值,所以求最小二乘解比起其它方法可能稍顯麻煩。但當玩家的屬性逐漸變多,即未知量不止一個時,例如,玩家戰鬥力為x,生命值為y,幹掉的敵人數為z,那麼我們要求解的方程組就變為了

ax1  + by1   + c = z1

ax2  + by2   + c = z2

...

axn  + byn   + c = zn

此時,其它方法就不一定奏效了,而最小二乘解卻依然能夠快速求出。

作者:clatterrr
來源:露出你的犬牙
原地址:https://clatterrr.com/archives/1729

相關文章