目的
ポケモンの総合耐久値 ( Y = H + B + D ) を固定したとき、物理・特殊耐久(それぞれ ( H \times B ), ( H \times D ))が最大になる条件をグラフで可視化します。
このとき、「H = B + D」 を満たすような割り振りが最も効率的であることを確認します。
参考リンクまとめ
Pythonコード
import numpy as np
import matplotlib.pyplot as plt
# ---------------------------------------------
# 定数設定 / Set constants
# ---------------------------------------------
# 総合耐久値 Y = H + B + D(HP + 防御 + 特防の合計)を仮定
# Total durability value Y = HP + Defense + Special Defense
Y = 300
# B:D の比率を設定(ここを変えるとグラフが変わる)例:k = 1 なら B = D
# Set ratio of Defense (B) to Special Defense (D) as D = kB
k = 1 # ← この値を変えて色々試してみましょう!
# ---------------------------------------------
# B の範囲を生成 / Generate a valid range of Defense (B) values
# ---------------------------------------------
# H = Y - B - D = Y - B - kB = Y - (1 + k)B が正になるよう制限
# Ensure H remains positive: H = Y - (1 + k)B > 0 ⇒ B < Y / (1 + k)
B_values = np.linspace(1, Y / (1 + k + 1), 500)
# 各 B に対して D, H を計算 / Compute D and H for each B
D_values = k * B_values
H_values = Y - B_values - D_values
# ---------------------------------------------
# 耐久指数を計算 / Compute durability indices
# ---------------------------------------------
# 物理耐久指数(Physical Durability Index)= H × B
# 特殊耐久指数(Special Durability Index)= H × D
physical_durability = H_values * B_values
special_durability = H_values * D_values
# ---------------------------------------------
# 耐久が最大となる B を理論式から求める / Calculate optimal B
# ---------------------------------------------
# 最大耐久となる B の理論値は B = Y / (2(1 + k))
B_opt = Y / (2 * (1 + k))
D_opt = k * B_opt
H_opt = Y - B_opt - D_opt
max_durability = H_opt * B_opt # 理論上の最大物理耐久
# ---------------------------------------------
# グラフ描画 / Plotting the durability indices
# ---------------------------------------------
plt.figure(figsize=(10, 6))
# 耐久指数を描画 / Plot both durability indices
plt.plot(B_values, physical_durability, label="Physical Durability (H×B)")
plt.plot(B_values, special_durability, label="Special Durability (H×D)", linestyle='--')
# 最適な B の位置に縦線を追加 / Mark the optimal B with a vertical line
plt.axvline(B_opt, color='gray', linestyle=':', label='Optimal B (H = B + D)')
# タイトルと軸ラベル / Title and axis labels
plt.title("Durability Optimization when H = B + D")
plt.xlabel("Defense B.D")
plt.ylabel("Durability Index")
# 凡例とグリッド / Legend and grid
plt.legend()
plt.grid(True)
# グラフを表示 / Show the plot
plt.show()