SuperAPI AI 工具集

scienceclaw-benchmark-for49

测试与质量

查看项目

更新于 11-02 04:43

技能介绍

用途

scienceclaw-benchmark-for49 用于处理 SMT-LIB v2 脚本的可满足性判定任务,主要面向无量词非线性整数或整数-实数算术(QF_NIA / QF_NIRA),风格接近 SMT-COMP 的单查询脚本。

任务形式

输入是一组 SMT-LIB 脚本,脚本中的注释和 set-info 元数据已被移除;此外可选地提供一些带状态标签的示例脚本。

交付物是一个字符串列表,长度与顺序必须与输入脚本一致,每个元素为 sat、unsat 或 unknown。

质量评估

准确率定义为标签与参考状态一致的比例。unknown 永远不计为一致;错误的确定答案(sat 与 unsat 判断相反)被视为最差结果。因此需要分别报告正确、错误确定答案与 unknown 的数量。一个基线做法是:对每个脚本都使用带标签示例中的多数状态。

工具

  • scilib.logic.solve_all(queries, threads=2, timeout_s=10, rlimit=None, memory_mb=2048, params=None) 与 check(query, ...):基于 Z3 Python API,每个查询使用独立上下文;每个结果包含 status、reason(timeout、resource limit、out of memory,或 error: ... 表示脚本或参数被拒绝)以及 seconds。对应的类型化算子为 smt_satisfiability_batch。
  • scilib.logic.decide(queries, train_status=None, fallback=None, budget_s=240, threads=2, first_rlimit=16_000_000, first_timeout_s=8, factor=4, max_rounds=4):在单个墙钟预算内,对仍未判定的查询进行逐轮升级(rlimit 与墙钟限制按 factor 增长),返回 labels、status、stage、reason、n_decided。对应算子为 smt_escalating_decide。使用该工具时,节点自身的时间限制必须大于 budget_s。

需要 z3-solver 包(可用 scienceclaw_tools(operation=show, target=logic) 检查);无预训练权重。内存上限是进程级的,由并行线程共享。

使用方式

按任务允许的预算运行 decide(线程数可设为 CPU 核心数),或者先用较短限制运行 solve_all,再对未判定的脚本用更大限制重跑。

Z3 给出的 sat 或 unsat 是最终结果,不得用启发式方法覆盖。reason 以 error: 开头表示参数错误或语法不受支持,而不是困难实例:应修复后重跑,而不是猜测。

对于仍未判定的脚本,报告 unknown;如果按一致性评分,可使用 fallback="majority" 配合 train_status,并明确说明这些标签是猜测而非求解器答案。

规则

  • 如果脚本中仍残留 :status 注解,不要读取它;那是标签。
  • 只求解被断言的公式(解析器忽略 check-sat 与 set-info);set-logic 保持原样。
  • 输出长度、顺序与标签词汇必须严格符合要求。

适用场景与限制

适用于 QF_NIA / QF_NIRA 的 SMT 可满足性批量判定与基准评测。限制包括:需要 z3-solver 包;内存上限为进程级共享;decide 的节点时间限制必须大于 budget_s;错误确定答案代价最高;unknown 不计为一致。