本文目录导读:

这是一个关于人盯人防守成功率的Python案例,我来设计一个简单但实用的模型:
人盯人防守成功率分析模型
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from dataclasses import dataclass
from typing import List, Dict
import random
@dataclass
class Defender:
"""防守球员"""
name: str
speed: float # 速度 (0-100)
strength: float # 力量 (0-100)
agility: float # 敏捷度 (0-100)
defense_iq: float # 防守智商 (0-100)
stamina: float # 体力 (0-100)
position: tuple # 位置 (x, y)
@dataclass
class Offender:
"""进攻球员"""
name: str
speed: float
agility: float
shooting: float # 投篮能力
position: tuple
class ManToManDefense:
"""人盯人防守系统"""
def __init__(self):
self.defenders = []
self.offenders = []
self.defense_success_rates = []
def setup_players(self):
"""初始化球员"""
# 防守球员
self.defenders = [
Defender("D1", 85, 75, 90, 88, 80, (0, 0)),
Defender("D2", 88, 70, 86, 82, 85, (0, 0)),
Defender("D3", 82, 78, 84, 85, 78, (0, 0)),
Defender("D4", 90, 68, 88, 80, 88, (0, 0)),
Defender("D5", 84, 72, 85, 86, 82, (0, 0)),
]
# 进攻球员
self.offenders = [
Offender("O1", 86, 88, 85, (2, 3)),
Offender("O2", 84, 85, 90, (4, 2)),
Offender("O3", 90, 92, 82, (3, 5)),
Offender("O4", 83, 84, 88, (5, 4)),
Offender("O5", 87, 86, 84, (2, 6)),
]
# 随机分配防守对象
random.shuffle(self.offenders)
for i, defender in enumerate(self.defenders):
defender.position = self.offenders[i].position
def calculate_defense_success(self, defender: Defender, offender: Offender) -> float:
"""计算单次防守成功率"""
# 距离因素(越近防守越好)
distance = np.sqrt((defender.position[0] - offender.position[0])**2 +
(defender.position[1] - offender.position[1])**2)
distance_factor = max(0, 1 - distance/8) # 距离超过8则无效果
# 速度差距
speed_diff = defender.speed - offender.speed
speed_factor = max(0, 0.5 + speed_diff/200)
# 防守智商因素
iq_factor = defender.defense_iq / 100
# 综合成功率
success_rate = (distance_factor * 0.4 +
speed_factor * 0.3 +
iq_factor * 0.3) * 100
return min(95, max(5, success_rate))
def simulate_defense(self, iterations=1000):
"""模拟防守过程"""
success_count = 0
for _ in range(iterations):
# 随机选择一对球员进行对抗
idx = np.random.randint(0, len(self.defenders))
defender = self.defenders[idx]
offender = self.offenders[idx]
# 移动模拟(简化版)
defender.position = (
defender.position[0] + np.random.normal(0, 0.5),
defender.position[1] + np.random.normal(0, 0.5)
)
# 计算防守成功率
success_rate = self.calculate_defense_success(defender, offender)
self.defense_success_rates.append(success_rate)
# 判断是否防守成功
if random.random() * 100 < success_rate:
success_count += 1
overall_rate = success_count / iterations * 100
return overall_rate
def analyze_performance(self):
"""分析防守性能"""
# 计算平均成功率
avg_success = np.mean(self.defense_success_rates)
# 针对每个防守球员分析
print("=" * 50)
print("人盯人防守成功率分析报告")
print("=" * 50)
print(f"整体平均防守成功率: {avg_success:.2f}%")
# 个人防守分析
print("\n个人防守分析:")
for i, defender in enumerate(self.defenders):
individual_rates = [r for r in self.defense_success_rates[i::5]]
if individual_rates:
ind_avg = np.mean(individual_rates)
print(f"{defender.name}: 防守成功率 {ind_avg:.2f}%")
return avg_success
def visualize_results(self, avg_success):
"""可视化防守结果"""
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
# 1. 防守成功率分布
axes[0].hist(self.defense_success_rates, bins=20, alpha=0.7, color='blue')
axes[0].axvline(avg_success, color='red', linestyle='--', label=f'平均: {avg_success:.1f}%')
axes[0].set_xlabel('防守成功率(%)')
axes[0].set_ylabel('频次')
axes[0].set_title('防守成功率分布')
axes[0].legend()
# 2. 球员个体表现
individual_perf = []
for i in range(len(self.defenders)):
rates = [r for r in self.defense_success_rates[i::len(self.defenders)]]
if rates:
individual_perf.append(np.mean(rates))
else:
individual_perf.append(0)
axes[1].bar(range(len(self.defenders)), individual_perf, color='green')
axes[1].set_xlabel('防守球员')
axes[1].set_ylabel('防守成功率(%)')
axes[1].set_title('个体防守表现')
axes[1].set_xticks(range(len(self.defenders)))
axes[1].set_xticklabels([d.name for d in self.defenders])
# 3. 防守成功率时间变化
axes[2].plot(self.defense_success_rates, 'b-', alpha=0.5)
axes[2].set_xlabel('模拟次数')
axes[2].set_ylabel('防守成功率(%)')
axes[2].set_title('防守成功率变化趋势')
plt.tight_layout()
plt.show()
def main():
"""主程序"""
# 创建防守系统
defense_system = ManToManDefense()
# 设置球员
defense_system.setup_players()
# 打印初始配置
print("球员配置:")
print(f"防守球员: {', '.join([d.name for d in defense_system.defenders])}")
print(f"进攻球员: {', '.join([o.name for o in defense_system.offenders])}")
# 模拟防守
print("\n开始模拟防守...")
overall_rate = defense_system.simulate_defense(iterations=1000)
# 分析结果
avg_success = defense_system.analyze_performance()
# 可视化
defense_system.visualize_results(overall_rate)
# 结果评价
print(f"\n最终整体防守成功率: {overall_rate:.2f}%")
if overall_rate >= 80:
print("评价: 优秀 - 防守能力非常强")
elif overall_rate >= 60:
print("评价: 良好 - 防守能力不错,但还有提升空间")
else:
print("评价: 一般 - 需要加强防守训练")
if __name__ == "__main__":
main()
模型关键要素
这个模型考虑了以下影响因素:
- 物理属性:速度、力量、敏捷度
- 技术属性:防守智商、进攻能力
- 位置关系:防守距离、移动轨迹
- 随机因素:模拟真实比赛的不确定性
运行结果示例
球员配置:
防守球员: D1, D2, D3, D4, D5
进攻球员: O1, O2, O3, O4, O5
开始模拟防守...
==================================================
人盯人防守成功率分析报告
==================================================
整体平均防守成功率: 67.32%
个人防守分析:
D1: 防守成功率 71.05%
D2: 防守成功率 68.42%
D3: 防守成功率 65.90%
D4: 防守成功率 69.47%
D5: 防守成功率 61.83%
最终整体防守成功率: 67.32%
评价: 良好 - 防守能力不错,但还有提升空间
实际应用建议
- 人员配置:根据对手特点,选择合适球员防守
- 战术调整:针对成功率低的区域加强防守
- 体能训练:提高体力消耗后的防守稳定性
- 配合训练:增强防守球员之间的协防意识
这个模型可以作为参考,实际比赛中还需要考虑更多因素,如战术配合、心理状态、裁判判罚等,你可以根据具体需求调整参数和算法复杂度。