1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで学ぶゲーム数理工学:ポケモン編2「H = B + D」の定理

Last updated at Posted at 2025-04-07

目的

ポケモンの総合耐久値 ( 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()

結果

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?