Files
iomgaa 60c21ae346 feat: 研究规则 rules 模块(任务书 02)
rules 是纯计算,src/rules 共 1761 行:方法.md 第六部分的全部公式、第七部分的余额与扣次、4.2 的入口分配,以及种子与规则登记表。

预期值有三个来源:方法.md 的手算例;tests/fixtures/rules/ 下不看实现写的 Python 脚本;参考项目 calc15、calc14b 里与现行方法一致的部分。审阅做了两轮,每轮都换一个全新上下文的子 Agent,提出的问题都已修复或写明不修的理由。

用户确认的约定(原话"1–8 都同意"):入池、采纳、消融中发现都用严格不等号;成本用 max(0, ĝ₀);没测的格附"含它的最好组合"的净值;战绩在分数原值上判。三个数改为严格递增后,删掉了尖峰的全部专门处理(bfb96ba)。vocab 里 Range 的说明同步改为严格递增。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 01:50:21 -04:00

581 lines
12 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"generator": "gen_forward_info.py",
"tolerance": {
"abs": 1e-12,
"bits": 1e-10,
"surprise": "1e-12 + 2^-50 / (p * ln 2)",
"note": "abs 用于事前把握、覆盖率、作者乐观差等普通数值。bits 用于世界比特和分歧量:本脚本按有理数算出每格质量后用浮点求熵(fsum),浮点实现每格质量是两个浮点 F 值之差,约 2 万到 5 万个小格累加后末位误差积到 1e-12 量级(第二轮审阅实测最大差 3.5e-12),留约 30 倍余量取 1e-10。surprise 是惊讶的容差公式:本脚本的 p 是有理数精确差,浮点实现只能算 F(右端) − F(左端),两个不超过 1 的浮点数相减已有几个 2⁻⁵³ 的绝对误差,p 很小时(如 2.5e-6)换成 −log₂p 就放大成约 1e-12 量级的差。状态、格号、落点、计数必须完全相同。"
},
"scenarios": [
{
"name": "bits_forward_r1_real",
"section": "6.9;约定 31–33",
"params": {
"eps": 0.01,
"lambda": 0.1,
"delta": 0.0001,
"direction": "maximize"
},
"input": {
"b": 0.9597642169962064,
"candidates": {
"r1-v1-c1": [
{
"researcher": "researcher-1",
"range": {
"q1": 2.0,
"q5": 2.45,
"q9": 2.6
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 2.2,
"q5": 2.5,
"q9": 2.62
}
},
{
"researcher": "researcher-3",
"range": {
"q1": 2.2,
"q5": 2.5,
"q9": 2.63
}
}
],
"r1-v1-c2": [
{
"researcher": "researcher-1",
"range": {
"q1": 1.85,
"q5": 2.35,
"q9": 2.6
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 1.6,
"q5": 2.35,
"q9": 2.6
}
},
{
"researcher": "researcher-3",
"range": {
"q1": 1.8,
"q5": 2.4,
"q9": 2.62
}
}
],
"r1-v1-c3": [
{
"researcher": "researcher-1",
"range": {
"q1": 2.3,
"q5": 2.5,
"q9": 2.62
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 2.42,
"q5": 2.52,
"q9": 2.6
}
},
{
"researcher": "researcher-3",
"range": {
"q1": 2.1,
"q5": 2.5,
"q9": 2.6
}
}
]
},
"actual": {
"r1-v1-c3": 1.552176048093269
},
"farValue": 10.0
},
"expected": {
"candidates": {
"r1-v1-c1": {
"worldBits": 13.424994765554958
},
"r1-v1-c2": {
"worldBits": 14.07304207309006
},
"r1-v1-c3": {
"worldBits": 13.018692667257758,
"surprise": {
"status": "ok",
"bin": 5924,
"p": 2.499999999999725e-06,
"surprise": 18.609640474436972
}
}
},
"surpriseFarValue": {
"status": "priorZero",
"bin": 90402,
"p": 0.0
},
"disagreementC3": {
"disagreement": 0.22345314430460128,
"avgBits": 12.401558575360262,
"eachBits": [
12.319392171330211,
11.527004851853361,
12.68791926998341
]
}
},
"note": "原值上从 b 起切 Δ=ε/100 的小格,合并分布 = 三人折线 0.9 + 共同预留 0.1。c3 的实测 1.552176 远低于各人范围,只落在预留里。farValue=10 在预留之外,事前把握为 0,状态 priorZero(不是 0 或无穷大)。分歧量只用三人折线(不掺预留)。"
},
{
"name": "bits_ablation_cell_r1_p1",
"section": "6.9;约定 31–33",
"params": {
"eps": 0.01,
"lambda": 0.1,
"delta": 0.0001
},
"input": {
"b": 0.9597642169962064,
"explanations": [
{
"id": "r1-e1-1",
"author": "researcher-1",
"range": {
"q1": 1.2,
"q5": 2,
"q9": 2.44
}
},
{
"id": "r1-e1-2",
"author": "researcher-1",
"range": {
"q1": 1.22,
"q5": 1.4,
"q9": 1.52
}
},
{
"id": "r1-e2-1",
"author": "researcher-2",
"range": {
"q1": 1.05,
"q5": 1.35,
"q9": 1.95
}
},
{
"id": "r1-e2-2",
"author": "researcher-2",
"range": {
"q1": 0.95,
"q5": 1.3,
"q9": 2.1
}
},
{
"id": "r1-e3-1",
"author": "researcher-3",
"range": {
"q1": 1.15,
"q5": 1.36,
"q9": 1.55
}
},
{
"id": "r1-e3-2",
"author": "researcher-3",
"range": {
"q1": 1.2,
"q5": 1.42,
"q9": 2.46
}
}
],
"actual": 2.250011787062861
},
"expected": {
"worldBits": 14.423852532506046,
"surprise": {
"status": "ok",
"bin": 12902,
"p": 2.5393497631454448e-05,
"surprise": 15.265181352865099
},
"disagreement": 0.17487769063959568,
"avgBits": 13.988099142237102,
"eachPersonBits": [
13.828510269170529,
14.016547746252732,
13.594606339369257
]
},
"note": "消融格的合并分布 = 6 条解释(每条 0.15)+ 这一格的预留 0.1。分歧量:每人取自己几条解释的等权平均作为'这个人的折线',再比较三人平均的比特与各人比特的平均(不掺预留)。"
},
{
"name": "bits_minimize_bin_edges",
"section": "6.9;约定 31–32",
"params": {
"eps": 0.01,
"lambda": 0.1,
"delta": 0.0001,
"direction": "minimize"
},
"input": {
"b": 0.4,
"candidates": {
"c1": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.36,
"q5": 0.38,
"q9": 0.4
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 0.35,
"q5": 0.37,
"q9": 0.39
}
}
],
"c2": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.33,
"q5": 0.36,
"q9": 0.41
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 0.37,
"q5": 0.39,
"q9": 0.42
}
}
],
"c3": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.41,
"q5": 0.43,
"q9": 0.46
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 0.4,
"q5": 0.42,
"q9": 0.45
}
}
],
"c4": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.37,
"q5": 0.39,
"q9": 0.4
}
},
{
"researcher": "researcher-2",
"range": {
"q1": 0.38,
"q5": 0.395,
"q9": 0.41
}
}
]
},
"candidate": "c1",
"values": [
0.3999,
0.39990000000000003,
0.4,
0.38,
0.38005
]
},
"expected": {
"worldBits": 10.045467864639367,
"surprise": [
{
"status": "ok",
"bin": -2,
"p": 0.0011513157894735564,
"surprise": 9.762500686273503
},
{
"status": "ok",
"bin": -1,
"p": 0.0011513157894735564,
"surprise": 9.762500686273503
},
{
"status": "ok",
"bin": 0,
"p": 0.0004763157894736314,
"surprise": 11.03579400590999
},
{
"status": "ok",
"bin": -200,
"p": 0.0018263157894734814,
"surprise": 9.096848040414935
},
{
"status": "ok",
"bin": -200,
"p": 0.0018263157894734814,
"surprise": 9.096848040414935
}
],
"edgeMinus1": 0.39990000000000003
},
"note": "越小越好也在分数原值上从 b 起切,第 j 格 [b+jΔ, b+(j+1)Δ),j 可为负。边界一律按浮点 b + j*Δ 算:b+(-1)Δ = 0.39990000000000003,所以字面 0.3999 落在 j=-2 格,而值正好等于该边界时落在 j=-1 格。合并分布是越小越好的那套(四候选共同预留,在原值上等价于原值折线的最低/最高点)。"
},
{
"name": "landing_segments_endpoints",
"section": "6.9;约定 34",
"params": {},
"input": {
"cases": [
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.4
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.44
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.5
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.52
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.6
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.62
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.65
}
]
},
"expected": {
"segments": [
"below10",
"from10to50",
"from10to50",
"from50to90",
"from50to90",
"from50to90",
"above90"
],
"coverage": 0.7142857142857143
},
"note": "v<q1 below10;q1≤v<q5 from10to50;q5≤v≤q9 from50to90;v>q9 above90。端点:v=q1 归一成到一半,v=q5 和 v=q9 归一半到九成。覆盖率 = 落在 [q1,q9](含端点)的比例 = 5/7。"
},
{
"name": "coverage_no_samples",
"section": "6.9;约定 34",
"params": {},
"input": {
"cases": []
},
"expected": {
"coverage": {
"status": "noSamples"
}
},
"note": "没有样本时返回明确状态,不是 0 或 NaN。"
},
{
"name": "track_record_counts",
"section": "6.10 第 4 条;约定 37",
"params": {},
"input": {
"forward": [
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.52
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.62
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.7
}
],
"ablation": [
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.44
},
{
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"value": 2.3
},
{
"range": {
"q1": 0.99,
"q5": 1.0,
"q9": 1.01
},
"value": 1.0
}
]
},
"expected": {
"forward": {
"medianHigh": 0,
"medianLow": 2,
"pierceUpper": 1,
"pierceLower": 0,
"covered": 2
},
"ablation": {
"medianHigh": 2,
"medianLow": 0,
"pierceUpper": 0,
"pierceLower": 1,
"covered": 2
}
},
"note": "分数原值、不按方向。q5>v 中位数偏高;q5<v 偏低;v>q9 穿上沿;v<q1 穿下沿;q1≤v≤q9 包住。v=q5 既不偏高也不偏低;v=q9 算包住、不算穿上沿;窄范围 (0.99,1,1.01) 实测 1 只算包住。正向与消融分开数。"
},
{
"name": "author_vs_merged",
"section": "6.10 第 4 条;约定 37",
"params": {
"direction": "maximize"
},
"input": {
"items": [
{
"candidate": "r1-v1-c3",
"author": {
"q1": 2.1,
"q5": 2.5,
"q9": 2.6
},
"merged": {
"q1": 2.1289473684210525,
"q5": 2.5022627737226277,
"q9": 2.6276315789473683
},
"value": 1.552176048093269,
"ran": true
},
{
"candidate": "r1-v1-c1",
"author": {
"q1": 2.2,
"q5": 2.5,
"q9": 2.63
},
"merged": {
"q1": 1.9871428571428573,
"q5": 2.4653846153846155,
"q9": 2.6470027247956405
},
"value": null,
"ran": false
}
]
},
"expected": {
"rows": [
{
"candidate": "r1-v1-c3",
"q5Diff": -0.002262773722627731,
"authorSegment": "below10",
"mergedSegment": "below10"
}
]
},
"note": "只收跑过且有有效成绩的候选(c1 没跑,不进)。q5Diff = 按方向的 作者q5 − 合并q5(>0 作者更乐观)。合并范围取 forward.json 里 forward_merge_r1_real 的原值分位数。作者自评三个数是示意输入。"
}
]
}