預測玩家行為動態調整關卡難度——最小二乘問題求解
簡介
在遊戲開發中,遊戲的關卡難度一直是個重要的問題。如果某個關卡難度固定,那麼對於新手來說會有些困難,對於熟練的玩家來說又過於簡單。但我們如果把它看成最小二乘問題,根據玩家在之前關卡中的表現,預測玩家在之後一關中的表現,就能把此關卡調整到合適的難度。
資料和問題分析
假如在一個冒險遊戲中,玩家有一種屬性:戰鬥力。而不同關卡所有敵人都是相同的,只是數量不同。根據前四關玩家的表現:
- 第一關,玩家戰鬥力為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
相關文章
- 梯度下降求解最小二乘梯度
- 03 迴歸演算法 - 線性迴歸求解 θ(最小二乘求解)演算法
- 場景分析:遊戲關卡難度對玩家流失的影響遊戲
- 談談三消遊戲關卡的難度控制問題:元素難度評分機制遊戲
- (動態規劃)最小分糖果問題動態規劃
- 最小二乘(LS)與總體最小二乘(TLS)總結一TLS
- 理解最小二乘解
- 柴阿峰:回答“測試行業最新動態”的相關問題行業
- 動態規劃求解最長上升子序列問題動態規劃
- 最小二乘與梯度下降梯度
- js拖動調整元素寬度JS
- 【轉】jfs和jfs2動態調整檔案系統大小問題
- 矩陣連乘問題 Python 動態規劃矩陣Python動態規劃
- 整數劃分問題(動態規劃)動態規劃
- opencv讀取影片採集卡幀-調整解析度OpenCV
- 網路拓撲調整和PIX相關問題
- 最小總和問題(動態規劃演算法)動態規劃演算法
- aix6 AIO 動態調整AI
- 關於學習心態的調整
- 動態規劃6:臺階問題和矩陣最小路徑問題動態規劃矩陣
- 遊戲機制設計:動態難度平衡、心流體驗與相關設計中的問題遊戲
- 遊戲平衡機制探究:動態難度調節的4條祕訣遊戲
- 使用合適的維度拆分來求解問題
- 為什麼資料庫調整大小如此困難?資料庫
- jQuery拖動調整左右兩列寬度jQuery
- 動態規劃_備忘錄法_矩陣鏈乘問題動態規劃矩陣
- 動態執行緒池(DynamicTp)之動態調整Tomcat、Jetty、Undertow執行緒池引數篇執行緒TomcatJetty
- LSGAN:最小二乘生成對抗網路
- 遊戲到底難不難,是誰說了算? 關於遊戲難度與玩家技巧的那些事遊戲
- 分散式 | 動態調整 DBLE 內執行緒池的數目分散式執行緒
- 【面試】基於二叉樹層次遍歷相關問題的求解面試二叉樹
- oculus rift怎麼調整解析度 oculus rift解析度調整教程
- 填個坑!再談執行緒池動態調整那點事。執行緒
- 偏最小二乘(pls)迴歸分析 matlabMatlab
- js 線性最小二乘迴歸線方程JS
- JAVA重難點問題剖析(二)Java
- 行業動態 | DataStax 2021年新年預測行業AST
- 二叉樹的最小深度問題二叉樹