← 返回博客

Arena 竞技:优化适应度分数

高级教程:提交基因到 Arena,分析 F(g) 和 V(g) 评分,迭代优化性能,攀升排名。

Arena 是基因证明自身价值的地方。每个提交到 Arena 的基因都会收到一个适应度分数(F(g))和一个安全分数(V(g)) — 这两个指标决定了它的排名、生存和你的开发者声誉。

本教程将带你提交一个基因、理解它的评分、迭代改进它,并观察它攀升排名。

前置条件

第一步:提交到 Arena

提交一个基因。如果还没有,创建一个 JSON 格式化器:

Terminal window
mkdir -p genes/json-fmt && cat > genes/json-fmt/index.ts << 'EOF'
export async function express(input: { code: string; indent?: number }) {
const indent = input.indent ?? 2;
try {
const parsed = JSON.parse(input.code);
return { formatted: JSON.stringify(parsed, null, indent), valid: true };
} catch {
return { formatted: input.code, valid: false };
}
}
EOF
rotifer wrap json-fmt --domain code.format
rotifer compile json-fmt

提交:

Terminal window
rotifer arena submit json-fmt
Testing 'json-fmt' before submission...
✓ All tests passed
Submitting to Arena...
✓ Gene 'json-fmt' submitted
Rank: #2 in code.format
F(g): 0.7834
V(g): 0.9100
Fidelity: Native

第二步:理解评分

F(g) — 适应度分数

适应度函数将多个因素组合成一个 0.0–1.0 的分数:

因素权重衡量内容
正确性0.30输出是否匹配预期 schema?
性能0.25执行时间和资源效率
可靠性0.20多次运行的一致性
保真度奖励0.15Native > Hybrid > Wrapped
多样性0.10频率依赖选择(稀有领域获得奖励)

V(g) — 安全分数

安全验证是一个硬性门控,独立的 0.0–1.0 分数:

检查项说明
L0 约束无文件系统、无网络(除非 Hybrid)、无 eval
Schema 合规输入/输出匹配声明的表型
资源限制燃料计量在范围内
IR 完整性WASM 自定义 section 完好

准入门控

两个分数都必须超过阈值才能进入 Arena:

如果任一不通过,基因被拒绝,并附带诊断反馈。

第三步:诊断低分原因

你的基因得到了 F(g) = 0.7834。看看为什么没有更高。检查详细分解:

Terminal window
rotifer arena submit json-fmt --verbose
Fitness Breakdown:
Correctness: 0.92 ✓ 所有 schema 验证通过
Performance: 0.58 ⚠ 平均执行:12ms(目标:<5ms)
Reliability: 0.95 ✓ 19/20 次运行一致
Fidelity: 0.70 Native WASM
Diversity: 0.45 code.format 有 3 个竞争者
F(g) = 0.7834
V(g) = 0.9100

瓶颈在于性能(0.58)。基因平均耗时 12ms — Arena 期望在 5ms 以内。

第四步:优化性能

JSON 格式化器使用 JSON.parse + JSON.stringify 没问题,但我们可以优化热路径:

export async function express(input: { code: string; indent?: number }) {
const indent = input.indent ?? 2;
const code = input.code.trim();
// 快速路径:已格式化或为空
if (!code || code === '{}' || code === '[]') {
return { formatted: code, valid: code.length > 0 };
}
try {
const parsed = JSON.parse(code);
return { formatted: JSON.stringify(parsed, null, indent), valid: true };
} catch {
return { formatted: code, valid: false };
}
}

重新编译并提交:

Terminal window
rotifer compile json-fmt
rotifer arena submit json-fmt
Fitness Breakdown:
Correctness: 0.92
Performance: 0.75 ↑ 平均执行:6ms
Reliability: 0.95
Fidelity: 0.70
Diversity: 0.45
F(g) = 0.8234 ↑ (+0.04)

更好了 — 性能从 0.58 提升到 0.75。

第五步:提升正确性

正确性分数是 0.92 — 还不完美。通常意味着边缘情况未处理。增加健壮性:

export async function express(input: { code: string; indent?: number }) {
const indent = input.indent ?? 2;
const code = (input.code ?? '').trim();
if (!code) {
return { formatted: '', valid: false };
}
try {
const parsed = JSON.parse(code);
return { formatted: JSON.stringify(parsed, null, indent), valid: true };
} catch {
// 尝试修复:去除尾逗号(常见错误)
try {
const cleaned = code.replace(/,\s*([\]}])/g, '$1');
const parsed = JSON.parse(cleaned);
return { formatted: JSON.stringify(parsed, null, indent), valid: true };
} catch {
return { formatted: code, valid: false };
}
}
}
Terminal window
rotifer compile json-fmt
rotifer arena submit json-fmt
Correctness: 0.98 ↑ 边缘情况已处理
Performance: 0.74
Reliability: 0.97 ↑
F(g) = 0.8567 ↑ (+0.033)

第六步:观察排名

实时监控基因排名:

Terminal window
rotifer arena watch code.format
Watching code.format rankings...
[14:32:01] json-fmt ↑ #2 → #1 (F: 0.82 → 0.86)
[14:32:04] No changes
[14:32:07] No changes
Press Ctrl+C to stop

第七步:进军全球 Cloud Arena

本地 Arena 适合测试。要参加全球竞争:

Terminal window
rotifer login
rotifer arena submit json-fmt --cloud
✓ Submitted to Cloud Arena
Rank: #8 globally in code.format

查看全球排名:

Terminal window
rotifer arena list --cloud -d code.format

第八步:查看你的声誉

每次 Arena 提交都会影响你的开发者声誉:

Terminal window
rotifer reputation --mine
Developer Reputation:
Arena Score: 0.82 (基于基因排名)
Usage Score: 0.45 (基于安装次数)
Stability: 0.91 (基于基因一致性)
Overall: 0.73

声誉是你的基因 Arena 表现、被他人使用频率和长期可靠性的综合评分。

优化循环

核心要点是迭代改进循环:

  1. 提交 → 获取 F(g) 分解
  2. 诊断 → 找到最弱因素
  3. 改进 → 针对性代码修改
  4. 重新提交 → 验证改进
  5. 观察 → 监控竞争位置

这就是生物进化的实际运作 — Arena 创造选择压力,你的基因进行适应。

高适应度技巧


深入阅读: 参见基因标准规范了解完整适应度模型,Arena CLI 参考了解所有命令选项。