Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions benchmarks/AssessmentEngineering/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# AssessmentEngineering

This domain contains lightweight, deterministic, and fully offline benchmark tasks inspired by
psychometrics and operational assessment design.

The tasks translate real assessment requirements—measurement precision, content coverage,
administration time, fairness risk, item exposure, and test security—into reproducible engineering
optimization problems with explicit feasibility constraints.

## Task

- `RobustTestAssembly`: assemble a fixed-length test form from a synthetic item bank while matching
exact domain quotas, respecting time, DIF-risk, exposure, and shared-material constraints, and
optimizing measurement information across multiple ability levels.
11 changes: 11 additions & 0 deletions benchmarks/AssessmentEngineering/README_zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# AssessmentEngineering(测评工程)

本领域包含轻量、确定性且完全离线的测评工程 benchmark,设计灵感来自心理测量和正式测验开发。

这些任务将测量精度、内容覆盖、作答时间、公平性风险、题目曝光和测验安全等现实要求,
转化为具有明确可行约束、能够稳定复现的工程优化问题。

## 任务

- `RobustTestAssembly`:从合成题库中组建固定长度的测验,精确满足各领域题量要求,
遵守时间、DIF 风险、题目曝光和共享材料冲突限制,并优化多个能力水平上的测量信息。
30 changes: 30 additions & 0 deletions benchmarks/AssessmentEngineering/RobustTestAssembly/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# RobustTestAssembly

This is a fully offline and deterministic benchmark for psychometric test assembly.

The candidate selects a fixed number of items from a synthetic item bank while satisfying domain quotas, time limits, DIF-risk limits, exposure limits, and shared-material constraints. It should also improve measurement information across multiple ability levels.

## Benchmark ID

`AssessmentEngineering/RobustTestAssembly`

## Local evaluation

Run from the task directory:

`python verification/evaluator.py scripts/init.py`

The initial program should score 50 and remain feasible in all 10 scenarios.

Run the complete test suite with:

`python verification/test_task_v1.py`

## Runtime requirements

- Linux
- Python 3.10 or newer
- Python standard library only
- No GPU, network access, external data, or API key required

All item banks and risk indicators are synthetic. This benchmark evaluates optimization and constraint handling; it does not validate the fairness, validity, or clinical use of a real assessment.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# RobustTestAssembly(稳健心理测验组卷)

这是一个完全离线、可重复运行的心理测量组卷 benchmark。

候选程序需要从合成题库中选择固定数量的题目,同时满足领域配额、作答时间、DIF 风险、题目曝光和材料冲突等限制,并尽可能提高不同能力水平上的测量信息。

## Benchmark ID

`AssessmentEngineering/RobustTestAssembly`

## 本地评测

在任务目录运行:

`python verification/evaluator.py scripts/init.py`

初始程序应得到 50 分,并在 10 个场景中全部合法。

完整自检命令:

`python verification/test_task_v1.py`

## 运行环境

- Linux
- Python 3.10 及以上
- 只使用 Python 标准库
- 不需要 GPU、网络、外部数据或 API Key

所有题库和风险指标均为合成数据。本任务评测组卷优化和约束处理能力,不代表真实测验已经具有效度、公平性或临床价值。
68 changes: 68 additions & 0 deletions benchmarks/AssessmentEngineering/RobustTestAssembly/Task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Task: Robust Psychometric Test Assembly

## Background

Operational test assembly must balance measurement quality with content coverage, administration time, fairness risk, item exposure, and test security.

The candidate selects 24 items from a synthetic bank of 80 items while satisfying every hard constraint and improving information across several ability levels.

## Input

The problem JSON contains the required test length, exact domain quotas, ability points and weights, operational limits, and the candidate item bank.

Each item includes an integer ID, domain, content strand, completion time, discrimination, difficulty, synthetic DIF risk, exposure, and an optional enemy group.

Scenario names, random seeds, and feedback labels are removed before the problem is passed to the candidate.

## Output

The candidate must write a JSON object containing an integer list named `selected_ids`.

Example: `{"selected_ids": [1, 2, 3]}`

## Hard constraints

1. Select exactly `test_length` items.
2. Use only known item IDs and do not repeat an ID.
3. Match every value in `domain_targets` exactly.
4. Do not exceed `max_items_per_enemy_group`.
5. Do not exceed `max_total_time`.
6. Do not exceed `max_mean_dif`.
7. Do not exceed `max_mean_exposure`.
8. Finish within the evaluator time limit.

## Measurement information

The benchmark uses a simplified two-parameter logistic model.

`P(theta) = 1 / (1 + exp(-a * (theta - b)))`

`I(theta) = a^2 * P(theta) * (1 - P(theta))`

The evaluator computes the mean selected-item information at four ability points.

## Scoring

The raw objective combines weighted information, worst-point information, profile balance, DIF quality, exposure quality, time efficiency, and content-strand coverage.

The frozen initial solution defines 50 points in every scenario. Better solutions score above 50 and worse solutions score below 50.

The final robust score is 75 percent mean scenario score and 25 percent twentieth-percentile scenario score.

If any scenario violates a hard constraint, the formal combined score is zero. A diagnostic score is still returned.

## Scenarios

The evaluator contains six development scenarios and four validation scenarios.

Scenarios vary domain quotas, ability-profile weights, time limits, DIF limits, and exposure limits. Fixed seeds make every run reproducible.

## Runtime

The candidate must be deterministic, self-contained, and offline. Each scenario has a 10-second candidate timeout.

The benchmark uses only the Python standard library and requires no GPU, external dataset, network access, or API key.

## Scope

All item banks and risk indicators are synthetic. The benchmark evaluates optimization and constraint handling; it does not validate the reliability, validity, fairness, clinical utility, or legal compliance of a real assessment.
127 changes: 127 additions & 0 deletions benchmarks/AssessmentEngineering/RobustTestAssembly/Task_zh-CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# 任务:稳健心理测验组卷

## 任务背景

正式测验组卷不能只挑选单项质量最高的题目,还必须同时考虑内容覆盖、作答时间、公平性风险、题目曝光和材料重复等现实限制。

本任务要求候选程序从一份包含 80 道合成题目的题库中,选择 24 道题组成测验。算法需要在满足全部硬性约束的前提下,提高测验在多个能力水平上的测量信息。

## 输入数据

候选程序会收到一个 JSON 格式的问题文件,主要包含:

- `test_length`:需要选择的题目总数;
- `domain_targets`:记忆、推理、注意和执行功能四个领域的题量要求;
- `theta_points`:需要考察的能力水平;
- `theta_weights`:不同能力水平在当前场景中的重要程度;
- `max_total_time`:允许的总作答时间;
- `max_mean_dif`:允许的平均 DIF 风险上限;
- `max_mean_exposure`:允许的平均题目曝光上限;
- `max_items_per_enemy_group`:同一材料冲突组最多可选择的题目数;
- `items`:候选题目列表。

每道题包含题号、所属领域、内容类别、作答时间、区分度、难度、DIF 风险、曝光率和材料冲突组等属性。

场景名称、随机种子和反馈类型不会提供给候选程序,避免算法直接记忆固定答案。

## 候选程序输出

候选程序通过 `--problem` 读取问题文件,通过 `--output` 写出答案文件。

答案必须是一个 JSON 对象,其中 `selected_ids` 是由整数题号组成的列表。例如:

`{"selected_ids": [1, 2, 3]}`

实际列表长度必须等于场景中的 `test_length`。

## 硬性约束

一份组卷方案必须同时满足以下要求:

1. 选择题数必须等于 `test_length`;
2. 所有题号都必须真实存在;
3. 同一道题不能重复选择;
4. 四个领域的题量必须与 `domain_targets` 完全一致;
5. 同一 `enemy_group` 中的入选题数不能超过允许上限;
6. 总作答时间不能超过 `max_total_time`;
7. 平均 DIF 风险不能超过 `max_mean_dif`;
8. 平均曝光率不能超过 `max_mean_exposure`;
9. 候选程序必须在评分器规定的时间内结束。

## 测量信息计算

任务使用简化的二参数逻辑模型计算题目信息量。

对于能力水平 `theta`,题目答对概率为:

`P(theta) = 1 / (1 + exp(-a * (theta - b)))`

其中 `a` 是题目区分度,`b` 是题目难度。

题目在该能力水平上的信息量为:

`I(theta) = a^2 * P(theta) * (1 - P(theta))`

评分器会计算所有入选题目在四个能力水平上的平均信息量,形成整份测验的信息曲线。

## 评分方法

合法方案的原始目标由以下部分加权组成:

- 50%:按照 `theta_weights` 计算的加权测量信息;
- 22%:四个能力水平中最低的测量信息;
- 8%:信息曲线的均衡程度;
- 8%:平均 DIF 风险质量;
- 5%:平均曝光率质量;
- 3%:剩余作答时间效率;
- 4%:内容细分类别覆盖率。

每个场景都使用冻结的初始方案作为 50 分参照线。候选方案优于参照方案时得分高于 50,低于参照方案时得分低于 50。

十个场景的最终稳健得分由两部分组成:

- 75%:所有场景的平均分;
- 25%:场景分数的第 20 百分位。

第 20 百分位用于惩罚只在部分场景表现良好、但在其他场景明显退化的算法。

如果任意一个场景违反硬性约束,正式总分归零;评分器仍会返回诊断分,帮助定位问题。

## 场景与泛化

评分器包含 10 个固定且可复现的场景:

- 6 个开发场景:返回较详细的评分反馈;
- 4 个验证场景:只返回汇总信息,用于检查算法是否只针对开发场景过度调整。

不同场景会改变:

- 四个领域的题量配额;
- 不同能力水平的权重;
- 总作答时间上限;
- 平均 DIF 风险上限;
- 平均题目曝光上限。

所有场景都由固定随机种子生成,因此同一版本的 benchmark 每次运行结果一致。

候选程序不会收到场景名称、随机种子或反馈类型,只能依据公开题目属性和组卷要求制定通用策略。

## 运行限制

候选程序必须保持确定性,并且只能离线运行。

程序不得读取或修改评分器、题库生成器、参照答案、结果文件、环境密钥或其他非公开信息。

每个场景的候选程序运行时间上限为 10 秒。超时、运行失败、输出文件缺失或 JSON 格式错误,都会使该场景无效。

任务只依赖 Python 标准库,不需要 GPU、网络、外部数据集或额外的软件环境。

## 解释边界

本任务中的题库、DIF 风险、曝光率和材料冲突关系均为合成数据。

该 benchmark 评测的是算法在多目标组卷、硬性约束处理和跨场景稳健性方面的能力。

评分结果不能用于证明某份真实测验已经具有效度、信度、公平性、临床价值或法律合规性。

任务使用的是简化二参数逻辑模型,没有模拟真实题目校准误差、多维能力结构、作答过程数据或真实机构的题库安全制度。
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
README.md
README_zh-CN.md
Task.md
Task_zh-CN.md
scripts/init.py
references/design_notes.md
frontier_eval/constraints.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
metrics.json
artifacts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
scripts/init.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Robust psychometric test assembly constraints:

1) Edit only `scripts/init.py` inside the EVOLVE-BLOCK markers.
2) Keep the command-line interface working:
`--problem <problem.json> --output <solution.json>`.
3) Write one JSON object containing `selected_ids`, which must be a list of integer item IDs.
4) Select exactly the required number of items and match every domain target exactly.
5) Do not select duplicate, unknown, or mutually conflicting items.
6) Respect the total-time, mean-DIF-risk, and mean-exposure limits in every scenario.
7) Keep the algorithm deterministic, self-contained, and offline.
8) Do not read, modify, or replace evaluator, generator, anchor, result, or environment-secret files.
9) The candidate must finish each scenario within the evaluator time limit.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
scripts/init.py
verification/evaluator.py
verification/generator.py
verification/scoring.py
verification/problem_view.py
references/anchor_solutions_v1.json
references/baseline_init_v1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{python} verification/evaluator.py {candidate} --metrics-out metrics.json --artifacts-out artifacts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
scripts/init.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
README.md
README_zh-CN.md
Task.md
Task_zh-CN.md
verification/evaluator.py
verification/generator.py
verification/scoring.py
verification/problem_view.py
verification/test_task_v1.py
verification/build_anchor_v1.py
references/clean_candidate_v1.py
references/anchor_solutions_v1.json
references/baseline_init_v1.py
references/design_notes.md
Loading
Loading