双色球娱乐特征分析(ssq-entertainment-analysis)
触发场景
用户说"下载最近 N 期双色球分析特点 / 按期望算红球冷热号 / 统计温号 / 列符合最高概率的号码 / 出一个双色球娱乐号码",即调用本技能。
纯娱乐、理性购彩:不承诺中奖、不带单、不荐号收费,报告内含"头奖概率恒为 1/17,721,088"提示。
与大乐透技能的关系
算法骨架移植自 dlt-entertainment-analysis(同一作者、同一数据源 huiniao API),但针对双色球规则改造:
- 红球 33 选 6(01-33)、蓝球 16 选 1(01-16);头奖概率 1/(C(33,6)×16) = 1/17,721,088。
- 数据源字段布局与大乐透完全相同(one~six = 6 个红球,seven = 1 个蓝球),仅 type=ssq。
- combine 改为每期动态计算各特征众数作为约束(而非硬编码),并带自动松弛;蓝球为单球。
数据源
- API:
https://api.huiniao.top/interface/home/lotteryHistory?type=ssq&page=1&limit={n}(降序,首页即最新 N 期)。 - 字段映射:
period=code、date=day、red=[one..six]、blue=[seven]。 - 缓存:
ssq_recent{N}.json(ensure_data()优先读缓存,避免重复联网、保证确定性)。
特征定义(逐期计算)
红球(6 个, 01-33):奇偶比、大小比(≤16 小 / ≥17 大)、三区(01-11 / 12-22 / 23-33)、012 路(%3 计数)、连号组数(排序后相邻差=1 对数)、质数个数({2,3,5,7,11,13,17,19,23,29,31})、和值(6 数和)、跨度(max−min)、重号个数(与上一期红球交集)。
蓝球(1 个, 01-16):奇偶、大小(≤8 小 / ≥9 大)、012 路。
期望与温号分档(标准差法,默认)
- 红球每号期望 = N×6/33(50 期≈9.09);SD≈√(N·6/33·27/33)≈2.73 → 温号默认 6~12 次。
- 蓝球每号期望 = N×1/16(50 期≈3.13);SD≈√(N·1/16·15/16)≈1.71 → 温号默认 1~5 次。
- 冷/温/热为启发式标签(±1SD 的规矩切法),非定律;CLI 可调
--red-warm LO HI/--blue-warm LO HI。
组合枚举 combine —— 动态算"最高概率组合"
- 每次运行先从当前窗口数据计算各特征众数(奇偶比、大小比、三区分布、012 路分布、连号组数、质数个数、和值最频繁 10 宽区间、跨度最频繁值、重号个数、蓝球奇偶/大小/012 路)。
- 数值型特征以众数±1 带为基准(即"最可能区间",如奇数个数 = 众数 或 众数±1),分类特征(三区分布、012 路)要求精确等于众数;蓝球为单球,需同时满足奇偶/大小/012 路三条。
- 从温号池枚举 C(n,6) 红球 + 蓝候选,逐条过滤(early-reject)。自动松弛阶梯(保证最终有解,并在报告中标注被放宽项):
- 基准:精确(众数±1带) → 跨度±5 → 跨度±15 → 跨度不限 → 和值±10 → 和值不限
- → 三区放宽 → 012 路放宽 → 连号/质数/重号放宽至±2 → 最小内核(仅保留奇偶比+大小比±2) → 兜底(仅温号池任取)
- 蓝球特殊处理:单球难同时满足 3 条精确约束,若严格筛选为空则自动放宽取全部温号蓝球(不会因此阻断枚举)。 - 重号冲突:不带
--remove-last用完整温号池(重号带含众数);带--remove-last剔除上期号(重号带整体下移)。两者都从温号池枚举。 - 结果上限:单批最多输出 2000 注(HARD_CAP 防止兜底阶段全组合拖垮内存),reports 标注命中阶段。
CLI
python ssq_skill.py download -n 50
python ssq_skill.py features -n 50
python ssq_skill.py expect -n 50 --red-warm 6 12 --blue-warm 1 5
python ssq_skill.py combine -n 50 [--remove-last] [--red-warm 6 12] [--blue-warm 1 5]
输出写当前工作目录:双色球特点分析_{N}期.html、双色球冷热榜_{N}期.html、组合_{N}期.txt / .html。仅用 Python 标准库。
实现要点
- HTML 用 token 替换(
__ROWS__等字符串.replace),不用.format()/%,规避{}/%%转义坑(已踩过)。 - SVG 图表函数(
bar_chart/dist_chart)内部用%格式化,其内width="100%%"必须双写%(这是%运算符语境,非模板)。 - 结果确定性与窗口绑定:计算部分无随机(穷举+过滤);变与不变的开关是"抓取窗口是否因新开奖平移"。复用同一份
ssq_recent{N}.json可保证两次结果一致。 - 诚实边界:期望值是真概率(二项分布均值);冷/温/热分界线与"最高概率组合"均为历史画像/启发式,不改变真实中奖率。