0
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?

600族ドラゴンとトレードオフ

Last updated at Posted at 2025-10-27

600族ドラゴンまとめ

― Dragon-Type Pseudo Legendary Pokémon ―

世代 ポケモン タイプ 種族値 (H/A/B/C/D/S) 合計
I カイリュー ドラゴン / ひこう 91 / 134 / 95 / 100 / 100 / 80 600
III ボーマンダ ドラゴン / ひこう 95 / 135 / 80 / 110 / 80 / 100 600
IV ガブリアス ドラゴン / じめん 108 / 130 / 95 / 80 / 85 / 102 600
V サザンドラ あく / ドラゴン 92 / 105 / 90 / 125 / 90 / 98 600
VI ヌメルゴン ドラゴン 90 / 100 / 70 / 110 / 150 / 80 600
VII ジャラランガ かくとう / ドラゴン 75 / 110 / 125 / 100 / 105 / 85 600
VIII ドラパルト ドラゴン / ゴースト 88 / 120 / 75 / 100 / 75 / 142 600
IX セグレイブ こおり / ドラゴン 115 / 145 / 92 / 75 / 86 / 87 600

数値モデル解析

(1) 耐久係数

( R = \sqrt{B \times D} )

ポケモン 計算結果
カイリュー 97.5
ボーマンダ 80.0
ガブリアス 89.9
サザンドラ 90.0
ヌメルゴン 102.5
ジャラランガ 114.5
ドラパルト 75.0
セグレイブ 89.2

(2) 攻撃効率指数

( E_{atk} = \frac{A + C}{2} )

ポケモン 計算結果
カイリュー 117.0
ボーマンダ 122.5
ガブリアス 105.0
サザンドラ 115.0
ヌメルゴン 105.0
ジャラランガ 105.0
ドラパルト 110.0
セグレイブ 110.0

(3) 機動力(速度比)

( v_{eff} = \frac{S}{600} \times 100% )

ポケモン 計算結果
カイリュー 13.3%
ボーマンダ 16.7%
ガブリアス 17.0%
サザンドラ 16.3%
ヌメルゴン 13.3%
ジャラランガ 14.2%
ドラパルト 23.7%
セグレイブ 14.5%

分類

カテゴリ ポケモン
バランス型 カイリュー・ガブリアス
攻撃型 ボーマンダ・セグレイブ
特攻型 サザンドラ
防御型 ヌメルゴン・ジャラランガ
高速型 ドラパルト

# =====================================
# Attack × Speed Tradeoff Analysis (Full Version)
# =====================================

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize_scalar

# --- Dataset ---
data = {
    "Generation": ["I", "III", "IV", "V", "VI", "VII", "VIII", "IX"],
    "Pokemon": ["Dragonite", "Salamence", "Garchomp", "Hydreigon",
                "Goodra", "Kommo-o", "Dragapult", "Baxcalibur"],
    "Attack": [134, 135, 130, 105, 100, 110, 120, 145],
    "Speed": [80, 100, 102, 98, 80, 85, 142, 87]
}

df = pd.DataFrame(data)

# --- 1. Attack×Speed 計算 ---
df["Atk×Spd"] = df["Attack"] * df["Speed"]
mean_value = df["Atk×Spd"].mean()
a = mean_value  # 反比例線 y = a/x のパラメータ

# =====================================
# 2. Attack×Speed 棒グラフ
# =====================================
plt.figure(figsize=(9, 5))
bars = plt.bar(df["Pokemon"], df["Atk×Spd"], color="royalblue", edgecolor="black")
plt.axhline(mean_value, color="red", linestyle="--", linewidth=1.5,
            label=f"Average = {mean_value:.1f}")
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2, yval + 1000, f"{int(yval)}",
             ha="center", va="bottom", fontsize=9)
plt.title("Attack × Speed of Pseudo Legendary Dragons", fontsize=13)
plt.xlabel("Pokémon")
plt.ylabel("Attack × Speed Value")
plt.legend()
plt.tight_layout()
plt.show()

# =====================================
# 3. Attack–Speed 反比例関係の描画
# =====================================
plt.figure(figsize=(8, 5))
plt.scatter(df["Speed"], df["Attack"], color="royalblue", label="Pokémon Data")
x = np.linspace(min(df["Speed"]) - 10, max(df["Speed"]) + 10, 200)
y = mean_value / x
plt.plot(x, y, color="red", linestyle="--", label="y = mean_value/x")

for i, txt in enumerate(df["Pokemon"]):
    plt.text(df["Speed"][i] + 1, df["Attack"][i] + 0.5, txt, fontsize=8)
plt.title("Attack–Speed Tradeoff (Inverse Relation)", fontsize=13)
plt.xlabel("Speed")
plt.ylabel("Attack")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

# =====================================
# 4. 縦距離(近似的距離)解析
# =====================================
df["Attack_ideal"] = mean_value / df["Speed"]
df["Vertical_Diff"] = df["Attack"] - df["Attack_ideal"]
df["Distance_to_Curve"] = abs(df["Vertical_Diff"])

plt.figure(figsize=(8, 5))
plt.scatter(df["Speed"], df["Attack"], color="royalblue", label="Pokémon")
plt.plot(x, y, color="red", linestyle="--", label="y = mean_value/x")

# 垂線描画(近似)
for i in range(len(df)):
    plt.plot([df["Speed"][i], df["Speed"][i]],
             [df["Attack"][i], df["Attack_ideal"][i]],
             color="gray", linestyle=":", linewidth=1)
for i, txt in enumerate(df["Pokemon"]):
    plt.text(df["Speed"][i] + 1, df["Attack"][i] + 0.5, txt, fontsize=8)
plt.title("Vertical Distance from Tradeoff Curve", fontsize=13)
plt.xlabel("Speed")
plt.ylabel("Attack")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

print("=== Vertical Distance Table ===")
print(df[["Pokemon", "Speed", "Attack", "Attack_ideal", "Vertical_Diff", "Distance_to_Curve"]].round(2))

# =====================================
# 5. 最短距離(厳密計算)
# =====================================

def distance_to_curve(x, x0, y0, a):
    y = a / x
    return np.sqrt((x - x0)**2 + (y - y0)**2)

shortest_dist = []
x_foot = []
y_foot = []

for i in range(len(df)):
    x0, y0 = df["Speed"][i], df["Attack"][i]
    res = minimize_scalar(distance_to_curve, bounds=(1, 300),
                          args=(x0, y0, a), method="bounded")
    x1 = res.x
    y1 = a / x1
    dmin = distance_to_curve(x1, x0, y0, a)
    shortest_dist.append(dmin)
    x_foot.append(x1)
    y_foot.append(y1)

df["x_foot"] = x_foot
df["y_foot"] = y_foot
df["Shortest_Dist"] = shortest_dist

# --- 最短距離プロット ---
plt.figure(figsize=(9, 6))
x = np.linspace(50, 160, 400)
y = a / x
plt.plot(x, y, "r--", label="Inverse Tradeoff: y = a/x")

plt.scatter(df["Speed"], df["Attack"], color="royalblue", label="Pokémon")
plt.scatter(df["x_foot"], df["y_foot"], color="orange", s=30, label="Foot of Perpendicular")

# 垂線を描画(最短距離)
for i in range(len(df)):
    plt.plot([df["Speed"][i], df["x_foot"][i]],
             [df["Attack"][i], df["y_foot"][i]], color="gray", linestyle=":")

for i, txt in enumerate(df["Pokemon"]):
    plt.text(df["Speed"][i] + 1, df["Attack"][i] + 1, txt, fontsize=8)

plt.title("Shortest Distance from Inverse Tradeoff Curve", fontsize=13)
plt.xlabel("Speed")
plt.ylabel("Attack")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

print("=== Shortest Distance to Tradeoff Curve ===")
print(df[["Pokemon", "Speed", "Attack", "Shortest_Dist"]].round(3))

出力内容

  1. 棒グラフ:Attack×Speedの比較
  2. 散布図:Speed–Attack関係+反比例曲線 ( y = \frac{\text{平均}}{x} )
  3. 表:Attack・Speed・積および平均値

image.png

image.png

0
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
0
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?