[閒聊] 出手順序的計算

看板KanColle (艦隊Collection)作者 (ろあちゃん的ATM)時間3周前 (2026/07/27 17:37), 3周前編輯推噓19(19029)
留言48則, 12人參與, 3周前最新討論串1/1
同射程的艦娘之間先出手的機率不相等 這件事情應該早有共識 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

07/27 17:44, 3周前 , 1F
欸?假設敵我全隊都一樣射程
07/27 17:44, 1F

07/27 17:44, 3周前 , 2F
不是由我們先攻嗎?
07/27 17:44, 2F

07/27 17:46, 3周前 , 3F
這是在說我方同射程的先後順序
07/27 17:46, 3F

07/27 17:46, 3周前 , 4F
像你的大和武藏誰先動
07/27 17:46, 4F

07/27 17:48, 3周前 , 5F
這個 居然連算法都可以逆推出來的嗎
07/27 17:48, 5F

07/27 17:49, 3周前 , 6F
因為蒐集的數據量很大 而且數據夠有特色吧
07/27 17:49, 6F

07/27 17:50, 3周前 , 7F
07/27 17:50, 7F

07/27 17:50, 3周前 , 8F
好強,難怪我武藏都先動!
07/27 17:50, 8F

07/27 18:08, 3周前 , 9F
・ω・ 強
07/27 18:08, 9F

07/27 18:08, 3周前 , 10F
如果特定狀況高達75%的話 應該很容易驗證吧
07/27 18:08, 10F
※ 編輯: dube116 (39.12.216.185 臺灣), 07/27/2026 18:17:34

07/27 18:17, 3周前 , 11F
裸數據裡AACBBB這個組合的比例確實是24%:76%
07/27 18:17, 11F

07/27 18:35, 3周前 , 12F
艦戰架算是不參加嗎?
07/27 18:35, 12F

07/27 18:39, 3周前 , 13F
對 不參加 看引用的那篇的結論
07/27 18:39, 13F

07/27 18:58, 3周前 , 14F
那AABB 兩個不參加 就是一號先手75%了
07/27 18:58, 14F

07/27 18:58, 3周前 , 15F
4BB2CVL 或 2BB2CV2CVL CVL都是艦戰架的狀況
07/27 18:58, 15F

07/27 19:06, 3周前 , 16F
對 這樣二號會落到中間點
07/27 19:06, 16F

07/27 19:18, 3周前 , 17F
好神喔
07/27 19:18, 17F

07/27 19:27, 3周前 , 18F
太神了,大武以後記得第三位不能唯一最短
07/27 19:27, 18F

07/27 19:55, 3周前 , 19F
一直不太懂為什麼會用到排序,跑去看了連結那個2018年的文章
07/27 19:55, 19F

07/27 19:56, 3周前 , 20F
裡面提到的其實是「洗牌」的一種方法
07/27 19:56, 20F

07/27 19:57, 3周前 , 21F
語意上不難理解吧 這裡決定手順的方式就是對射程做排序
07/27 19:57, 21F
※ 編輯: dube116 (220.133.8.139 臺灣), 07/27/2026 19:58:41

07/27 19:59, 3周前 , 22F
同射程會有這麼複雜的情況 只是這個排序造成的副作用
07/27 19:59, 22F

07/27 19:59, 3周前 , 23F
我是不覺得這個分布是田中刻意產生的行為
07/27 19:59, 23F

07/27 20:01, 3周前 , 24F
八成就是碼農呼叫了一個內建的排序 但沒想過會發生什麼事
07/27 20:01, 24F

07/27 20:19, 3周前 , 25F
這裡想做的事有兩件:1.按射程出手排序 2.避免射程相同時 相
07/27 20:19, 25F

07/27 20:28, 3周前 , 26F
對位置永遠不變. 第2點做的事是shuffle
07/27 20:28, 26F

07/27 20:46, 3周前 , 27F
排序我可以理解,但是相同的輸入要產生不盡相同的輸出
07/27 20:46, 27F

07/27 20:46, 3周前 , 28F
我就不理解了w
07/27 20:46, 28F

07/27 20:46, 3周前 , 29F
就我所知,所有排序法都沒有保證第2點是否成立(排序法遇到同
07/27 20:46, 29F

07/27 20:47, 3周前 , 30F
大小 不管誰先誰後都算成功)
07/27 20:47, 30F

07/27 20:48, 3周前 , 31F
如果射程相同時 相對位置也固定 那全體短射程就會照順序打..
07/27 20:48, 31F

07/27 20:48, 3周前 , 32F
達不到現在那種感覺(誰先出手不一定)
07/27 20:48, 32F

07/27 20:52, 3周前 , 33F
對 我剛剛也沒講清楚 我指的是這個分布應該不是預期中的
07/27 20:52, 33F

07/27 20:53, 3周前 , 34F
行為 但不固定出手順確實是想要的效果
07/27 20:53, 34F

07/28 11:29, 3周前 , 35F
原來不是田中手操我的武藏先手
07/28 11:29, 35F

07/28 11:54, 3周前 , 36F
如果要同時做到上面那2件事,又要滿足"同射程的船機率相同"
07/28 11:54, 36F

07/28 11:55, 3周前 , 37F
感覺會非常麻煩。方法一(目前方法):直接排序.利用排序比大小
07/28 11:55, 37F

07/28 11:56, 3周前 , 38F
射程相同的時候給隨機結果.結果一:隨機是隨機了 機率不等
07/28 11:56, 38F

07/28 11:57, 3周前 , 39F
方法二:先排序.每一組射程相同的船再隨機洗牌. 結果二: 後面
07/28 11:57, 39F

07/28 11:58, 3周前 , 40F
隨機洗牌可以保證機會均等 但前面排序時同射程的船可能就先
07/28 11:58, 40F

07/28 11:59, 3周前 , 41F
被弄亂而有偏差(排序演算法同大小不保證誰先誰後)
07/28 11:59, 41F

07/28 12:02, 3周前 , 42F
突然查到了。排序演算法有分穩定和不穩定
07/28 12:02, 42F

07/28 12:02, 3周前 , 43F
https://reurl.cc/8YWnRb 穩定=同大小不會改變相對位置
07/28 12:02, 43F

07/28 12:04, 3周前 , 44F
這樣用方法二(先排後洗) 選擇穩定的排序 就能保證機會均等了
07/28 12:04, 44F

07/28 12:29, 3周前 , 45F
更快一點的方法是先隨機洗牌 再用穩定排序
07/28 12:29, 45F

07/28 12:32, 3周前 , 46F
https://reurl.cc/DYdvnR 實驗程式(可以線上跑)
07/28 12:32, 46F

07/28 12:32, 3周前 , 47F
兩個方法的結果
07/28 12:32, 47F

07/28 14:35, 3周前 , 48F
居然連原始代碼都反推出來了,太強
07/28 14:35, 48F
文章代碼(AID): #1gPoRpcP (KanColle)
文章代碼(AID): #1gPoRpcP (KanColle)