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

1659 lines
30 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,
"note": "预期值由有理数精确算出;与浮点实现比较用绝对误差 1e-12。"
},
"scenarios": [
{
"name": "cdf_method_example_2.44_2.52_2.62",
"section": "6.2;约定 1–4",
"params": {},
"input": {
"range": {
"q1": 2.44,
"q5": 2.52,
"q9": 2.62
},
"x": [
2.3,
2.36,
2.4,
2.44,
2.48,
2.52,
2.57,
2.62,
2.67,
2.72,
2.8
],
"densityAt": [
2.3,
2.36,
2.4,
2.44,
2.48,
2.52,
2.57,
2.62,
2.67,
2.72,
2.8
]
},
"expected": {
"points": [
[
2.36,
0.0
],
[
2.44,
0.1
],
[
2.52,
0.5
],
[
2.62,
0.9
],
[
2.72,
1.0
]
],
"cdf": [
0.0,
0.0,
0.05,
0.1,
0.3,
0.5,
0.6999999999999991,
0.9,
0.9499999999999997,
1.0,
1.0
],
"density": [
0.0,
1.249999999999999,
1.249999999999999,
4.999999999999996,
4.999999999999996,
3.9999999999999964,
3.9999999999999964,
0.9999999999999991,
0.9999999999999991,
0.0,
0.0
],
"mean": 2.527
},
"note": "方法 6.2 示例:低于 2.57 的把握 0.70;尾巴 2.36–2.44、2.62–2.72。"
},
{
"name": "cdf_asymmetric_narrow",
"section": "6.2;约定 1–4",
"params": {},
"input": {
"range": {
"q1": 1.2999,
"q5": 1.3,
"q9": 1.3005
},
"x": [
1.2997,
1.2998,
1.29995,
1.3,
1.3002,
1.3005,
1.30075,
1.301
],
"densityAt": [
1.2997,
1.2998,
1.29995,
1.3,
1.3002,
1.3005,
1.30075,
1.301
]
},
"expected": {
"points": [
[
1.2998,
0.0
],
[
1.2999,
0.1
],
[
1.3,
0.5
],
[
1.3005,
0.9
],
[
1.301,
1.0
]
],
"cdf": [
0.0,
0.0,
0.2999999999995559,
0.5,
0.66,
0.9,
0.9500000000000222,
1.0
],
"density": [
0.0,
1000.0000000001102,
4000.0000000004407,
800.0000000000881,
800.0000000000881,
200.00000000002203,
200.00000000002203,
0.0
],
"mean": 1.30014
},
"note": "方法第五部分的窄范围写法(不对称):低端尾巴 1.2998–1.2999,高端尾巴 1.3005–1.3010。折点上密度取右边那段。"
},
{
"name": "minimize_to_improvement",
"section": "6.1;约定 5",
"params": {
"direction": "minimize"
},
"input": {
"b": 0.4,
"range": {
"q1": 0.3,
"q5": 0.35,
"q9": 0.45
},
"y": [
-0.2,
-0.05,
0.0,
0.05,
0.08,
0.1,
0.25
]
},
"expected": {
"Yrange": {
"q1": -0.04999999999999999,
"q5": 0.050000000000000044,
"q9": 0.10000000000000003
},
"Ypoints": [
[
-0.15000000000000002,
0.0
],
[
-0.04999999999999999,
0.1
],
[
0.050000000000000044,
0.5
],
[
0.10000000000000003,
0.9
],
[
0.15000000000000002,
1.0
]
],
"Ycdf": [
0.0,
0.09999999999999999,
0.2999999999999999,
0.49999999999999983,
0.7399999999999997,
0.8999999999999998,
1.0
]
},
"note": "Y = b − 分数,一成九成对调:Y 的三个数 = (b−q9, b−q5, b−q1) = (−0.05, 0.05, 0.10);低端尾巴宽 = 原 q9−q5 = 0.10,高端尾巴宽 = 原 q5−q1 = 0.05。"
},
{
"name": "forward_merge_r1_real",
"section": "6.3、6.1;约定 6–8",
"params": {
"lambda": 0.1,
"direction": "maximize",
"eps": 0.01
},
"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
}
}
]
},
"Yprobe": [
-1.0,
-0.01,
0.0,
0.5,
1.0,
1.4,
1.5,
1.6,
1.7,
2.0
]
},
"expected": {
"reserveY": [
-1.1097642169962063,
2.890235783003794
],
"reserveRaw": [
-0.1499999999999999,
3.85
],
"candidates": {
"r1-v1-c1": {
"Ycdf": [
0.002744105424905158,
0.02749410542490516,
0.027744105424905158,
0.04024410542490516,
0.09201456329056014,
0.3764926035541918,
0.4908668526188352,
0.7204866655530365,
0.909006668533861,
0.9777441054249052
],
"Yquantiles": {
"q1": 1.027378640146651,
"q5": 1.505620398388409,
"q9": 1.6872385077994339
},
"rawQuantiles": {
"q1": 1.9871428571428573,
"q5": 2.4653846153846155,
"q9": 2.6470027247956405
},
"Ymean": 1.3919857830037936
},
"r1-v1-c2": {
"Ycdf": [
0.002744105424905158,
0.03148467410475341,
0.03213467410475341,
0.0842087379743361,
0.258602635622629,
0.5140705971405044,
0.6532164175573758,
0.8062618721028304,
0.9000099107307501,
0.9777441054249052
],
"Yquantiles": {
"q1": 0.5902357830037936,
"q5": 1.3862357830037937,
"q9": 1.6999753073526045
},
"rawQuantiles": {
"q1": 1.55,
"q5": 2.346,
"q9": 2.659739524348811
},
"Ymean": 1.2365857830037936
},
"r1-v1-c3": {
"Ycdf": [
0.002744105424905158,
0.02749410542490516,
0.027744105424905158,
0.04024410542490516,
0.07222642169962064,
0.24846116582035283,
0.40674896111693865,
0.708871708310869,
0.9305260061463959,
0.9777441054249052
],
"Yquantiles": {
"q1": 1.169183151424846,
"q5": 1.5424985567264213,
"q9": 1.6678673619511621
},
"rawQuantiles": {
"q1": 2.1289473684210525,
"q5": 2.5022627737226277,
"q9": 2.6276315789473683
},
"Ymean": 1.4392357830037936
}
}
},
"note": "真实第 1 轮三候选×三人(每人一份,等权)。开放预留取三候选九条折线(含尾巴)的最低首点和最高末点。合并分位数在改进量上用广义逆 inf{y: P(Y≤y) ≥ p} 求,再加回 b。"
},
{
"name": "forward_merge_minimize",
"section": "6.3、6.1;约定 6–8",
"params": {
"lambda": 0.1,
"direction": "minimize",
"eps": 0.01
},
"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
}
}
]
},
"Yprobe": [
-0.1,
-0.02,
-0.01,
0.0,
0.01,
0.02,
0.05
]
},
"expected": {
"reserveY": [
-0.18500000000000003,
0.19499999999999998
],
"reserveRaw": [
0.20500000000000004,
0.5850000000000001
],
"candidates": {
"c1": {
"Ycdf": [
0.022368421052631586,
0.04342105263157899,
0.06855263157894742,
0.11618421052631579,
0.2313157894736841,
0.41394736842105234,
0.8943421052631574
],
"Yquantiles": {
"q1": -0.0033977900552486233,
"q5": 0.024711815561959675,
"q9": 0.05118784530386745
},
"rawQuantiles": {
"q1": 0.3488121546961326,
"q5": 0.37528818443804035,
"q9": 0.4033977900552487
},
"Ymean": 0.023000000000000017
},
"c2": {
"Ycdf": [
0.022368421052631586,
0.12442105263157885,
0.19605263157894717,
0.29468421052631555,
0.393315789473684,
0.5219473684210524,
0.7968421052631577
],
"Yquantiles": {
"q1": -0.02916996047430826,
"q5": 0.01829378068739773,
"q9": 0.06647058823529413
},
"rawQuantiles": {
"q1": 0.3335294117647059,
"q5": 0.3817062193126023,
"q9": 0.4291699604743083
},
"Ymean": 0.01827500000000002
},
"c3": {
"Ycdf": [
0.022368421052631586,
0.5834210526315784,
0.7660526315789468,
0.8811842105263157,
0.9288157894736842,
0.9539473684210527,
0.9618421052631579
],
"Yquantiles": {
"q1": -0.06241935483870968,
"q5": -0.025465517241379278,
"q9": 0.003950276243093946
},
"rawQuantiles": {
"q1": 0.39604972375690606,
"q5": 0.4254655172413793,
"q9": 0.4624193548387097
},
"Ymean": -0.025149999999999985
},
"c4": {
"Ycdf": [
0.022368421052631586,
0.05842105263157873,
0.09105263157894727,
0.25868421052631557,
0.561315789473684,
0.7739473684210523,
0.9618421052631578
],
"Yquantiles": {
"q1": -0.009466248037676579,
"q5": 0.007973913043478267,
"q9": 0.030620525059665896
},
"rawQuantiles": {
"q1": 0.36937947494033413,
"q5": 0.39202608695652175,
"q9": 0.4094662480376766
},
"Ymean": 0.008825000000000013
}
}
},
"note": "越小越好:逐人换成 Y = b − 分数再合并;原值分位数 = b − Y 的分位数,一成九成对调。"
},
{
"name": "ablation_cell_merge_r1_p1",
"section": "6.3、6.7 成分与权重;约定 6–8、24",
"params": {
"lambda": 0.1
},
"input": {
"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
}
}
],
"x": [
0.5,
1.0,
1.3,
1.5,
2.0,
2.5,
3.0
]
},
"expected": {
"reserve": [
-1.1500000000000001,
5.05
],
"weights": [
0.15,
0.15,
0.15,
0.15,
0.15,
0.15,
0.1
],
"cdf": [
0.028487903225806455,
0.08764819857561795,
0.34381266582879494,
0.584067846415045,
0.7980179900744416,
0.9227433453643131,
0.9597239454094293
],
"quantiles": {
"q1": 1.031197878433162,
"q5": 1.4262310909924365,
"q9": 2.3794554469188443
}
},
"note": "真实第 1 轮消融 p1 格(关掉 p1)。三人各两条解释:每条 0.9/3/2 = 0.15,预留 0.1(权重最后一项)。开放预留只看这一格六条折线。分位数在原值上求。"
},
{
"name": "quantile_flat_left_end",
"section": "约定 8",
"params": {},
"input": {
"mixture": [
{
"weight": 0.5,
"range": {
"q1": 0.99,
"q5": 1.0,
"q9": 1.01
}
},
{
"weight": 0.5,
"range": {
"q1": 1.99,
"q5": 2.0,
"q9": 2.01
}
}
],
"p": [
0.1,
0.5,
0.9
]
},
"expected": {
"quantiles": [
0.9924999999999999,
1.02,
2.0075
]
},
"note": "两条窄折线各占一半,中间 [1.02, 1.98] 把握走平在 0.5:一半取平段左端 1.02;一成落在第一条的[0.99, 1.0] 段里(第一条自己的 0.2 分位),九成落在第二条的 [2.0, 2.01] 段里。"
},
{
"name": "pool_r1_real",
"section": "6.4 入池;约定 9",
"params": {
"eps": 0.01,
"lambda": 0.1,
"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
}
}
]
}
},
"expected": {
"r1-v1-c1": {
"probBelowMinusEps": 0.02749410542490516,
"inPool": true
},
"r1-v1-c2": {
"probBelowMinusEps": 0.03148467410475341,
"inPool": true
},
"r1-v1-c3": {
"probBelowMinusEps": 0.02749410542490516,
"inPool": true
}
},
"note": "真实第 1 轮:三个候选都远高于 b,都入池。"
},
{
"name": "pool_minimize",
"section": "6.4 入池;约定 9",
"params": {
"eps": 0.01,
"lambda": 0.1,
"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
}
}
]
}
},
"expected": {
"c1": {
"probBelowMinusEps": 0.06855263157894742,
"inPool": true
},
"c2": {
"probBelowMinusEps": 0.19605263157894717,
"inPool": true
},
"c3": {
"probBelowMinusEps": 0.7660526315789468,
"inPool": false
},
"c4": {
"probBelowMinusEps": 0.09105263157894727,
"inPool": true
}
},
"note": "越小越好:P(Y < −ε) = P(分数 > b+ε)。c3 的大部分把握在 0.41 以上,不入池。"
},
{
"name": "pool_exactly_half",
"section": "6.4 入池;约定 9",
"params": {
"eps": 0.25,
"lambda": 0.1,
"direction": "maximize"
},
"input": {
"b": 1.0,
"cases": [
{
"candidates": {
"c1": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.5,
"q5": 0.75,
"q9": 1.0
}
}
]
}
},
{
"candidates": {
"c1": [
{
"researcher": "researcher-1",
"range": {
"q1": 0.5,
"q5": 0.7509765625,
"q9": 1.0
}
}
]
}
}
]
},
"expected": {
"cases": [
{
"probBelowMinusEps": 0.5,
"inPool": false
},
{
"probBelowMinusEps": 0.49864804991488326,
"inPool": true
}
]
},
"note": "第一例:Y 三个数 (−0.5,−0.25,0),预留 [−1.25,0.75],都以 −ε=−0.25 为中点,P(Y<−ε) = 0.9×0.5+0.1×0.5 = 0.5(浮点下也正好 0.5),不严格小于一半,不入池。第二例把 q5 往上挪 2⁻¹⁰,把握略小于 0.5,入池。ε 取 0.25 是为了全部是二进制精确数。"
},
{
"name": "V_method_example_X_Y",
"section": "6.4 批内最好期望",
"params": {},
"input": {
"Ymixtures": {
"X": [
{
"weight": 0.5,
"range": {
"q1": -0.001,
"q5": 0.0,
"q9": 0.001
}
},
{
"weight": 0.5,
"range": {
"q1": 0.019,
"q5": 0.02,
"q9": 0.021
}
}
],
"Y": [
{
"weight": 1,
"range": {
"q1": 0.009,
"q5": 0.01,
"q9": 0.011
}
}
]
}
},
"expected": {
"V": {
"X": 0.010175,
"Y": 0.01,
"X,Y": 0.015
}
},
"note": "方法示例换成窄范围(三个数严格递增):X 一半在 0 附近、一半在 0.02 附近;Y 在 0.01 附近。输入是改进量上的混合(每个成分一个三个数)。V(X) ≈ 0.010175(0 附近那一半有一点低于 0、被截成 0),V(Y) ≈ 0.01,V(X,Y) ≈ 0.015。"
},
{
"name": "batch_r1_real_k2",
"section": "6.4 选批、分数尺读数;约定 10–14",
"params": {
"eps": 0.01,
"lambda": 0.1,
"direction": "maximize",
"batchCap": 2
},
"input": {
"b": 0.9597642169962064,
"balance": 100,
"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
}
}
]
}
},
"expected": {
"pool": [
"r1-v1-c1",
"r1-v1-c2",
"r1-v1-c3"
],
"k": 2,
"combos": [
{
"combo": [
"r1-v1-c1",
"r1-v1-c2"
],
"V": 1.563610390779633
},
{
"combo": [
"r1-v1-c1",
"r1-v1-c3"
],
"V": 1.606671885433043
},
{
"combo": [
"r1-v1-c2",
"r1-v1-c3"
],
"V": 1.5843489675642095
}
],
"selected": [
"r1-v1-c1",
"r1-v1-c3"
],
"selectedV": 1.606671885433043,
"poolAllV": 1.6614292532574937,
"rulerReading": 0.0547573678244507
},
"note": "真实第 1 轮,每批上限 2:三选二,列出三个组合的 V。分数尺读数 = E[max(0, max_池 Y)] − V(S*)。"
},
{
"name": "batch_minimize_out_of_pool",
"section": "6.4 选批、分数尺读数;约定 10–14",
"params": {
"eps": 0.01,
"lambda": 0.1,
"direction": "minimize",
"batchCap": 2
},
"input": {
"b": 0.4,
"balance": 100,
"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
}
}
]
}
},
"expected": {
"pool": [
"c1",
"c2",
"c4"
],
"k": 2,
"combos": [
{
"combo": [
"c1",
"c2"
],
"V": 0.042511208189058194
},
{
"combo": [
"c1",
"c4"
],
"V": 0.03455455687326872
},
{
"combo": [
"c2",
"c4"
],
"V": 0.03528487545879503
}
],
"selected": [
"c1",
"c2"
],
"selectedV": 0.042511208189058194,
"poolAllV": 0.04700708419008786,
"rulerReading": 0.004495876001029669
},
"note": "越小越好,c3 在池外:只在池内 {c1,c2,c4} 里选二;分数尺读数只按池内候选算(约定 13),池外的 c3 不进。"
},
{
"name": "batch_tie_by_id",
"section": "6.4 选批、分数尺读数;约定 10–14",
"params": {
"eps": 0.01,
"lambda": 0.1,
"direction": "maximize",
"batchCap": 1
},
"input": {
"b": 2.45,
"balance": 100,
"candidates": {
"c2": [
{
"researcher": "researcher-1",
"range": {
"q1": 2.4,
"q5": 2.5,
"q9": 2.6
}
}
],
"c10": [
{
"researcher": "researcher-1",
"range": {
"q1": 2.4,
"q5": 2.5,
"q9": 2.6
}
}
]
}
},
"expected": {
"pool": [
"c2",
"c10"
],
"k": 1,
"combos": [
{
"combo": [
"c2"
],
"V": 0.07115624999999991
},
{
"combo": [
"c10"
],
"V": 0.07115624999999991
}
],
"selected": [
"c2"
],
"selectedV": 0.07115624999999991,
"poolAllV": 0.11286726562499991,
"rulerReading": 0.041711015624999986
},
"note": "两个候选的范围完全相同,V 完全相等;按编号的自然序,c2 排在 c10 前面,选 c2。"
},
{
"name": "batch_uniform_random_minimize",
"section": "第十一部分 均匀随机;约定 12–14",
"params": {
"eps": 0.01,
"lambda": 0.1,
"direction": "minimize",
"batchCap": 2
},
"input": {
"b": 0.4,
"balance": 100,
"seed": "b05ff00c97f5436a04ba877196edf1e1dc5a25ede85acd190ec55eb4647a45e3",
"seedFrom": {
"studyId": "uniform-batch",
"round": 1,
"version": 1
},
"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
}
}
]
}
},
"expected": {
"pool": [
"c1",
"c2",
"c4"
],
"k": 2,
"selected": [
"c1",
"c3"
],
"selectedV": 0.03193200753116345,
"poolAllV": 0.04700708419008786,
"rulerReading": 0.015075076658924408
},
"note": "越小越好四候选,c3 在池外。均匀随机从全部四个候选里抽两个(编号按 JS 字符串序排好再做部分 Fisher–Yates),这个种子抽中了池外的 c3。selectedV = V(S*);分数尺读数 = V(候选池 c1,c2,c4) − V(S*)。不列组合。"
},
{
"name": "adoption_line_cases",
"section": "6.5;约定 15",
"params": {
"eps": 0.01
},
"input": {
"cases": [
{
"B": 2.6,
"knownBest": null,
"direction": "maximize",
"note": "没有已知最好:ε"
},
{
"B": 2.6,
"knownBest": 2.635983,
"direction": "maximize",
"note": "正常:min(0.01, 0.035983/4=0.00899575)"
},
{
"B": 2.6359,
"knownBest": 2.635983,
"direction": "maximize",
"note": "下限:(K*−B)/4 < ε/100,取 ε/100 = 0.0001"
},
{
"B": 2.64,
"knownBest": 2.635983,
"direction": "maximize",
"note": "B 超过 K*:取 ε/100"
},
{
"B": 2.5,
"knownBest": 2.635983,
"direction": "maximize",
"note": "差距大:取上限 ε"
},
{
"B": 0.4,
"knownBest": 0.38,
"direction": "minimize",
"note": "越小越好:(B−K*)/4 = 0.005"
},
{
"B": 0.37,
"knownBest": 0.38,
"direction": "minimize",
"note": "越小越好、B 已比 K* 好:ε/100"
}
]
},
"expected": {
"lines": [
0.01,
0.008995749999999969,
0.0001,
0.0001,
0.01,
0.0050000000000000044,
0.0001
]
},
"note": "逐例对应 input.cases。"
},
{
"name": "adoption_decision_cases",
"section": "6.5;约定 16",
"params": {
"eps": 0.01
},
"input": {
"cases": [
{
"B": 2.6,
"knownBest": 2.635983,
"direction": "maximize",
"results": {
"c1": 2.605,
"c2": 2.6185,
"c3": null
}
},
{
"B": 2.6,
"knownBest": null,
"direction": "maximize",
"results": {
"c1": 2.61,
"c2": 2.605
}
},
{
"B": 2.6,
"knownBest": null,
"direction": "maximize",
"results": {
"c1": 2.6125,
"c2": 2.6125
}
},
{
"B": 0.4,
"knownBest": null,
"direction": "minimize",
"results": {
"c1": 0.385,
"c2": 0.395
}
}
]
},
"expected": {
"cases": [
{
"line": 0.008995749999999969,
"best": "c2",
"gain": 0.01849999999999996,
"adopt": true
},
{
"line": 0.01,
"best": "c1",
"gain": 0.009999999999999787,
"adopt": false
},
{
"line": 0.01,
"best": "c1",
"gain": 0.012499999999999734,
"adopt": true
},
{
"line": 0.01,
"best": "c1",
"gain": 0.015000000000000013,
"adopt": true
}
]
},
"note": "改进量 > 采纳线(严格)才采纳;同分取编号小的。第二例是'正好高 ε':浮点输入 2.61、2.60 的精确差 = 0.009999999999999787(浮点减法 2.61-2.6 也是这个数),不大于 0.01,不采纳。"
}
]
}