跳到主要内容

AtCoder · AHC058

Apple Incremental Game

在四层生产体系中分配苹果,并在 500 回合内复合增长机器产出。

01

任务

每个 Case 在四个生产层级上各包含十个机器 ID。系统从一个苹果开始,持续运行 500 回合。

每回合 Policy 至多强化一台负担得起的机器,或选择等待。随后生产按层级顺序执行,因此投资时机和跨层复合增长决定最终苹果数。

02

Policy 接口

变化中的状态完全公开。容量和初始成本只出现一次,可由同一 Episode 内的 Policy 记忆保留。

Observation 字段含义
turn / turns_remaining当前时间状态
apples当前可用苹果数
machines4 × 10 的机器数量
powers4 × 10 的当前生产能力
initial容量与初始成本;仅第一次 Observation

选择一次机器强化或等待。所选层级和机器 ID 必须在范围内且当前可支付。

Action含义
{"upgrade": [level, machine_id]}在生产前强化一台机器
None等待一个回合
03

评估

定义
Episode 得分round(100,000 × log2(最终苹果数))
Benchmark 得分所有 Episode 得分的算术平均值
Policy failure计为 0
04

Feedback

Feedback 将主要得分与最终生产规模、强化次数、完成情况和有界 transition 覆盖关联起来。

字段含义
mean_log2_score主要 Benchmark 得分
mean_final_apples最终苹果数平均值
mean_total_upgrades强化次数平均值
completed / policy_failuresEpisode 结果计数
trace.jsonl包含公开生产状态与所选强化操作的有界回合序列。
05

使用 distribution

从仓库根目录构建这个可独立安装的叶子 project:

uv sync --project environments/atcoder/ahc058/apple_incremental_game --extra dev
uv build environments/atcoder/ahc058/apple_incremental_game

该 package 导出:

from apple_incremental_game import AppleIncrementalGameBenchmark, baseline_program

benchmark = AppleIncrementalGameBenchmark()
program = baseline_program()