这个python案例显示人盯人防守成功率?

wen python案例 4

本文目录导读:

这个python案例显示人盯人防守成功率?

  1. 人盯人防守成功率分析模型
  2. 模型关键要素
  3. 运行结果示例
  4. 实际应用建议

这是一个关于人盯人防守成功率的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()

模型关键要素

这个模型考虑了以下影响因素:

  1. 物理属性:速度、力量、敏捷度
  2. 技术属性:防守智商、进攻能力
  3. 位置关系:防守距离、移动轨迹
  4. 随机因素:模拟真实比赛的不确定性

运行结果示例

球员配置:
防守球员: 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%
评价: 良好 - 防守能力不错,但还有提升空间

实际应用建议

  1. 人员配置:根据对手特点,选择合适球员防守
  2. 战术调整:针对成功率低的区域加强防守
  3. 体能训练:提高体力消耗后的防守稳定性
  4. 配合训练:增强防守球员之间的协防意识

这个模型可以作为参考,实际比赛中还需要考虑更多因素,如战术配合、心理状态、裁判判罚等,你可以根据具体需求调整参数和算法复杂度。

抱歉,评论功能暂时关闭!