You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找到兼具对战均衡性与玩家级时效性的共同对手?

寻找同时满足均衡性与时效性的对手

我需要找到同时满足以下两个条件的对手:

  1. 两玩家对战该对手的次数最均衡(此处「最常见」定义为次数均衡,而非总对战次数多,比如玩家1、2分别对战玩家3达99次和1次,更倾向选A、B均对战49次的玩家4)
  2. 两玩家对战该对手的时间均为最近

玩家A与B的对战原始数据

玩家对手距今天数
AC1
AC2
AD10
AF100
AF101
AF102
AG1
BC1
BC2
BD10
BF100
BF101
BF102
BG1
BG2
BG3
BG4
BG5
BG6
BG7
BG8

均衡度衡量函数

为衡量对战次数的均衡性,编写了如下函数:

import numpy as np
from collections import Counter


def balanceness(array: np.ndarray):
    classes = [(c, cnt) for c, cnt in Counter(array).items()]
    m = len(classes)
    n = len(array)

    H = -sum([(cnt / n) * np.log((cnt / n)) for c, cnt in classes])

    return H / np.log(m)

该函数符合预期,示例:

>>> balanceness(array=np.array([0, 0, 0, 1, 1, 1]))
1.0

各对手均衡度计算结果

对手均衡度对战次数
C14
D12
F16
G0.50325833477564579

从结果看,对手F的均衡性最佳,但A与B对战F的时间相对久远。


时效性权重函数尝试

为加入时效性因子,编写了权重函数:

def weight(days_ago: int, epilson: float=0.005) -> float:
    return np.exp(-1 * days_ago * epilson)

求和各对手的加权对战次数后得到结果:

对手均衡度对战次数加权对战次数
C143.9701246258837
D121.90245884900143
F163.62106362790388
G0.503258334775645798.81753570603108

此时对手C成为「近期均衡对手」,但该方法忽略了玩家层面的时效性——可能出现玩家1近期多次对战玩家3,而玩家2对战玩家3的时间却十分久远的情况。


最终需求

现需找到同时满足以下两个条件的对手:

  1. 两玩家对战次数最均衡
  2. 两玩家对战该对手的时间均为最近

内容的提问来源于stack exchange,提问作者HJA24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 02:15:12