日前,Pokemon 的最新作品《Pokémon LEGENDS Arceus》發售。 在新型口袋妖怪 佐魯亞 和 佐羅亞克 備受關注。 出乎意料的是,這兩種型別都是從未出現過的 普通幽靈 。
知道《口袋妖怪》的人就不用解釋了,不過這是普通型別的一個很弱的地方,禁用與鬼系的戰鬥技,同時禁用鬼系的鬼技,也就是鬼系的弱點,用普通型,平衡的,夢幻般的複雜型。 傳聞這個 普通幽靈 可能是最強組合。
但真的是這樣嗎?
口袋妖怪型別相似性
口袋妖怪一共有18種,一個口袋妖怪最多可以有兩種。另一方面,口袋妖怪的技能也分配了一種型別。防禦口袋妖怪的傷害倍數由“使用的技術型別”和“自己的型別”的相容性決定。
型別之間的相容性如下圖所示。
只要你玩過日本的遊戲基本都知道,○表示 效果極好! (傷害翻倍),△表示 效果不好 (傷害為0.5倍),×表示 無效果 (傷害為0倍)。不是的部分是正常效果(傷害為1倍)。擁有兩種型別(複合型別)的口袋妖怪受到的傷害是由兩種型別的相容性的乘積決定的。比如草系技的傷害是2×2=4倍,水系技的傷害是0.5×2=1倍,電系技的傷害是針對“水/地”系的口袋妖怪。是 2 × 0 = 0 。
型別的另一個重要規範是 型別匹配 的概念。這意味著如果口袋妖怪使用與自己相同型別的技能,它的力量將是正常的 1.5 倍。這意味著電氣型口袋妖怪釋放的 10 まんボルト 普通型口袋妖怪釋放的 10 まんボルト 更強。
這就是你需要知道的關於口袋妖怪戰鬥的全部內容。將根據這些事實進行計算。相反,關於口袋妖怪的知識將不再出現在分析階段。也就是說,純粹型別的實力在給出答案之前是不考慮的,比如那種型別的口袋妖怪究竟存在什麼樣的特性和種族價值觀,什麼樣的技術流行或者更優秀。
型別間相容性的制定
首先,讓我們為 18 種類型中的每一種分配一個從 1 到 18 的數字。這允許口袋妖怪的型別由 (x, y) 和兩個數字的組合表示。另外,如果口袋妖怪只有一種型別,我們將使用 0 編寫 (0, x),表示“無”型別。
在這裡,使用的型別 x 技術對抗型別 (0, y) 口袋妖怪時的傷害乘數米xy _米x x是的會做。這對應於上一節中提到的“相容性矩陣”的 x-by-column 分量的放大倍數。
首先要進行資料的歸一化處理,此時釋放x型技能對(y,z)型口袋妖怪的傷害比是f(x,(y,z))是
此外,考慮一個型別(w,x)的口袋妖怪可以對一個型別(y,z)的口袋妖怪造成多少傷害乘數。現在,type (w, x) Pokemon 將只使用其型別中包含的技巧型別(即可以透過型別匹配釋放的技巧)。假設你選擇了對對手更有效的技術型別,那麼此時的傷害乘數就是綜合傷害乘數。G( ( w , x ) 是
嘗試計算(水,電)的(地,鋼)的綜合傷害率。水式技法是2×1=2,電式技法是0×1=0,所以大的“2”就是g的值。
但是,不能說(水、電)對(地、鋼)有利。現在考慮(地、鋼)的(水、電)的綜合傷害乘數。地面型技術翻倍,鋼型技術為0.5倍,g值也為2。也就是說,兩人處於一種可以直面對方弱點的關係中,不能說誰更強。基於此,似乎可以透過組合損傷比之間的大小關係來確定複合型別之間的優劣關係。
目前,組合傷害乘數有多少 6 個可能的值:0,0.25,0.5,1,2,4。計算攻防切換時的綜合傷害乘數,根據6個階段相差多少來確定(w,x)相對於(y,z)的優勢。從 -5 到 5 有 11 個可能的值,如果這是正值,則有利,如果是負值,則不利。
現在讓我們考慮一下(水,電)相對於(火,岩石)的優勢。g ((water,electric), (fire, rock)) 是“4”,因為它有四倍於水系的弱點,而 g ((water,rock), (water,electric)) ) 是“1”,因為岩石術造成的傷害是最大的。所以h的值是2-0=2,(水,電)相對於(火,巖)的優勢是“2”(對應6個階段的兩次分離)。
實力對比來了
既然已經量化了型別之間的優劣關係,那麼我們應該如何找到最強的型別呢?最簡單的是計算相對於所有複雜型別的優勢,並檢視總值(分數)的大小。
包括“無”型別在內的 19 種類型中選擇兩種不同的型別進行統一的處理,並且建立相容性矩陣 M。
types = ["無","ノーマル","ほのお","みず","でんき","くさ","こおり","かくとう","どく",
"じめん","ひこう","エスパー","むし","いわ","ゴースト","ドラゴン","あく","はがね","フェアリー"]
M =[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.5, 0, 1, 1, 0.5, 1],
[1, 1, 0.5, 0.5, 1, 2, 2, 1, 1, 1, 1, 1, 2, 0.5, 1, 0.5, 1, 2, 1],
[1, 1, 2, 0.5, 1, 0.5, 1, 1, 1, 2, 1, 1, 1, 2, 1, 0.5, 1, 1, 1],
[1, 1, 1, 2, 0.5, 0.5, 1, 1, 1, 0, 2, 1, 1, 1, 1, 0.5, 1, 1, 1],
[1, 1, 0.5, 2, 1, 0.5, 1, 1, 0.5, 2, 0.5, 1, 0.5, 2, 1, 0.5, 1, 0.5, 1],
[1, 1, 0.5, 0.5, 1, 2, 0.5, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 0.5, 1],
[1, 2, 1, 1, 1, 1, 2, 1, 0.5, 1, 0.5, 0.5, 0.5, 2, 0, 1, 2, 2, 0.5],
[1, 1, 1, 1, 1, 2, 1, 1, 0.5, 0.5, 1, 1, 1, 0.5, 0.5, 1, 1, 0, 2],
[1, 1, 2, 1, 2, 0.5, 1, 1, 2, 1, 0, 1, 0.5, 2, 1, 1, 1, 2, 1],
[1, 1, 1, 1, 0.5, 2, 1, 2, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 0.5, 1],
[1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0.5, 1, 1, 1, 1, 0, 0.5, 1],
[1, 1, 0.5, 1, 1, 2, 1, 0.5, 0.5, 1, 0.5, 2, 1, 1, 0.5, 1, 2, 0.5, 0.5],
[1, 1, 2, 1, 1, 1, 2, 0.5, 1, 0.5, 2, 1, 2, 1, 1, 1, 1, 0.5, 1],
[1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 0.5, 0],
[1, 1, 1, 1, 1, 1, 1, 0.5, 1, 1, 1, 2, 1, 1, 2, 1, 0.5, 1, 0.5],
[1, 1, 0.5, 0.5, 0.5, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0.5, 2],
[1, 1, 0.5, 1, 1, 1, 1, 2, 0.5, 1, 1, 1, 1, 1, 1, 2, 2, 0.5, 1]]
基於此,將建立上面定義的函式 f、g、h。 例如,(水,電)對應(3,4),(火,岩石)對應(2,13)
import math
import numpy as np
def f(x,yz):
y,z = yz
return M[x][y]*M[x][z]
def g(wx,yz):
w, x = wx
y, z = yz
return max(f(w,(y,z)),f(x,(y,z)))
def h(wx,yz):
w, x = wx
y, z = yz
return int(np.round(math.log2(max(g((w,x),(y,z)),1/8))-math.log2(max(g((y,z),(w,x)),1/8))))
以簡單的方式計算優勢的總價值並輸出排名。
result = []
for w in range(18):
for x in range(w+1,19):
score = 0
for y in range(18):
for z in range(y+1,19):
score += h((w,x),(y,z))
result.append(((w,x),score))
result.sort(key=lambda x:x[1],reverse=True)
for i in range(171):
wx,score = result[i]
w,x = wx
print(types[w],types[x],score)
top10 型別結果
じめん はがね 96
はがね フェアリー 92
ひこう はがね 90
ゴースト はがね 88
ほのお じめん 84
じめん ひこう 83
みず はがね 78
じめん フェアリー 72
かくとう はがね 71
ほのお はがね 67
前10名中有7種含鋼,可見鋼的卓越性。此外,排名第二的“鋼鐵仙子”屬於“Zacian”,是使用率最高的最知名口袋妖怪之一,支援這種方法的有效性。
PageRank方法改進
這裡出現了一個問題。用所有型別的優勢總價值來確定最強者是否合適?即使你可以利用多種型別,但如果你只有沒有出現在比賽中的弱型別對手,那也無濟於事。反之,與所謂的強者進行戰鬥而不處於劣勢的型別,可以說是真正的強者。
PageRank是一種根據網頁的連結關係確定網頁重要性的演算法,是谷歌搜尋引擎使用的技術。它不僅是從許多頁面連結的重要,而且是透過考慮連結站點的重要性和連結數量來計算的。最好依靠圖論的話來解釋具體內容。
現在將每個網頁視為一個頂點,將一個從一個頁面到另一個頁面的連結視為有向邊的有向圖,並讓鄰接矩陣為 A。此外,令 S 為透過將鄰接矩陣的每一行除以每個頂點的度而獲得的值。此時,S轉置後的矩陣變成了轉移機率矩陣,表示跟隨連結的隨機網上衝浪運動。
此外,在這裡,我們將 Google 矩陣 G 定義如下。
α是一個稱為阻尼因子的超引數,用於調整反向連結的重要性影響的大小。通常它似乎設定為 0.85。 T是瞬移矩陣,是一個方陣,其分量為“1/頂點數”。按順序排列每個頁面的重要性的向量λ,以下關係從重要性的遞迴定義中成立。
順便一提,G也是一個轉移機率矩陣(就像將每個頂點的重要性分配給連結的頂點),所以每一列的和都等於1。根據 Perron-Frobenius 定理,具有此類性質的非負矩陣“具有正特徵向量,其未退化特徵值為 1,並且沒有更大的特徵值”。
簡而言之,G具有最大特徵值的特徵向量是我們想要的每個頁面的重要性順序。因此, PageRank 的簡單而生動的主張是重要性的計算(假設特徵值已知為 1)導致線性方程組的解。
最強的適配型別
在 PageRank,網站之間的連結被認為是定向的,並被用作確定其重要性的一個因素。另一方面,在口袋妖怪型別的情況下,這兩種型別之間的關係已經在上一節的討論中定量地理解了。然後,透過將每種型別放在頂點並將加權有向側從劣勢型別擴充套件到優勢型別,就像指向“從我的角度來看這傢伙很強大”(類似於連結)。我認為效果可期。
為簡單起見,我們先用一個由火(ほのお)、水(みず)、地(じめん)和電(でんき)四種類型組成的圖進行實驗。
- 火 相對於 水 的優勢是-2
- 火 相對於 地 的優勢是-1
- 火 相對於 電 的優勢是0
- 水 相對於 地 的優勢是1
- 水 相對於 電 的優勢是-1
- 地 相對於 電 的優勢是 4
因此基於這些,從劣勢到優勢擴充套件“劣勢程度”加權的一側。如果優勢為 0,則邊不會被拉伸。
構建的加權鄰接矩陣
轉移機率矩陣
根據公式計算的矩陣結果
使用 scipy 模組計算具有最大特徵值的特徵向量
from scipy.sparse.linalg import eigs
S = np.array([[0,2/3,1/3,0],[0,0,0,1],[0,1,0,0],[0,0,1,0]])
T = 1/4*np.ones((4,4))
G = 0.85*S.T+0.15*T
value, vector = eigs(G, 1)
print(value, vector)
>>>[1.+0.j] [[-0.06731985+0.j]
[-0.58967561+0.j]
[-0.5696563 +0.j]
[-0.56854412+0.j]]
由於特徵向量的所有分量都是負數,所以第二個分量最大,稍有不同後,第三個和第四個分量幾乎是相同的值,然後看起來第一個分量被大大分開後繼續存在。這表示 水 > 地 ≒ 電 > 火,而 火 距離 水 、 地 、電 三個平衡點只有一步之遙。
如果型別數為4,則不會出現加權的含義,但如果增加邊數,它肯定會起作用。
讓我們對所有 171 種類型做同樣的事情。就是做一個遍歷迴圈而已。
d ={} # 對應數字字典
d_inv = {}
k = 0
for i in range(18):
for j in range(i+1,19):
d[(i,j)] = k
d_inv[k] = (i,j)
k += 1
A = [[0 for _ in range(171)] for _ in range(171)]
for w in range(18):
for x in range(w+1,19):
k = d[(w,x)]
for y in range(18):
for z in range(y+1,19):
l = d[(y,z)]
if h((w,x),(y,z)) < 0:
A[k][l] = -h((w,x),(y,z))
A = np.array(A,dtype=np.float)
S = np.zeros((171,171))
for i in range(171):
S[i] = A[i]/sum(A[i])
T = (1/171)*np.ones((171,171))
G = 0.85*S.T+0.15*T
value, vector = eigs(G, 1)
vector = np.abs(vector.real)
result = []
for i in range(171):
w,x = d_inv[i]
result.append(((w,x),vector[i][0]))
result.sort(key=lambda x:x[1],reverse=True)
for i in range(171):
wx,score = result[i]
w,x = wx
print(types[w],types[x],score)
top10 型別結果
みず じめん 0.12901610166092206
じめん ひこう 0.12333336303638766
ほのお じめん 0.1230335213682247
じめん はがね 0.12253193098002743
ほのお はがね 0.11962533181338252
でんき はがね 0.11808330879585195
ひこう はがね 0.11638423434901143
はがね フェアリー 0.11133780309618507
みず フェアリー 0.11083098136702635
くさ はがね 0.11081844379517954
強大的鋼鐵之力依舊強大,只是後退了一點,而能夠利用鋼鐵之力的弱點來代替它的地面部隊,正在飛躍。從這種趨勢的變化來看,類似PageRank的演算法似乎在發揮作用,正如預期的那樣,體現了“能對抗強型別的型別才是真正的強”。
讓我們將其與最新的口袋妖怪使用率排名(2022/02/06)進行比較。
最終得出的結論 最強的口袋妖怪型別是 水/地 。
資料參考網站:https://www.pokemon.co.jp/ex/sun_moon/fight/161215_01.html 如果打不開請那個啥你們懂的。