調控系統設計文件:老虎機動態參數調整引擎

從 Spin 請求到結果回傳,完整解析調控管線的兩階段控制架構

調控系統是老虎機遊戲的核心引擎。本文以流程圖呈現完整的 Spin 處理管線,詳解兩階段控制架構:RTP 表選擇(動態水池、新手扶持)與權重結果選取(SD 壓縮、最大賠率上限),以及 RTP 插值與優雅降級的設計原則。

調控系統概述

老虎機的調控系統是在自然機率模型之上的動態控制層, 用於在保持遊戲數學正確性的前提下,實現靈活的 RTP 管理與玩家體驗優化。 調控系統不會篡改遊戲的核心機率模型,而是透過合規的機制來調整結果的選取策略。

這裡的區別非常關鍵。所謂調控,並不是在玩家按下 Spin 之後去「修改」已經算出來的結果, 而是在抽樣之前,決定要從哪一個已經過完整數學驗證的分佈中抽樣。 每一組候選分佈的 RTP、波動率、Hit Rate 都是事先算好並封存的; 調控層做的事情只是在這些分佈之間做加權選擇。 這個設計界線一旦守住,整套系統的數學性質就永遠是可推導、可稽核的。

會需要這樣一層控制,源於一個現實的落差:數學模型保證的是長期收斂, 但玩家體驗發生在短期樣本。一台理論 RTP 96% 的高波動機台, 在數百局的尺度上實際回報可能落在極寬的區間內。 調控層的目的,是在不動搖長期期望值的前提下,讓短期分佈更可預測、更貼近設計意圖。

Spin 請求主流程

每一次 Spin 請求從進入到回應,會經過以下完整的處理管線:

整條管線的設計原則是把不確定性集中在單一環節。 參數解析、模式判定、盤面查詢、結果縮放這些步驟都是確定性的純函式, 唯一引入隨機性的地方就是調控階段。 這讓整個流程非常容易測試:只要把隨機來源替換成固定序列, 同一組輸入就必然產生同一組輸出,回歸測試因此可以逐局比對而不需要容忍誤差。

調控核心:兩階段控制管線

調控的核心分為兩個階段依序執行:

為什麼要拆成兩階段?

兩階段的切分對應兩個性質完全不同的問題:

如果把兩者混在一起處理,會出現一個很難維護的狀況: 任何體感上的調整都可能意外改動期望值,而任何數值上的調整又都會影響手感, 兩種需求互相牽制,最後誰也調不動。 拆開之後,第一階段只負責期望值、第二階段承諾不改變期望值只改變分佈形狀, 責任邊界清楚,各自的驗證方式也完全不同: 前者驗收斂、後者驗變異數與尾端特性。

第一階段:RTP 表選擇

系統預先設定多組不同 RTP 的機率表(如 LOW / MIDDLE / HIGH), 第一階段的任務是根據既定策略,決定本次 Spin 使用哪一組表。 選擇邏輯依調控模式(每組配置獨立設定)分為三種:

RTP 插值機制

當目標 RTP 落在兩個機率表之間時,透過線性插值進行機率性選擇:

P(選擇 LowRTP 表) = (HighRTP - targetRTP) / (HighRTP - LowRTP)

長期統計下,實際 RTP 會精確收斂到目標值。 插值精度通常放大到萬分位(×10000)進行整數化計算,避免浮點誤差。

插值的正確性可以直接由期望值的線性性質證明: 若以機率 p 選用 RTP 為 R₁ 的表、以機率 1−p 選用 RTP 為 R₂ 的表, 則整體期望回報為 p·R₁ + (1−p)·R₂。把 p 依上式代入,結果恰為目標 RTP。 這說明插值不是近似手法,而是嚴格成立的等式。 只要每一張表自身的 RTP 是準確的,插值出來的目標值就沒有系統性偏差。

需要留意的是,插值只保證期望值,不保證變異數。 混合兩個分佈之後,整體變異數會比兩者變異數的加權平均更大, 多出來的部分正比於兩表 RTP 差距的平方。 這代表相鄰檔位不宜拉得太開:檔位間距越大,插值中段的波動就越明顯偏離設計值。 實務上會以「插值後的變異數增幅不超過可接受比例」來反推檔位該切多密。

改用整數化計算則是為了另一個層面的可靠性。 浮點數在不同硬體與編譯選項下可能出現末位差異, 一旦調控結果依賴這種差異,確定性重播就無法成立。 把所有機率放大到萬分位以整數處理,同一組輸入在任何環境下都會走到同一條分支。

動態水位模式

依整體統計水位狀態動態調整 RTP:

這個機制的本質是一個負回饋控制器: 當實際統計 RTP 高於理論值時,代表近期樣本偏向玩家一側,系統略微下調目標; 低於理論值時則略微上調。長期而言,實際 RTP 會被拉回理論值附近震盪, 而不是像純自然機率那樣以 1/√N 的速度緩慢收斂。

控制器的設計難點在於反應速度。反應太慢就失去意義; 反應太快則會讓玩家在短時間內感受到明顯的節奏變化,反而破壞體驗。 常見做法是為調整幅度設定上下限,並讓調整量與偏離程度成比例而非階梯跳變, 使 RTP 的變化平滑到單一玩家難以察覺的程度。

新手扶持模式

為新玩家提供體驗期的 RTP 提升:

這裡的核心設計是週期內期望值守恆:體驗期高出的部分, 必須由回收期低出的部分在同一個週期內補回,使整個週期的加權平均 RTP 等於基礎值。 換言之,扶持模式改變的是回報在時間軸上的分佈順序,而不是總量。

之所以要有個人校正,是因為週期制只保證平均值,不保證每個玩家的實際軌跡。 若某位玩家在體驗期內恰好抽中高倍結果,其累計 RTP 可能已遠高於目標, 此時仍套用固定的回收幅度就會過度補償。 以個人累計統計做即時校正,可以讓收斂發生在個人尺度而非僅在整體尺度上。

第二階段:權重結果選取

確定使用哪組 RTP 表後,第二階段從該表的賠率-權重分佈中, 透過加權隨機選取具體的遊戲結果。選取策略由權重模式決定:

標準差壓縮(SD 控制)

SD1 / SD2 / SD3 模式的核心邏輯:

  1. 將下注金額換算為統一基準的等值單位
  2. 若下注超過門檻,設定最大賠率上限(如 50 倍),將超額賠率的 RTP 重新分配至中段區間
  3. 計算當前權重分佈的變異數(Variance)
  4. 若變異數超過 maxSD²,從高倍數尾端開始削減,將 RTP 重新分配至 [平均賠率, 上限] 區間
  5. 最終進行加權隨機抽取

這個流程要達成的是一個帶約束的最佳化: 在期望值必須維持不變的硬約束下,把分佈的標準差壓到目標值以內。 由於期望值是機率與賠率的內積,從尾端削掉的那部分 RTP 必須原封不動地加回其他區間, 否則整體期望值就會偏移。這是實作上最容易出錯、也最必須有自動驗證守住的一步。

為什麼要「從高倍數尾端開始」削減?因為變異數的計算中賠率是平方項, 高倍數結果對變異數的貢獻遠大於它對期望值的貢獻。 以極端例子說明:一個機率萬分之一、賠率 1000 倍的結果,對 RTP 只貢獻 0.1, 對變異數卻貢獻約 100。這意味著削減尾端可以用極小的期望值挪移, 換來變異數的大幅下降,是效率最高的壓縮方向。

補回的位置則刻意選在「平均賠率到上限」這一段中段區間。 若把 RTP 全數補到最低賠率,會讓結果過度集中在幾乎沒有感覺的小額回報上, 玩家會覺得「一直在中、但什麼都沒中到」; 補在中段則能維持一定的獎勵層次感,是數學正確性與體感之間的折衷。

最大賠率上限的必要性

設定上限並非只為了控制變異數,還牽涉幾個實際考量。

上限與下注額掛鉤,則是為了讓壓縮效果在不同下注級距上保持一致。 由於標準差是以倍數為單位計算的,同一個倍數上限在不同下注額下代表的絕對波動並不相同, 因此門檻與上限通常會依下注區間分段設定,而非取單一固定值。

最終結果抽取流程

兩層加權抽取的設計,讓「賠率層級」與「具體表現」得以解耦。 上層決定這一局賠多少,是數值問題;下層決定用哪個盤面呈現這個賠付,是表現問題。 同一個賠率層級底下往往有數十種不同的盤面組合: 可能是連線、可能來自免費遊戲、也可能是特殊功能的結果, 它們數值等價但畫面截然不同。這一層的權重因此可以純粹依表現節奏來配置, 完全不必擔心影響 RTP。

結果對應與縮放

權重選取產生表現索引後:

  1. 預計算的模板資料庫查詢對應的完整盤面結果(Board Result)
  2. 將模板中的金額按 實際下注 / 模板下注 比例等比縮放
  3. 生成最終回傳給客端的遊戲結果

等比縮放成立的前提,是老虎機的賠付本質上是下注額的線性函數: 盤面決定的是倍數,下注額只是乘數。這讓同一份模板可以服務所有下注級距, 模板庫的體積因此與下注選項數量無關。

實作上唯一需要小心的是捨入誤差。 當一個盤面包含多筆賠付、各自縮放後再加總時,逐筆四捨五入的結果 可能與總額縮放後的結果差上最小單位。 正確做法是以總額為準進行縮放,再把差額依既定規則分配回各筆明細, 確保「明細加總等於總額」這個不變條件永遠成立。

優雅降級設計

調控系統的核心設計原則是優雅降級: 任何配置缺失、參數異常或外部依賴不可用的情況,系統都會靜默回退到自然機率模式。

這個原則背後的判斷是:自然機率永遠是一個安全的答案。 它經過完整的數學驗證、不依賴任何外部狀態、也不需要任何配置。 因此當調控層無法正常運作時,最好的處理不是中止流程,而是退回到這個已知正確的基準。 相較之下,若選擇讓請求失敗,遊戲會直接無法進行; 若選擇沿用上一次的計算結果,則會引入不可預期的統計偏差。兩者都比降級更糟。

降級的觸發情境大致可分為三類:

最後一點也是最容易被忽略的:降級必須是可觀測的。 靜默回退對玩家而言是無感的,這正是設計目的; 但對開發團隊而言,如果無法區分「調控正常運作」與「一直在降級」, 系統就會在無人察覺的情況下長期偏離設計意圖。 因此每一次降級都應記錄成因與情境,並以統計方式追蹤降級比例, 讓這道安全網本身也處於被檢視的狀態。