本文目录导读:

我来给你设计一个基于Python的足球犯规判罚判断案例,这个案例会模拟裁判AI,根据犯规的严重程度、位置、动作性质等因素,判断是否应该出示黄牌或红牌。
基于规则的判断系统
import random
from dataclasses import dataclass
from enum import Enum
class CardType(Enum):
NO_CARD = "无牌"
YELLOW = "黄牌"
RED = "红牌"
@dataclass
class Foul:
"""犯规事件类"""
action_type: str # 犯规动作类型
severity: int # 严重程度 (1-10)
position: str # 犯规位置
intentional: bool # 是否故意
last_man: bool # 是否最后一名防守球员
dangerous: bool # 是否危险动作
accumulated_fouls: int # 累计犯规次数
match_time: int # 比赛时间(分钟)
score_diff: int # 比分差距
class FootballReferee:
"""足球裁判AI类"""
def __init__(self):
# 犯规动作基础分值
self.action_scores = {
"拉扯": 3, "推搡": 4, "铲球": 5, "绊倒": 5,
"肘击": 8, "踩踏": 9, "飞铲": 7, "手球": 2,
"暴力行为": 10, "阻碍进攻": 2, "报复动作": 6
}
# 危险位置加成
self.dangerous_positions = ["禁区内", "禁区前沿"]
# 红牌直接动作
self.direct_red_actions = ["暴力行为", "严重犯规", "恶意报复"]
def evaluate_foul(self, foul: Foul) -> dict:
"""评估犯规是否应吃牌"""
# 计算基础分值
base_score = self.action_scores.get(foul.action_type, 5)
# 严重程度加成分数
final_score = base_score + (foul.severity - 5) * 0.6
# 是否是最后一名防守球员
if foul.last_man:
final_score += 3
print("⚠️ 破坏了明显得分机会,应加重处罚")
# 是否故意犯规
if foul.intentional:
final_score += 2
print("⚠️ 故意犯规,性质恶劣")
# 是否危险动作
if foul.dangerous:
final_score += 2.5
print("⚠️ 危险动作,威胁球员安全")
# 位置加成
if foul.position in self.dangerous_positions:
final_score += 1.5
print("⚠️ 区域位置敏感,可能破坏进攻机会")
# 累计犯规次数
if foul.accumulated_fouls >= 3:
final_score += 0.5
print(f"⚠️ 球员已有{foul.accumulated_fouls}次犯规记录")
# 比赛时间(快结束时从严)
if foul.match_time >= 85:
final_score += 0.8
print("⏰ 比赛末段,稳住场上局势考虑")
# 出牌判断逻辑
final_score = round(final_score, 1)
# 直接红牌情况
if foul.action_type in self.direct_red_actions:
result = CardType.RED
decision = "恶意犯规,直接红牌罚下!"
# 过高分值 => 红牌
elif final_score >= 9.0:
result = CardType.RED
decision = f"严重犯规 (评分:{final_score}),红牌罚下!"
# 中等分值 => 黄牌
elif final_score >= 6.0:
result = CardType.YELLOW
decision = f"明显犯规 (评分:{final_score}),出示黄牌警告"
# 低分值 => 无牌
else:
result = CardType.NO_CARD
decision = f"普通犯规 (评分:{final_score}),口头警告即可"
return {
"result": result,
"score": final_score,
"decision": decision,
"detailed_factors": {
"犯规类型": foul.action_type,
"严重程度": foul.severity,
"位置": foul.position,
"故意性": "是" if foul.intentional else "否",
"最后一名防守": "是" if foul.last_man else "否",
"危险度": "高" if foul.dangerous else "低"
}
}
# 模拟测试案例
def test_cases():
referee = FootballReferee()
# 定义测试用例
cases = [
# 案例1: 禁区外战术犯规
Foul("拉扯", 3, "中场", True, False, False, 1, 60, 0),
# 案例2: 最后一名防守球员的犯规
Foul("铲球", 6, "禁区内", True, True, False, 2, 75, 0),
# 案例3: 暴力报复动作
Foul("暴力行为", 10, "中场", False, False, True, 0, 30, -1),
# 案例4: 危险飞铲
Foul("飞铲", 8, "左路", False, False, True, 1, 50, 1),
# 案例5: 普通推搡
Foul("推搡", 4, "中场", False, False, False, 0, 20, 0),
# 案例6: 禁区内手球破坏得分机会
Foul("手球", 7, "禁区内", True, True, False, 0, 90, 0),
]
case_names = [
"中场战术犯规",
"禁区最后一人犯规",
"暴力报复动作",
"危险飞铲",
"普通推搡",
"禁区内手球破坏得分"
]
print("=" * 60)
print("⚽ 足球裁判AI判罚系统 - 测试案例")
print("=" * 60)
for i, (case, name) in enumerate(zip(cases, case_names), 1):
print(f"\n{'─' * 50}")
print(f"案例{i}: {name}")
print(f"{'─' * 50}")
# 显示犯规细节
print(f"📋 犯规详情:")
print(f" • 动作: {case.action_type}")
print(f" • 严重度: {case.severity}/10")
print(f" • 位置: {case.position}")
print(f" • 故意: {'是' if case.intentional else '否'}")
print(f" • 最后防守: {'是' if case.last_man else '否'}")
print(f" • 危险: {'是' if case.dangerous else '否'}")
# 评估
result = referee.evaluate_foul(case)
print(f"\n⚖️ 裁判判定:")
print(f" • 结果: {result['result'].value}")
print(f" • 评分: {result['score']}")
print(f" • 判罚: {result['decision']}")
if __name__ == "__main__":
test_cases()
更智能的机器学习判断(基于逻辑回归)
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
class MLReferee:
"""基于机器学习的裁判AI"""
def __init__(self):
# 模拟训练数据(实际中应使用真实比赛数据)
self.X_train, self.y_train = self.generate_training_data()
self.scaler = StandardScaler()
# 训练模型
self.X_scaled = self.scaler.fit_transform(self.X_train)
self.model = LogisticRegression(multi_class='auto', solver='lbfgs')
self.model.fit(self.X_scaled, self.y_train)
def generate_training_data(self):
"""生成模拟训练数据"""
np.random.seed(42)
n_samples = 1000
# 特征: [犯规严重度, 位置敏感度, 是否故意, 是否最后一人, 危险度, 累计犯规, 时间压力]
X = np.random.rand(n_samples, 7)
X[:, 0] *= 10 # 严重度 0-10
# 生成标签: 0=无牌, 1=黄牌, 2=红牌
y = []
for row in X:
score = row[0] * 0.5 + row[1] * 0.3 + row[2] * 0.4 + \
row[3] * 0.2 + row[4] * 0.3 + row[5] * 0.1
if score > 4.0:
y.append(2) # 红牌
elif score > 2.5:
y.append(1) # 黄牌
else:
y.append(0) # 无牌
return X, np.array(y)
def predict(self, features):
"""预测犯规应得牌级别"""
features_scaled = self.scaler.transform([features])
prediction = self.model.predict(features_scaled)[0]
probabilities = self.model.predict_proba(features_scaled)[0]
return {
"prediction": ["无牌", "黄牌", "红牌"][prediction],
"probabilities": {
"无牌": probabilities[0],
"黄牌": probabilities[1],
"红牌": probabilities[2]
}
}
# 使用示例
def ml_test():
ml_referee = MLReferee()
print("\n🤖 机器学习裁判判断")
print("=" * 50)
# 测试样例: [严重度, 位置, 故意, 最后一人, 危险, 累计犯规, 时间]
test_fouls = [
[3, 0.2, 0, 0, 0.1, 0.2, 0.3], # 普通犯规
[7, 0.8, 1, 1, 0.7, 0.5, 0.8], # 严重犯规
[9, 0.9, 1, 0.5, 1, 0.8, 1.0], # 极其恶劣
]
for i, foul in enumerate(test_fouls, 1):
result = ml_referee.predict(foul)
print(f"\n案件{i} 预测结果: {result['prediction']}")
print(f" 置信度: 无牌 {result['probabilities']['无牌']:.2%}, "
f"黄牌 {result['probabilities']['黄牌']:.2%}, "
f"红牌 {result['probabilities']['红牌']:.2%}")
if __name__ == "__main__":
ml_test()
综合决策系统(带输出界面)
def interactive_referee():
"""交互式裁判系统"""
print("🏟️ 足球裁判AI判罚系统")
print("=" * 50)
print("\n请描述犯规情况:")
# 收集信息
actions = ["拉扯", "推搡", "铲球", "绊倒", "肘击", "踩踏",
"飞铲", "手球", "暴力行为", "阻碍进攻", "报复动作"]
print("\n可选犯规动作:")
for i, action in enumerate(actions, 1):
print(f" {i}. {action}")
action_choice = int(input("请选择犯规动作编号: ")) - 1
severity = int(input(f"严重程度 (1-10, 建议: 拉扯3-5, 铲球5-7, 暴力9-10): "))
position = input("犯规位置 (中场/禁区内/禁区前沿/边路): ")
intentional = input("是否故意? (y/n): ").lower() == 'y'
last_man = input("是否为最后一名防守球员? (y/n): ").lower() == 'y'
dangerous = input("是否危险动作? (y/n): ").lower() == 'y'
fouls = int(input("累计犯规次数: "))
match_time = int(input("比赛时间(分钟): "))
# 创建犯规对象
foul = Foul(
action_type=actions[action_choice],
severity=severity,
position=position,
intentional=intentional,
last_man=last_man,
dangerous=dangerous,
accumulated_fouls=fouls,
match_time=match_time,
score_diff=0
)
# 评估
referee = FootballReferee()
result = referee.evaluate_foul(foul)
# 输出结果
print("\n" + "=" * 50)
print(f"⚽ 最终判罚: {result['result'].value}")
print(f"📊 综合评分: {result['score']}")
print(f"💬 裁判说明: {result['decision']}")
print("=" * 50)
if __name__ == "__main__":
interactive_referee()
判罚逻辑说明
判罚因素权重
- 动作性质 (基础分)
- 严重程度 (0-10分)
- 位置敏感性 (禁区附近加分)
- 是否故意 (+2分)
- 是否破坏得分机会 (+3分)
- 危险性 (+2.5分)
判罚标准
- 红牌 (评分≥9): 严重犯规、暴力行为
- 黄牌 (评分6-9): 明显犯规、故意手球
- 无牌 (评分<6): 普通犯规
特殊情况
- 最后一名防守球员犯规 → 加重处罚
- 恶意报复 → 直接红牌
- 比赛末段违规 → 从严处理
这个系统可以模拟真实裁判的判断逻辑,你也可以根据实际比赛数据调整权重参数,使其更符合实际情况,运行这些代码,可以看到不同犯规情况的判罚结果!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播