看板 KanColle 關於我們 聯絡資訊
同射程的艦娘之間先出手的機率不相等 這件事情應該早有共識 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 參考的計算結果 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.8.139 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/KanColle/M.1785145075.A.999.html
daoyousan: 欸?假設敵我全隊都一樣射程07/27 17:44
daoyousan: 不是由我們先攻嗎?07/27 17:44
dube116: 這是在說我方同射程的先後順序07/27 17:46
dube116: 像你的大和武藏誰先動07/27 17:46
yumekaze: 這個 居然連算法都可以逆推出來的嗎07/27 17:48
dube116: 因為蒐集的數據量很大 而且數據夠有特色吧07/27 17:49
yumekaze: 強07/27 17:50
yellowhow: 好強,難怪我武藏都先動!07/27 17:50
Sousake: ・ω・ 強07/27 18:08
StellaNe: 如果特定狀況高達75%的話 應該很容易驗證吧07/27 18:08
※ 編輯: dube116 (39.12.216.185 臺灣), 07/27/2026 18:17:34
dube116: 裸數據裡AACBBB這個組合的比例確實是24%:76% 07/27 18:17
StellaNe: 艦戰架算是不參加嗎? 07/27 18:35
dube116: 對 不參加 看引用的那篇的結論 07/27 18:39
StellaNe: 那AABB 兩個不參加 就是一號先手75%了 07/27 18:58
StellaNe: 4BB2CVL 或 2BB2CV2CVL CVL都是艦戰架的狀況 07/27 18:58
dube116: 對 這樣二號會落到中間點 07/27 19:06
yuricon: 好神喔 07/27 19:18
darkray: 太神了,大武以後記得第三位不能唯一最短 07/27 19:27
vvrr: 一直不太懂為什麼會用到排序,跑去看了連結那個2018年的文章 07/27 19:55
vvrr: 裡面提到的其實是「洗牌」的一種方法 07/27 19:56
dube116: 語意上不難理解吧 這裡決定手順的方式就是對射程做排序 07/27 19:57
※ 編輯: dube116 (220.133.8.139 臺灣), 07/27/2026 19:58:41
dube116: 同射程會有這麼複雜的情況 只是這個排序造成的副作用 07/27 19:59
dube116: 我是不覺得這個分布是田中刻意產生的行為 07/27 19:59
dube116: 八成就是碼農呼叫了一個內建的排序 但沒想過會發生什麼事 07/27 20:01
vvrr: 這裡想做的事有兩件:1.按射程出手排序 2.避免射程相同時 相 07/27 20:19
vvrr: 對位置永遠不變. 第2點做的事是shuffle 07/27 20:28
EternalK: 排序我可以理解,但是相同的輸入要產生不盡相同的輸出 07/27 20:46
EternalK: 我就不理解了w 07/27 20:46
vvrr: 就我所知,所有排序法都沒有保證第2點是否成立(排序法遇到同 07/27 20:46
vvrr: 大小 不管誰先誰後都算成功) 07/27 20:47
vvrr: 如果射程相同時 相對位置也固定 那全體短射程就會照順序打.. 07/27 20:48
vvrr: 達不到現在那種感覺(誰先出手不一定) 07/27 20:48
dube116: 對 我剛剛也沒講清楚 我指的是這個分布應該不是預期中的 07/27 20:52
dube116: 行為 但不固定出手順確實是想要的效果 07/27 20:53
aliensky: 原來不是田中手操我的武藏先手 07/28 11:29
vvrr: 如果要同時做到上面那2件事,又要滿足"同射程的船機率相同" 07/28 11:54
vvrr: 感覺會非常麻煩。方法一(目前方法):直接排序.利用排序比大小 07/28 11:55
vvrr: 射程相同的時候給隨機結果.結果一:隨機是隨機了 機率不等 07/28 11:56
vvrr: 方法二:先排序.每一組射程相同的船再隨機洗牌. 結果二: 後面 07/28 11:57
vvrr: 隨機洗牌可以保證機會均等 但前面排序時同射程的船可能就先 07/28 11:58
vvrr: 被弄亂而有偏差(排序演算法同大小不保證誰先誰後) 07/28 11:59
vvrr: 突然查到了。排序演算法有分穩定和不穩定 07/28 12:02
vvrr: https://reurl.cc/8YWnRb 穩定=同大小不會改變相對位置 07/28 12:02
vvrr: 這樣用方法二(先排後洗) 選擇穩定的排序 就能保證機會均等了 07/28 12:04
vvrr: 更快一點的方法是先隨機洗牌 再用穩定排序 07/28 12:29
vvrr: https://reurl.cc/DYdvnR 實驗程式(可以線上跑) 07/28 12:32
vvrr: https://i.meee.com.tw/E7STuPm.png 兩個方法的結果 07/28 12:32
laswish: 居然連原始代碼都反推出來了,太強 07/28 14:35