docs(process): three sets through one rule bot, three rounds through one agent
The rule-bot table carries the third set now, which is the point of having a rule bot at all: a full 50-level acceptance pass takes one second, so every selection change can be checked against the previous one before any agent time is spent. Blind rotations 0.24 → 0.12 → 0.14, worst streak 4 → 1 → 1, dead taps zero throughout. The band table shows all three rounds side by side, each against the levels it actually played. Round 3 is reported as what it is: an unconfirmed hypothesis. It raised contrast and held rotation depth, and the back band's rating did not follow. On a rating that retests at 0.55 that settles nothing either way, so the page says the two are indistinguishable and names the design reasons the third set is the one being handed over — rather than quoting whichever number makes the last change look good. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+11
-3
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"goal": "调出 50 关难度合适、好玩的关卡,交付人工审核",
|
||||
"updated": "09-14 16:45",
|
||||
"round": 2,
|
||||
"round": 3,
|
||||
"definition": {
|
||||
"title": "「难度合适且好玩」的操作定义",
|
||||
"why": "旋转是免费的、是这个游戏的特色,玩家应该频繁做——所以不该限制旋转次数。该限制的是每一次旋转值不值:转了有没有棋子出来、能不能看出来该转哪、以及转完之后有没有「原来这么简单」的反差。评分里只有 difficulty(复测 r=0.93)和 stuck(r=0.85)可信,rotation / clarity / fun 是噪声(0.32 / 0.19 / 0.56),所以「好玩」全部换成机械代理。 另外,演出本身就是奖励——棋子沿弯路走出去的那几秒是减压点,所以开局必须有得看,而不是只有两枚贴边棋子和 0.3 秒。",
|
||||
@@ -196,8 +196,8 @@
|
||||
{
|
||||
"id": "T3.4",
|
||||
"title": "收敛判定(难度曲线单调、stuck 达标)",
|
||||
"status": "doing",
|
||||
"note": "机械面已收敛:空点 0、不可解态 0、连续空转≤1、终局朝向≥3。难度未达标:后档 2.40 vs 目标 3。瓶颈是深关卡供给(见 T1.6),正在扫第二批种子。注意逐关评分复测 r=0.55 且同轨迹会打出不同分,只有按档≈20 局才可读"
|
||||
"status": "done",
|
||||
"note": "收敛判定完成。机械面:空点 0、不可解态 0、连续空转≤1、终局朝向≥3、三轮全部通关。难度面:三档 2.00 / 2.05 / 2.17,单调但后档低于「刚刚好」的 3 分——上限由深关卡供给决定(见 T1.6),且这项评分复测 r=0.55,本身不足以再往下调。剩下的交人工审核"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -263,6 +263,14 @@
|
||||
{
|
||||
"at": "供给瓶颈",
|
||||
"text": "扩池两轮共 720 种子、1113 候选,深度≥4 的过闸门后只有 23 个(2%)。种子翻倍只让深关卡从 16 涨到 23,说明 growDeepLevel 难以造出需要四转以上的关卡——这是后档难度的硬上限"
|
||||
},
|
||||
{
|
||||
"at": "R3 结果",
|
||||
"text": "第三轮只改一个变量:桶内按反差取关。后档反差 27.9→28.5、旋转深度不变,后档评分 2.39→2.17。以 r=0.55 的复测可信度,十几关上的这点差距分不出胜负——记为「未证实」,第三版保留的理由是设计面的(反差是策划点名的好玩机制)与家族均衡(两家族 30/50 → 26/50)"
|
||||
},
|
||||
{
|
||||
"at": "一个差点报错的对照",
|
||||
"text": "levels/campaign-50-r2.json 本应是 R2 玩的那一版,实际只含 28 个 R2 盘面、46 个 R3 盘面——select-50 原地覆盖同一路径,中间跑过的选关实验把它换掉了。改为从 run 反建(run 自带完整盘面与序号),并删掉该快照"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -98,10 +98,10 @@ footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--rule);color:v
|
||||
<header class="head">
|
||||
<div class="eyebrow">HEX TRAILS · 关卡调优</div>
|
||||
<h1>调出 50 关难度合适、好玩的关卡,交付人工审核</h1>
|
||||
<p class="meta mono">第 2 轮 · 更新于 09-14 16:45 · 本页每 60 秒自动刷新</p>
|
||||
<p class="meta mono">第 3 轮 · 更新于 09-14 16:45 · 本页每 60 秒自动刷新</p>
|
||||
<div class="progress">
|
||||
<div class="bar"><i style="width:86%"></i></div>
|
||||
<div class="lbl"><span>18 / 21 项完成</span><span class="mono">86%</span></div>
|
||||
<div class="bar"><i style="width:90%"></i></div>
|
||||
<div class="lbl"><span>19 / 21 项完成</span><span class="mono">90%</span></div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@@ -184,7 +184,7 @@ footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--rule);color:v
|
||||
<li class="done"><div class="t"><span class="tid">T3.1</span><span class="tt">第 1 轮:grok 全量跑 50 关</span><span class="tag good">完成</span></div><div class="note">50 关全部跑完;机械面干净:空点 0、盲转 ~0.3/关、全部通关。总体读数:整批偏易一档(2 分 vs 刚好的 3 分)</div></li>
|
||||
<li class="done"><div class="t"><span class="tid">T3.2</span><span class="tt">按实测曲线调整选关,重选</span><span class="tag good">完成</span></div><div class="note">连续空转设闸门(≤1)+ 难度曲线改为按旋转深度配额。同一规则机器人对照:盲转 0.24→0.12,最长连续盲转 4→1,决策数不变</div></li>
|
||||
<li class="done"><div class="t"><span class="tid">T3.3</span><span class="tt">第 2 轮验证</span><span class="tag good">完成</span></div><div class="note">R2:99 局覆盖 50 关,全部通关,空点 0。难度按档 2.00 / 2.05 / 2.40,无解感 1.21 / 1.15 / 1.74 —— 评分第一次出现梯度</div></li>
|
||||
<li class="doing"><div class="t"><span class="tid">T3.4</span><span class="tt">收敛判定(难度曲线单调、stuck 达标)</span><span class="tag live">进行中</span></div><div class="note">机械面已收敛:空点 0、不可解态 0、连续空转≤1、终局朝向≥3。难度未达标:后档 2.40 vs 目标 3。瓶颈是深关卡供给(见 T1.6),正在扫第二批种子。注意逐关评分复测 r=0.55 且同轨迹会打出不同分,只有按档≈20 局才可读</div></li>
|
||||
<li class="done"><div class="t"><span class="tid">T3.4</span><span class="tt">收敛判定(难度曲线单调、stuck 达标)</span><span class="tag good">完成</span></div><div class="note">收敛判定完成。机械面:空点 0、不可解态 0、连续空转≤1、终局朝向≥3、三轮全部通关。难度面:三档 2.00 / 2.05 / 2.17,单调但后档低于「刚刚好」的 3 分——上限由深关卡供给决定(见 T1.6),且这项评分复测 r=0.55,本身不足以再往下调。剩下的交人工审核</div></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -205,7 +205,7 @@ footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--rule);color:v
|
||||
<thead><tr><th>批次</th><th class="n">关数</th><th class="n">difficulty</th><th class="n">stuck</th><th class="n">盲转/关</th><th class="n">多转/关</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>R2 · grok xhigh</td><td class="n">100</td><td class="n">2.16</td><td class="n">1.37</td><td class="n">0.12</td><td class="n">0.24</td></tr>
|
||||
<tr><td>R3 · grok xhigh</td><td class="n">50</td><td class="n">2.08</td><td class="n">1.32</td><td class="n">0.14</td><td class="n">0.26</td></tr>
|
||||
<tr><td>R3 · grok xhigh</td><td class="n">53</td><td class="n">2.08</td><td class="n">1.32</td><td class="n">0.13</td><td class="n">0.25</td></tr>
|
||||
<tr><td>R1 · grok xhigh</td><td class="n">50</td><td class="n">2.10</td><td class="n">1.44</td><td class="n">0.24</td><td class="n">0.38</td></tr>
|
||||
<tr><td>Codex CLI · gpt-6-astra low</td><td class="n">18</td><td class="n">2.44</td><td class="n">1.44</td><td class="n">1.17</td><td class="n">1.22</td></tr>
|
||||
<tr><td>Codex CLI · spark xhigh</td><td class="n">18</td><td class="n">3.11</td><td class="n">2.28</td><td class="n">1.17</td><td class="n">1.17</td></tr>
|
||||
@@ -221,6 +221,8 @@ footer{margin-top:56px;padding-top:20px;border-top:1px solid var(--rule);color:v
|
||||
|
||||
<h2><span class="num">F</span>日志</h2>
|
||||
<ul class="log">
|
||||
<li><b>一个差点报错的对照</b>levels/campaign-50-r2.json 本应是 R2 玩的那一版,实际只含 28 个 R2 盘面、46 个 R3 盘面——select-50 原地覆盖同一路径,中间跑过的选关实验把它换掉了。改为从 run 反建(run 自带完整盘面与序号),并删掉该快照</li>
|
||||
<li><b>R3 结果</b>第三轮只改一个变量:桶内按反差取关。后档反差 27.9→28.5、旋转深度不变,后档评分 2.39→2.17。以 r=0.55 的复测可信度,十几关上的这点差距分不出胜负——记为「未证实」,第三版保留的理由是设计面的(反差是策划点名的好玩机制)与家族均衡(两家族 30/50 → 26/50)</li>
|
||||
<li><b>供给瓶颈</b>扩池两轮共 720 种子、1113 候选,深度≥4 的过闸门后只有 23 个(2%)。种子翻倍只让深关卡从 16 涨到 23,说明 growDeepLevel 难以造出需要四转以上的关卡——这是后档难度的硬上限</li>
|
||||
<li><b>R2 结果</b>难度评分按档 2.00/2.05/2.40(R1 是三档全平),无解感 1.21/1.15/1.74。意外把每关跑了两次,得到 45 对复测:84% 重放了完全相同的动作序列,机械指标 r=1.00,难度评分 r=0.55——且评分分歧的那几对全是同轨迹。结论:agent 近乎确定性,同一关不必跑两遍</li>
|
||||
<li><b>R2 依据</b>后段 14 条抱怨里两类:路线太长(感知,已对照 v0.5 基线否掉)与「转了没反应」(机械,可设闸门)。只改后者:endgameMinOpen 2→3、doubleDead 无闸门→≤2。两条合计只留 16% 候选,所以先扩池</li>
|
||||
|
||||
@@ -72,17 +72,15 @@ a{color:var(--rail)}
|
||||
<h2>两轮之间改了什么,效果如何</h2>
|
||||
<p>第一轮唯一可用的读数是「整批偏易」,加上抱怨里反复出现的「转了没反应」。据此只改了两件事:给<b>连续空转</b>设闸门(最多一次转动没反应,此前有 11 关能连着两次),以及把难度曲线<b>写成旋转深度的配额</b>而不是指望它从排序里自己长出来。第三轮又只改了一件:桶内改按<b>反差</b>取。每轮一个变量,才看得出是哪个变量起的作用。</p>
|
||||
<table>
|
||||
<thead><tr><th>同一个规则机器人,两套关卡集</th><th class="n">第一版</th><th class="n">第二版</th></tr></thead>
|
||||
<thead><tr><th>同一个规则机器人,三套关卡集</th><th class="n">第一版</th><th class="n">第二版</th><th class="n">第三版</th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
<tr><td>盲转 / 关</td><td class="n">0.24</td><td class="n yes">0.12</td></tr>
|
||||
<tr><td>最长连续盲转</td><td class="n">4</td><td class="n yes">1</td></tr>
|
||||
<tr><td>空点 / 关</td><td class="n">0.00</td><td class="n">0.00</td></tr>
|
||||
<tr><td>决策 / 关(要做的事)</td><td class="n">10.3</td><td class="n">10.3</td></tr>
|
||||
|
||||
<tr><td>盲转 / 关</td><td class="n ">0.24</td><td class="n yes">0.12</td><td class="n yes">0.14</td></tr>
|
||||
<tr><td>最长连续盲转</td><td class="n ">4</td><td class="n yes">1</td><td class="n yes">1</td></tr>
|
||||
<tr><td>空点 / 关</td><td class="n ">0.00</td><td class="n ">0.00</td><td class="n ">0.00</td></tr>
|
||||
<tr><td>决策 / 关(要做的事)</td><td class="n ">10.3</td><td class="n ">10.3</td><td class="n ">9.8</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>要做的事一样多,浪费掉的动作少了一半。这是同一个玩家的对照,所以变的是关卡不是模型的心情。</p>
|
||||
<p>要做的事一样多,浪费掉的动作少了一半,而且第三版保住了这个成绩。这是同一个玩家的对照,所以变的是关卡不是模型的心情——一次 50 关的全量验收 1 秒跑完,这也是为什么全量验收该交给它而不是 agent。</p>
|
||||
<table>
|
||||
<thead><tr><th>grok 实测,按档(每关计一次,与它自己玩的那一版对齐)</th><th class="n" colspan="2">R1</th><th class="n" colspan="2">R2</th><th class="n" colspan="2">R3</th></tr>
|
||||
<tr><th></th><th class="n">难度</th><th class="n">无解感</th><th class="n">难度</th><th class="n">无解感</th><th class="n">难度</th><th class="n">无解感</th></tr></thead>
|
||||
|
||||
@@ -108,7 +108,7 @@ const BOT = tag => { const v = bot(tag); return v.length ? {
|
||||
n: v.length, blind: mean(v.map(r => r.m.blindRotations ?? 0)), dead: mean(v.map(r => r.m.deadTaps ?? 0)),
|
||||
streak: Math.max(...v.map(r => r.m.longestBlindStreak ?? 0)), dec: mean(v.map(r => r.m.decisions ?? 0)),
|
||||
} : null; };
|
||||
const botOld = BOT('r1bot-'), botNew = BOT('r2bot-');
|
||||
const BOTS = [['第一版', BOT('r1bot-')], ['第二版', BOT('r2bot-')], ['第三版', BOT('r3bot-')]].filter(([, v]) => v);
|
||||
|
||||
// The rules, each with the observation that forced it. A rule without one is a
|
||||
// preference, and preferences do not belong in a process document.
|
||||
@@ -209,17 +209,19 @@ a{color:var(--rail)}
|
||||
<h2>两轮之间改了什么,效果如何</h2>
|
||||
<p>第一轮唯一可用的读数是「整批偏易」,加上抱怨里反复出现的「转了没反应」。据此只改了两件事:给<b>连续空转</b>设闸门(最多一次转动没反应,此前有 11 关能连着两次),以及把难度曲线<b>写成旋转深度的配额</b>而不是指望它从排序里自己长出来。第三轮又只改了一件:桶内改按<b>反差</b>取。每轮一个变量,才看得出是哪个变量起的作用。</p>
|
||||
<table>
|
||||
<thead><tr><th>同一个规则机器人,两套关卡集</th><th class="n">第一版</th><th class="n">第二版</th></tr></thead>
|
||||
<thead><tr><th>同一个规则机器人,三套关卡集</th>${BOTS.map(([n]) => `<th class="n">${n}</th>`).join('')}</tr></thead>
|
||||
<tbody>
|
||||
${botOld && botNew ? `
|
||||
<tr><td>盲转 / 关</td><td class="n">${f2(botOld.blind)}</td><td class="n yes">${f2(botNew.blind)}</td></tr>
|
||||
<tr><td>最长连续盲转</td><td class="n">${botOld.streak}</td><td class="n yes">${botNew.streak}</td></tr>
|
||||
<tr><td>空点 / 关</td><td class="n">${f2(botOld.dead)}</td><td class="n">${f2(botNew.dead)}</td></tr>
|
||||
<tr><td>决策 / 关(要做的事)</td><td class="n">${f1(botOld.dec)}</td><td class="n">${f1(botNew.dec)}</td></tr>
|
||||
` : '<tr><td colspan="3">规则机器人数据缺失</td></tr>'}
|
||||
${BOTS.length ? [
|
||||
['盲转 / 关', v => f2(v.blind), true],
|
||||
['最长连续盲转', v => String(v.streak), true],
|
||||
['空点 / 关', v => f2(v.dead), false],
|
||||
['决策 / 关(要做的事)', v => f1(v.dec), false],
|
||||
].map(([label, get, better]) => `<tr><td>${label}</td>${BOTS.map(([, v], i) =>
|
||||
`<td class="n ${better && i > 0 && get(v) < get(BOTS[0][1]) ? 'yes' : ''}">${get(v)}</td>`).join('')}</tr>`).join('\n')
|
||||
: '<tr><td colspan="4">规则机器人数据缺失</td></tr>'}
|
||||
</tbody>
|
||||
</table>
|
||||
<p>要做的事一样多,浪费掉的动作少了一半。这是同一个玩家的对照,所以变的是关卡不是模型的心情。</p>
|
||||
<p>要做的事一样多,浪费掉的动作少了一半,而且第三版保住了这个成绩。这是同一个玩家的对照,所以变的是关卡不是模型的心情——一次 50 关的全量验收 1 秒跑完,这也是为什么全量验收该交给它而不是 agent。</p>
|
||||
<table>
|
||||
<thead><tr><th>grok 实测,按档(每关计一次,与它自己玩的那一版对齐)</th>${present.map(id => `<th class="n" colspan="2">${id}</th>`).join('')}</tr>
|
||||
<tr><th></th>${present.map(() => '<th class="n">难度</th><th class="n">无解感</th>').join('')}</tr></thead>
|
||||
|
||||
Reference in New Issue
Block a user