团队讲解版 · 产品 / 技术 / 测试共用

AI 信号池返还算法:非技术图解版 + 技术实现版

先用图讲明白:用户怎么从 T0 进入档位队列、平台怎么拆预算、AI 怎么发信号、最后结果怎么看。技术版本放在后半段,给研发和测试继续看实现口径。

打开模拟器

非技术版:这套算法到底是什么

把它理解成一个“AI 信号预算返还系统”:用户玩游戏产生打码和输赢,系统把可回补的净输资金拆成预算,再通过 AI 信号分批返还给部分用户。

看图讲解 · 无代码
给不懂技术的人看

只看三件事:用户在哪个档位队列、净输资金怎么分、信号发给谁。看完就能知道算法为什么能让用户继续玩。

给技术和测试看

后半段继续讲状态字段、队列流转、评估日志、统计口径和测试用例。

术语 1:档位队列

T0-T16 只表示用户按打码量排队的位置,是“人在哪里”,不是钱。

术语 2:净输资金

用户新增实际净输形成可拆分金额,是“钱从哪里来”,不再叫净输池。

术语 3:AI 信号池

只表示正在给信号的临时展示区,展示来源档位和返还金额。

一张流程图:算法从下注到信号返还怎么跑 看箭头即可:未达首档留 T0,未中继续升档,拿到信号后清零回 T0
AI 信号池算法总流程图 用户下注后按打码区间进入 T0 或 T1-T16 档位队列,T0 小于 50,T1 大于等于 50 且小于 120,本批新增净输拆成平台、活动、信号预算三份,AI 使用信号预算选择部分用户进入信号池,选中用户返还后清零回 T0,未选中用户留在当前档并继续升档。 达到首档 未达首档 选中 未中 用户下注 产生打码量和输赢 T0 预热队列 打码量 < 50 不参与分钱 到首档? 看打码量 继续打码 留在 T0 再次判断首档 T1-T16 档位队列 T1: ≥50 且 <120 后续按相邻门槛分区 本批净输资金 只算新增净输 不重复计算 预算拆分 平台 35% · 活动 15% 信号预算 50% AI 抽样 用信号预算 信号池展示 展示来源档位 信号预算返还 返还并清零 周期数据归零 回到 T0 留在当前档 标记本档已评 不重复抽样 继续打码升档 达到下一档 再回到档位队列 继续循环 选中回 T0,未中升更高档
1
用户开始玩刚开始打码量还小,先累计下注和输赢。
打码量 < 50
2
留在 T0 预热队列T0 不参与分钱,只等待用户继续打码。
达到 50,进入首档
3
进入 T1-T16 档位队列T1 是 50 ≤ 打码 < 120;继续打码会升到 T2、T3,最高到 T16。
本档评估:计算本批净输资金,拆出信号预算
4
AI 用信号预算抽样只从“信号预算”里给返还,不动平台留存和活动预算。
评估后只有两种结果
5A
命中信号进入 AI 信号池,展示来源档位和信号预算返还。
动画结束后
6A
清零回到 T0周期打码、周期净输和档位资格归零,重新开始下一轮。
5B
未命中信号留在当前档,标记已评估,不在同档重复抽样。
继续打码后
6B
升到下一档再评估达到 T2、T3 或更高档后,重新计算本批净输资金。

非技术版:6 步看懂怎么运作

这张图就是会议里最适合先讲的一页。少讲公式,多讲“人怎么走、净输资金怎么分、信号怎么发”。

主流程图
1
用户下注 产生打码量和输赢
2
进入档位队列 T0 到 T1-T16
3
形成净输资金 只看新增净输
4
拆成三份 平台、活动、信号
5
AI 发信号 资金来自信号预算
6
继续循环 中奖清零,未中升档
信号返还50%
活动预算15%
平台留存35%
关键点

净输资金不是无限发钱,而是从模拟积分的新增实际净输里拆出信号预算,再用这部分预算给信号返还。

非技术版:结果怎么看,优缺点是什么

这部分用来回答团队最关心的问题:用户会看到什么、平台得到什么、哪里有风险。

结论页
几分钟 用户看到反馈 用户不会一直干等,能看到 AI 信号正在工作。
T0-T16 等待有路径 没拿信号的人继续升档,期待感不会断。
可控 返还有预算 返还来自预算拆分,不是无上限补贴。
可查 结果能解释 每个信号来自哪个档位,送出多少,都能统计。

优点

1体验清楚:用户知道自己在等 AI 信号。
2节奏可控:前期快反馈,后期强反馈。
3成本可控:平台、活动、信号三份清楚。

注意点

1不能讲成真实预测,只能是模拟娱乐体验。
2净输资金不能重复计算,否则返还会虚高。
3信号太频繁会显得假,太慢又会流失。
技术版本:下面开始给研发、测试和数据同学看

技术版本:算法总览和关键口径

这里开始给研发、测试和数据同学看。重点是状态流转、预算口径、抽样口径和审计口径保持一致。

模拟积分 · 不提现 · 不兑换
用户做什么 下注、累计打码量、产生输赢。T0 是小于 50;T1 是 ≥50 且 <120;后续按相邻门槛进入唯一档位队列。
系统算什么 计算本周期实际净输,只把还没入账过的增量净输拿来做本批净输资金,避免重复记账。
预算怎么分 本批净输资金拆为平台留存、活动预算、信号预算。默认 35% / 15% / 50%,AI 发信号只使用信号预算。
信号怎么给 候选用户按保护权重随机抽样,进入信号池展示来源档位和信号预算返还,动画后清零回到 T0。

运行主流程:7 个节点讲完整个算法

从左到右看:先产生用户周期数据,再进入档位队列,再评估本批净输资金和预算,最后发信号或继续累积。

T0-T16 档位队列
1 用户下注

记录下注额、派彩、余额、连续输赢、累计总打码。

2 周期累计

周期打码量和周期净输增长,净输只取正值。

3 进入档位队列

T0 是小于首档;T1 是首档到下一档之间;后续按相邻门槛区间升档。

4 评估净输资金

筛出本档未评估候选用户,汇总新增实际净输。

5 预算拆分

平台留存、活动预算、信号返还分别累计展示。

6 AI 发信号

15%-25% 加权随机抽样,从信号预算中按幂函数奖励分布返还:多数小额,少数高额。

7 清零或升档

中信号进信号池后清零;未中留在当前档位队列,等达到下一档。

对象 没拿到信号 拿到信号
用户状态
留在当前档位展示为 Tn已评,不会重复参与本档抽样。
进入信号池卡片显示来源档位,例如 T3信号。
打码量
继续累积达到下一档后,从 Tn 移动到 Tn+1。
周期清零打码量、周期净输、档位资格全部归零。
净输资金
已入账部分记账accounted_net_loss 更新,后续只算新增净输。
返还后结束周期不会继续占用旧档位队列。
统计表
暂无信号记录总打码继续累计,来源档位不变。
历史落账用户信号数、来源档位、返还额、档位汇总同步增加。
用户只属于一个档位队列 同一时间不能同时在 T0、T1 和 T2。用户升档必须从旧队列移除。 pool_tier = 0 for T0, otherwise highest_reached_tier
本批净输资金不能重复算 T1 已经入账过的净输,到 T2 不再重复进入累计入账净输。 available = max(0, net_loss - accounted_net_loss)
信号是中间态 被选中用户先进入信号池展示动画,再清零回到 T0 预热队列。 tier_pool -> signal_pool -> reset_cycle -> T0
历史统计不随清零消失 清零只清周期字段,不清累计总打码、信号次数、返还总额。 reset cycle fields, keep lifetime stats

核心规则:团队沟通时必须保持一致的口径

这几条是最容易讲错、实现错、测试漏的地方。只要这些不变,页面、后端和数据报表就能对齐。

口径优先
规则 正确口径 错了会怎样
累计入账净输 每次评估时,把本批候选用户的新增实际净输累加到历史总额。 如果用完整周期净输,会在 T1、T2、T3 重复算出虚高资金。
本批净输资金 当前档位中,尚未参与本档评估用户的 available_net_loss 总和。 如果包含已评用户,会让同一档位反复分钱。
未中奖用户 留在当前档位队列,标记 Tn已评;达到下一档后迁移。 如果错误回到 T0,会让高打码用户看起来掉档。
中奖用户 先进入信号池,展示来源档位和返还;动画结束后周期清零。 如果直接消失,团队看不懂信号来自哪个档位。
RTP 按派彩分布真实期望归一化,92% RTP 长期杀率接近 8%。 如果直接按 0.92 缩放,会导致真实杀率异常偏高。
平台留存
35%
活动预算
15%
信号返还
50%
预算拆分公式
gross_pool = sum(available_net_loss)
platform = gross_pool * 0.35
activity = gross_pool * 0.15
signal_budget = gross_pool * 0.50

技术实现:拆成状态、队列、评估、结算四个模块

技术团队可以直接按这四块落后端服务、前端展示或模拟器逻辑。核心是事件驱动,所有可审计字段在评估时快照。

实现视图

1. UserState 用户状态

  • 周期字段:turnover、bet_total、payout_total、net_loss。
  • 档位队列字段:pool_tier、evaluated_tier、accounted_net_loss。
  • 保护字段:cooldown、missed_tiers、losing_streak、new_user_ticks。
  • 历史字段:total_turnover、signal_count、signal_return_total。

2. TierPool 档位队列

  • T1-T16 每档一个 Set 或队列表。
  • 用户升档时从旧队列删除,再加入新队列。
  • 只评估 pool_tier 等于当前档且 evaluated_tier 小于当前档的用户。
  • 队列展示和分钱计算使用同一份状态,避免口径分裂。

3. Evaluation 档位评估

  • 计算候选用户 available_net_loss。
  • gross_pool 太小则跳过。
  • 按 15%-25% 选出用户,保护用户权重更高。
  • 用幂函数奖励分布把 signal_budget 分给被选用户。

4. SignalPool 信号池

  • 被选用户从档位队列移出,进入信号池。
  • 保存 signal_source_tier,用于展示 Tn信号。
  • 动画期间不下注,不进入其他档位队列。
  • 动画结束后执行 reset_user_cycle。

5. Stats 统计落账

  • 发信号时写用户信号次数和返还总额。
  • 按来源档位写去重用户数、信号次数、送出积分。
  • 清零不清历史统计。
  • 统计表应能从事件日志重放恢复。

6. Audit 审计日志

  • 每次评估写 tier_id、candidate_count、selected_count。
  • 写 gross_pool、拆分金额、参数快照和随机种子。
  • 写 selected_user_ids、payouts、unselected_user_ids。
  • 用于排查为什么某用户拿到或没拿到信号。
后端主流程伪代码
on_user_round(user, bet, payout):
    if user.in_signal_pool:
        process_signal_animation(user)
        return

    update_cycle(user, bet, payout)
    reached_tier = highest_tier(user.cycle_turnover)
    if reached_tier > user.evaluated_tier:
        move_user_to_tier_pool(user, reached_tier)

evaluate_tier(tier):
    queued = users where pool_tier == tier and evaluated_tier < tier
    candidates = filter_eligible(queued)
    gross_pool = sum(max(0, net_loss - accounted_net_loss))
    if gross_pool < min_pool:
        return

    selected = weighted_sample(candidates, trigger_rate)
    payouts = allocate_by_power_reward_curve(selected, gross_pool * signal_share)

    for user in selected:
        enter_signal_pool(user, payouts[user], tier)
        write_stats(user, tier, payouts[user])

    for user in candidates - selected:
        user.evaluated_tier = tier
        user.accounted_net_loss = max(user.accounted_net_loss, user.net_loss)

    write_audit_log(tier, candidates, selected, gross_pool, payouts)

数据与审计:实现时至少要能查这三张表

测试、运营、技术排查问题时,最常用的问题是“为什么这个用户拿了信号”“这个档位发出去多少”“累计入账净输有没有重复算”。

可追溯
表 / 日志 关键字段 用途
user_cycle_state user_id, cycle_turnover, net_loss, accounted_net_loss, pool_tier, evaluated_tier, signal_source_tier 还原用户当前在哪个档位队列、是否已评估、还有多少新增净输可入账。
signal_pool_event event_id, user_id, source_tier, amount, band, entered_at, reset_at 还原信号动画和清零过程,确认来源档位展示正确。
tier_evaluation_log tier_id, candidate_count, gross_pool, platform, activity, signal_budget, selected_user_ids, random_seed 解释每一次档位评估、预算拆分和抽样结果。
user_signal_stats user_id, signal_count, signal_sources_by_tier, total_turnover, total_signal_return 按用户看累计拿到几次信号、来自哪些档位、被返还多少。
pool_signal_stats tier_id, unique_signal_user_count, signal_count, total_signal_amount 按档位看一共给几个用户发过信号、送出多少积分。

测试清单:测试同学按这些点验收

先测确定性,再测随机分布。单测保证口径不坏,集成测试保证档位队列流转正确,长跑测试保证 RTP、返还和统计没有漂移。

验收视图
单归属队列测试

构造用户从 T1 打到 T2,断言 T1 队列删除该用户、T2 队列新增该用户,页面不重复展示。

净输不重复测试

用户 T1 未中后 accounted_net_loss 更新;进入 T2 时只把新增净输计入 gross_pool。

信号池清零测试

中奖用户先显示在信号池,source_tier 正确;动画结束后周期字段清零,历史统计保留。

未中奖留队列测试

未中奖用户显示 Tn已评,不重复参与本档抽样;达到下一档后迁移到下一档。

预算拆分测试

固定 gross_pool,断言 platform、activity、signal_budget 比例正确,累计展示使用绝对值和相对比例。

RTP 长跑测试

设置 RTP=92%,大量模拟后实际派彩率应接近 92%,短期波动可接受,长期不应偏到 64%。

统计一致性测试

发 N 次信号后,用户表 signal_count 之和应等于档位表 signal_count 之和。

边界测试

无净输、低余额、新用户、冷却期、T16 深档、用户数很少、gross_pool 太小都要覆盖。

5 分钟讲解顺序:照这个讲,团队能对齐

适合开评审会时从上到下讲一遍,再跳到模拟器观察实时数据。

会议脚本
先定边界 这是模拟娱乐积分系统,积分不能提现、不能兑换;AI 是体验层,不宣称真实预测外部游戏。
再讲资金口径 系统只拿用户周期内的新增实际净输做净输资金,历史已入账部分不会重复计算。
讲档位流转 用户同一时间只属于一个档位队列;升档从旧队列移到新队列,中奖进入信号池,未中奖留在当前队列等待升档。
讲信号发放 系统按 15%-25% 抽样,保护用户权重更高;预算按幂函数奖励分布返还,信号卡片标明来源档位。
最后讲实现与测试 技术按状态、队列、评估、结算实现;测试按单归属、净输不重复、清零、RTP、统计一致性验收。