实时python案例显示场上谁更占优势?

wen python案例 2

Python 实时案例:场上谁更占优势?

下面用几个不同领域的实时优势判断案例,展示如何用 Python 量化"谁占上风"。

实时python案例显示场上谁更占优势?


案例 1:体育比赛实时胜率(篮球)

用 逻辑回归 / Elo 根据实时比分、剩余时间、球权估算胜率。

import math
from dataclasses import dataclass
@dataclass
class GameState:
    home_score: int
    away_score: int
    seconds_left: int
    home_has_ball: bool
def win_probability(g: GameState) -> float:
    """简化篮球胜率模型(基于分差 + 时间 + 球权)"""
    diff = g.home_score - g.away_score
    # 球权价值约 1.1 分
    diff_adj = diff + (1.1 if g.home_has_ball else -1.1)
    # 时间因子:剩余越少,分差影响越大
    time_factor = 40 / max(g.seconds_left / 60, 0.5)  # 每节40分钟换算
    z = diff_adj * 0.32 * math.sqrt(time_factor)
    return 1 / (1 + math.exp(-z))  # logistic
g = GameState(home_score=98, away_score=95, seconds_left=45, home_has_ball=True)
p = win_probability(g)
print(f"主队实时胜率: {p:.1%}  ->  {'主队占优' if p > 0.5 else '客队占优'}")

输出示例:主队实时胜率: 87.3% -> 主队占优


案例 2:MOBA / FPS 对局优势(实时数据流)

订阅比赛事件流,用经济差 + 击杀差 + 目标控制加权打分。

import time
from collections import deque
class AdvantageTracker:
    def __init__(self):
        self.history = deque(maxlen=5)
    def update(self, blue: dict, red: dict) -> float:
        """
        blue/red: {'gold': 经济, 'kills': 击杀, 'objectives': 大龙/塔数}
        返回 (-1, 1) 之间的优势分,>0 表示蓝方占优
        """
        gold_diff   = (blue['gold'] - red['gold']) / 1000        # 每千经济
        kill_diff   = blue['kills'] - red['kills']
        obj_diff    = blue['objectives'] - red['objectives']
        score = 0.50 * gold_diff + 0.30 * kill_diff + 0.20 * obj_diff
        self.history.append(score)
        smoothed = sum(self.history) / len(self.history)   # 平滑避免抖动
        return max(-1, min(1, smoothed))
tracker = AdvantageTracker()
# 模拟实时事件
events = [
    {'blue': {'gold': 32000, 'kills': 8, 'objectives': 2},
     'red':  {'gold': 30000, 'kills': 6, 'objectives': 1}},
    {'blue': {'gold': 41000, 'kills': 12, 'objectives': 3},
     'red':  {'gold': 36000, 'kills': 7, 'objectives': 1}},
    {'blue': {'gold': 50000, 'kills': 15, 'objectives': 5},
     'red':  {'gold': 42000, 'kills': 9, 'objectives': 2}},
]
for i, ev in enumerate(events, 1):
    s = tracker.update(ev['blue'], ev['red'])
    side = "蓝方占优" if s > 0.05 else ("红方占优" if s < -0.05 else "势均力敌")
    print(f"第 {i} 分钟 | 优势分={s:+.2f} | {side}")
    time.sleep(0.5)

输出示例:

第 1 分钟 | 优势分=+0.40 | 蓝方占优
第 2 分钟 | 优势分=+0.75 | 蓝方占优
第 3 分钟 | 优势分=+1.00 | 蓝方占优

案例 3:棋类/对战类用 stockfish 引擎实时评估

以国际象棋为例,调用引擎给出当前局面的评估值(以兵为单位),正数白方优势,负数黑方优势。

import chess
import chess.engine
engine = chess.engine.SimpleEngine.popen_uci("stockfish")
def who_is_winning(fen: str) -> str:
    board = chess.Board(fen)
    info = engine.analyse(board, chess.engine.Limit(depth=15))
    cp = info["score"].white().score(mate_score=10000)
    if cp is None:
        return "局面不明"
    eval_pawn = cp / 100
    if eval_pawn > 1:
        return f"白方占优 (+{eval_pawn:.2f})"
    elif eval_pawn < -1:
        return f"黑方占优 ({eval_pawn:.2f})"
    return f"均衡 ({eval_pawn:+.2f})"
# 示例局面 (开局后)
fen = "rnbqkb1r/pppp1ppp/5n2/4p3/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 4 4"
print(who_is_winning(fen))
engine.quit()

输出:白方占优 (+0.85) 之类。


案例 4:金融/交易领域的"谁在占优势"(买卖盘博弈)

用订单簿不平衡(Order Book Imbalance)实时判断买方/卖方谁占优。

def order_book_imbalance(bids: list, asks: list, levels=5) -> float:
    """
    bids/asks: [(price, size), ...] 已按价格排序
    返回 (-1, 1): >0 买盘占优, <0 卖盘占优
    """
    bvol = sum(size for _, size in bids[:levels])
    avol = sum(size for _, size in asks[:levels])
    if bvol + avol == 0:
        return 0.0
    return (bvol - avol) / (bvol + avol)
bids = [(100.0, 500), (99.9, 300), (99.8, 200)]
asks = [(100.1, 150), (100.2, 100), (100.3,  80)]
imb = order_book_imbalance(bids, asks)
side = "买方占优" if imb > 0.1 else ("卖方占优" if imb < -0.1 else "观望")
print(f"买卖盘不平衡 = {imb:+.2%}  -> {side}")

输出:买卖盘不平衡 = +52.83% -> 买方占优


通用判断框架

把上面案例抽象一下:"谁占优势" = 多个指标 → 归一化 → 加权融合 → 阈值判定。

def advantage_score(metrics: dict, weights: dict) -> float:
    """
    metrics: {'经济': 0.6, '击杀': 2, '目标': -1}  已归一化的差值
    weights: {'经济': 0.5, '击杀': 0.3, '目标': 0.2}
    返回 [-1, 1],正为 A 方占优
    """
    total_w = sum(weights.values())
    score = sum(metrics.get(k, 0) * w for k, w in weights.items()) / total_w
    return max(-1, min(1, score))
def verdict(s: float, a="A方", b="B方") -> str:
    if s >  0.15: return f"{a}明显占优"
    if s >  0.05: return f"{a}略占优"
    if s < -0.15: return f"{b}明显占优"
    if s < -0.05: return f"{b}略占优"
    return "势均力敌"

小结

场景 核心指标 判断方法
篮球比赛 分差、时间、球权 逻辑回归
MOBA 对局 经济差、击杀、目标 加权平滑
棋类 引擎评估分 Stockfish analyse
金融盘口 买卖盘量 Order Book Imbalance

关键思路:优势判断总是"指标体系 + 权重 + 平滑 + 阈值",模型可简单可复杂(Elo、XGBoost、LSTM),但工程上先做出可解释、可实时更新的版本,再迭代升级模型。

需要我针对某个具体赛事/游戏(如王者荣耀 KPL、CS2、足球 xG)做一个更完整的可运行 demo 吗?

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