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>
This commit is contained in:
Vendored
+580
@@ -0,0 +1,580 @@
|
||||
{
|
||||
"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 的原值分位数。作者自评三个数是示意输入。"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user