[閒聊] 出手順序的計算

作者: dube116 (無悔控蘿莉)   2026-07-27 17:37:50
同射程的艦娘之間先出手的機率不相等
這件事情應該早有共識
https://reurl.cc/DYZV2O
2024的這份驗證就已經有歸納出一些情況
但沒有提出計算方式
今天按模擬器的時候又被警告說這個射程組合的傾向不明
就抓了上面那個驗證的原始資料下來分析看看
跟AI討論了一下發現結論可能意外的簡單
先說結論
田中很可能只是用了 php 內建的 quick sort
什麼是快速排序可以看下面維基百科借來的圖 反正就是一種排序的演算法
選一個基準點然後小的放前面 大的放後面 分治循環到排序完成
https://i.meee.com.tw/iI6huA0.gif
從全艦同射程的原始資料會發現
位於中間的那一個 行為跟其他幾隻特別不同(如六船編成的三號位)
先開火的機率特別低
從這點推測很可能是使用快速排序 且使用中點作為基準點
再來就是AI直接猜艦娘的後端是用php撰寫(後來也有找到其他人這樣推測)
然後從數據分布呈現二進位 推測在同射程時回傳的是公平的隨機1/2
所以復刻了php 5的內建排序 然後跟原始資料去對比
發現數據高度吻合
不過統計學的東西我根本忘得差不多了 AI自己算的
對於樣本足夠的組合 卡方值/自由度大致上都在1左右
然後推估的原始代碼八成就長這種感覺
usort($ships, function ($a, $b) {
if ($a->range != $b->range) return $b->range - $a->range;
return mt_rand(0, 1);
});
搞不好寫這段程式的人還以為這樣就是同射程誰在前面的機率都是1/2(
後來也發現有人2018年就猜到快速排序 但有些細節不對所以數字不完全能對上
https://x.com/Xe_UCH/status/1051323134106882048
https://dube116.github.io/kancolle-shelling-order/
隨便叫AI搞了一個模擬器 但我應該是不會再幫它加功能 看看就好
可以期待其他工具什麼時候把這加進去比較適合
https://i.meee.com.tw/y3RcaqE.png
比如大武最差的情況 旗艦被搶先手的機率可能高達75%
全隊至少三種射程 且3號位為唯一最短
https://i.meee.com.tw/LB9Afrt.png
最好的情況是50%
全隊至少三種射程 且3號位非全隊最短時可達成
麻煩的是這個算法很難歸納出什麼簡單易懂的規則
https://reurl.cc/rk1mgb
參考的計算結果
作者: daoyousan (導遊先生)   2026-07-27 17:44:00
欸?假設敵我全隊都一樣射程不是由我們先攻嗎?
作者: dube116 (無悔控蘿莉)   2026-07-27 17:46:00
這是在說我方同射程的先後順序像你的大和武藏誰先動
作者: yumekaze (yumekaze)   2026-07-27 17:48:00
這個 居然連算法都可以逆推出來的嗎
作者: dube116 (無悔控蘿莉)   2026-07-27 17:49:00
因為蒐集的數據量很大 而且數據夠有特色吧
作者: yumekaze (yumekaze)   2026-07-27 17:50:00
作者: yellowhow (┴─┴~\( ̄□ ̄#)\)   2026-07-27 17:50:00
好強,難怪我武藏都先動!
作者: Sousake (specialist URUZ 7)   2026-07-27 18:08:00
・ω・ 強
作者: StellaNe (凍結的大地)   2026-07-27 18:08:00
如果特定狀況高達75%的話 應該很容易驗證吧
作者: dube116 (無悔控蘿莉)   2026-07-27 18:17:00
裸數據裡AACBBB這個組合的比例確實是24%:76%
作者: StellaNe (凍結的大地)   2026-07-27 18:35:00
艦戰架算是不參加嗎?
作者: dube116 (無悔控蘿莉)   2026-07-27 18:39:00
對 不參加 看引用的那篇的結論
作者: StellaNe (凍結的大地)   2026-07-27 18:58:00
那AABB 兩個不參加 就是一號先手75%了4BB2CVL 或 2BB2CV2CVL CVL都是艦戰架的狀況
作者: dube116 (無悔控蘿莉)   2026-07-27 19:06:00
對 這樣二號會落到中間點
作者: yuricon (tpbs)   2026-07-27 19:18:00
好神喔
作者: darkray (ray)   2026-07-27 19:27:00
太神了,大武以後記得第三位不能唯一最短
作者: vvrr (vvrr)   2026-07-27 19:55:00
一直不太懂為什麼會用到排序,跑去看了連結那個2018年的文章裡面提到的其實是「洗牌」的一種方法
作者: dube116 (無悔控蘿莉)   2026-07-27 19:57:00
語意上不難理解吧 這裡決定手順的方式就是對射程做排序同射程會有這麼複雜的情況 只是這個排序造成的副作用我是不覺得這個分布是田中刻意產生的行為八成就是碼農呼叫了一個內建的排序 但沒想過會發生什麼事
作者: vvrr (vvrr)   2026-07-27 20:19:00
這裡想做的事有兩件:1.按射程出手排序 2.避免射程相同時 相對位置永遠不變. 第2點做的事是shuffle
作者: EternalK (永恆K)   2026-07-27 20:46:00
排序我可以理解,但是相同的輸入要產生不盡相同的輸出我就不理解了w
作者: vvrr (vvrr)   2026-07-27 20:46:00
就我所知,所有排序法都沒有保證第2點是否成立(排序法遇到同大小 不管誰先誰後都算成功)如果射程相同時 相對位置也固定 那全體短射程就會照順序打..達不到現在那種感覺(誰先出手不一定)
作者: dube116 (無悔控蘿莉)   2026-07-27 20:52:00
對 我剛剛也沒講清楚 我指的是這個分布應該不是預期中的行為 但不固定出手順確實是想要的效果
作者: aliensky (異色天空)   2026-07-28 11:29:00
原來不是田中手操我的武藏先手
作者: vvrr (vvrr)   2026-07-28 11:54:00
如果要同時做到上面那2件事,又要滿足"同射程的船機率相同"感覺會非常麻煩。方法一(目前方法):直接排序.利用排序比大小射程相同的時候給隨機結果.結果一:隨機是隨機了 機率不等方法二:先排序.每一組射程相同的船再隨機洗牌. 結果二: 後面隨機洗牌可以保證機會均等 但前面排序時同射程的船可能就先被弄亂而有偏差(排序演算法同大小不保證誰先誰後)突然查到了。排序演算法有分穩定和不穩定https://reurl.cc/8YWnRb 穩定=同大小不會改變相對位置這樣用方法二(先排後洗) 選擇穩定的排序 就能保證機會均等了
作者: laswish (來自坦尚尼亞)   2026-07-28 14:35:00
居然連原始代碼都反推出來了,太強

Links booklink

Contact Us: admin [ a t ] ucptt.com