A - Layered Barcode Display Editorial
by
mtmr_s1
Editorial for printing
With AI部門の取り組み方:GPT-6 Pro を主軸とした人間ハーネス方式
AIを用いてどのように取り組んだか
概要
GPT-6 Pro を解法作成の主軸として、Chat/Workに都度指示を行う、いわば「人間ハーネス」方式による取り組みです。
解法に対する人間の寄与について
解法自体もAI主導ですが、解法の概要については対話を通じてざっくり把握できるようになるべく努め、(それがどの程度スコアに寄与したかのかは曖昧ですが)方向性を定めた指示出しがある程度できるようにしました。
指示としては単に「このベースラインから改善して」「大胆なアイデアを試してみて」といった抽象的な指示を行うことが多かった一方で、「紙の設計の部分を改良して」「高速化して」といったある程度方向性を限定した指示も行うようにしました。また、AIの提案したアイデアが有力な結果を出した場合には、さらにそのアイデアを深掘りするように、といった指示も行いました。
また、提出の2秒制限に対する調整方法や、終盤のパラメータチューニングについては明示的な人間の指示および環境整備が必要でした。
利用したAIプランやモデルについて
ChatGPT Pro 100 プランを使用しました。
初期解法の作成や改善案にはGPT-6 Proを使用しました。使用した合計回数は約100回です。約50回の週次リミットを使い切った際は、代用として主に Astra Max (たまにUltra)を使用しました。
なお、高度な思考を求められない作業的なタスクであると思われる場合には、GPT-6 超高 を使用しています。
また、dotsも試験的に利用し、壁打ちや状況確認、自律的な実験などを行わせました。あまり解法に寄与した場面は少なかったのですが、一度だけ大きめの改善を提案してくれました。
環境の整備
AHC074 に関係する Chat/Work は、プロジェクトを使ってまとめるようにしました。また、コンテストの途中から、GitHubを利用してソースコードや実験記録を管理するようにしました。コンテスト終盤には、Chatから直接大規模なテストやパラメータチューニングを実行できるように、GitHub ActionsからクラウドVMを起動できる環境を整えました。
付録1:AIによる解説記事(時系列解説版)
ここまでの文章は、人間が執筆した Human Only 記事です。
以下の記述は、GPT-6 Pro に上記文章を与えた上で、以下の指示により作成したものです。
『上記の、人間による With AI 取り組み解説の後に、それらを補完するAI生成の記事を付録として付けたいと思っています。本プロジェクトやdotsの履歴、GitHub上のAHC074用リポジトリを横断的に参照して、「人間の指示がどのようにスコア改善に寄与したのか」を主題とした記録を時系列的に解説した記事を作成してください。 なお、解法についてはそれ自体を網羅的に説明する必要がありませんが、触れる場合には、この記事のみを読んだとしても理解しやすい、簡易的な説明とするように心がけてください(問題文自体の理解は前提として構いません)。 文章はあまり長くなくてもよく、読者が短い時間で有用な情報を得られることを目指してください。』
概要
AIによる付録。プロジェクト内の会話と実験記録をもとに、具体的な介入とその後の結果を整理した。数値は各実験での比較結果であり、人間だけの寄与を分離して測ったものではない。
この取り組みでは、人間が探索する場所を指定し、AIの実験結果を読み直し、有望な知見を別の対話や次の実験へ渡していた。その役割がよく表れている場面を、時系列で振り返る。
10月末 具体案を出し 実験結果で方針を選ぶ
初期には、複数のベース模様から適切なものを選んで補正する案や、64窓を32窓ずつに分け、各96枚で独立に処理する案など、人間から具体的な構造も提案された。
ただし、提案がそのまま改善になったわけではない。32窓ずつに分ける方式は実装・比較されたが、従来版を上回らず不採用となった。人間が試したい方向を出し、AIが実装と検証を担当する、という進め方は、こうした失敗も含んでいた。
11月5日 遅い環境での結果を そのまま採否に使わない
「AtCoder環境よりこの環境が遅いことも考慮」という指摘は、検証方法を変えた。
時間に応じて探索を打ち切るコードでは、遅い環境ほど探索量が減る。その結果だけを見ると、案そのものの良し悪しと、十分に探索できなかった影響が混ざってしまう。実験記録には、この指摘を受けて、未補正のローカル2秒実行を採否の根拠にした判断を取り下げたことが明記されている。
時間で探索を縮めない条件で比較すると、初期設計の後半探索を400回から2,400回へ増やす候補は、未使用256ケースで平均29.21手改善した。本番2秒での改善量を示す数字ではないが、人間が評価の前提を修正し、有望な候補を再評価につなげた例である。
11月5日夜 初期探索を深掘りし dotsの知見を引き継ぐ
同日には「最初の焼きなましについて深掘りして」という指示もあった。着目したのは、注文を処理し始める前に、紙の設計をよくする余地だった。
dotsとの議論を反映した採用版では、軽い近似評価で100万回の変更を試し、良い出発点を作ってから詳しい探索へ渡す方式が実装された。毎回すべてを計算し直さず、変更した部分だけを評価し直すことで、大量の試行を可能にしている。
この経緯では、参加者が「初期探索」という重点を指定し、dotsで得た知見をChat/Work側の実装・提出へつないでいた。複数のAIとの対話を、同じ解法の改善へ合流させる役割が見える。
11月8日 小さな成功を 次の探索を続ける根拠にする
終盤の継続判断を象徴するのが、queue_valueの改善である。補助に使う紙の穴を決める際、その場の手数だけでなく、取り出した後に残る紙の並びの使いやすさも評価する変更で、新規1,000ケース・通常時間制御の比較で平均13.60手改善した。
参加者はこの結果を受け、「まだ大きな改善余地が残っている可能性を本気で追求したい」と指示した。その後も、紙の設計や操作方法の改善実験を、パラメータ調整と並行して続けている。
ここで人間が行ったのは、得られた改善を材料に、次に何へ時間を使うかを決めることだった。なお、同じqueue_valueへ別の改良を重ねた候補には追加の効果が確認できず、実験を続けることと、変更を採用することは分けられていた。
11月8日夜から9日 前処理の高速化を 手数の改善へつなげる
紙の初期設計を探す部分を重視する指示に続き、参加者は「固定仕事量で良かった候補を、徹底的に高速化する方向」を求めた。さらに、注文処理が始まる前の前処理を重点的に速くするよう指定した。
この方向には、明確な測定結果がある。AWSの同じ300ケースで、探索量を固定した比較では、手数と配置選択を保ったまま前処理のCPU時間を14.70%短縮。通常の時間制御を有効にすると、平均手数は27.66手減少した。前処理で浮いた時間が、注文を受けてからの探索に回ったためである。
人間が改善箇所を絞り、AIが具体的な高速化を実装し、その利益を制限時間内の探索へ戻す。このつながりを確認できる事例だった。
11月9日 大規模調整を 提出に間に合う形へまとめる
並行して進めたパラメータ調整では、人間が学習ケースの増加、途中保存と再開、計算資源の拡大を指示した。最終日は320コアを4つの探索集団に分け、学習800ケースで調整する構成となった。実験では時間による探索打ち切りを外し、提出コードでは時間制御を残す、という条件も人間が明示している。
この調整の最終候補は、調整前の基準に対して独立1,000ケース・固定仕事量で平均9.64手改善した。ただし、前回の160コア調整から得た候補に対する上積みは約2手で、明確な優位性までは確認できていない。大規模化の効果を、そのまま大幅なスコア向上とは扱えない。
運用面でも、「12時に結果を確認したい」という希望を、後処理まで終えて結果とソースがそろう期限として伝え直している。実際の比較は11時46分に完了した。計算を走らせるだけでなく、検証と提出準備まで含めて時間を配分することも、人間の担当だった。
こうして見ると、「人間ハーネス」の働きは、対話ごとに探索の優先順位を更新し、検証の前提を確かめ、別々の実験成果を提出可能な解法へ集めるところにあった。個々の指示の寄与を何手と切り分けることはできないが、指示によって実験方法や開発方針が変わり、その後の改善につながった経路は記録に残っている。
出典について:指示の引用・経緯はプロジェクト内の会話記録、数値と実装内容は実験記録に基づく。dotsの元会話は直接取得できておらず、その部分はChat/Work側の言及とGitHubに明記された経緯に限った。日付・時刻は日本時間。
付録2:AIによる解説記事(wataさんフォーマット版)
GPT-6 Pro に、 wataさんの記事 のフォーマットにならうように指示を与えたところ、より有用な解説を生成することができたため追記します。
AI を用いた取り組み AHC074 Layered Barcode Display
GPT-6 Proを解法作成の主軸として、ChatGPTのChatとWorkに都度指示を出しながら取り組みました。解法の考案・実装はAI主導で、人間(私)が作業方針の指示、複数スレッド間の引き継ぎ、提出と結果のフィードバックを行う、いわば「人間ハーネス」方式です。
解法の概要は、対話を通じてなるべく把握するように努めました。その理解をもとに、改善する箇所を指定したり、人間側からアイデアを提案したりもしています。ただし、それぞれの指示や提案が最終的なスコアにどの程度寄与したかは、厳密には切り分けられていません。
使用したモデルとハーネス
| 種類 | 内容 |
|---|---|
| モデル | GPT-6 Proを主軸に、ChatGPT Workのエージェントも使用 |
| ハーネス | ChatGPTのChatとWork。人間が複数スレッドに指示を出し、コードや実験結果を引き継ぐ形で運用 |
| コード・実験の管理 | GitHub、GitHub Actions |
| 実験環境 | ローカルのMac、AWS、OCI A1 |
解法だけでなく、比較実験やパラメータ調整を行う仕組みの作成・実行もAIに依頼しました。終盤のパラメータ調整では、OCI A1を合計160コア、最後は320コア使用しました。AWSは別途、候補を比較する実験にも使用しています。
作業の流れ
次のような作業を組み合わせて繰り返しました。
複数スレッドでの改善:同じベースラインから独立に改善を依頼しました。自由な発想で取り組んでもらうスレッドに加え、紙の設計、評価関数、高速化、悪いケースへの対応など、方向性を指定するスレッドも用意しました。
有望な結果の引き継ぎ:良い結果が出たら、そのコードや実験結果を別のスレッドにも渡し、さらに掘り下げたり、別の改善と組み合わせたりしました。GitHubを使って、コードと実験記録を共有しました。
実験結果を踏まえた指示:提出結果や比較実験の結果をAIに伝え、次に試す方針を考えてもらいました。改善が小さい場合も、その理由を検討し、追加の実験を依頼しました。
大まかな経過は次のとおりです。
- GPT-6 Proとの対話を中心に解法を作り、提出結果を見ながら改善を重ねた。人間側からも、複数のベースパターンと補正を組み合わせる構成などを提案した。
- 複数のスレッドで、紙の設計、操作列の選択、将来の使いやすさを考慮した評価などを並行して改善した。有望な結果を共有し、その先の改良を続けた。
- 終盤も構造的な改善を探し続ける一方、良い候補を制限時間内で十分に動かすための高速化を進めた。
- OptunaのCMA-ESによるパラメータ調整を行った。最後は800ケースを使い、320コアを4つの探索集団に分け、継続探索・近傍探索・広域探索を組み合わせた。チェックポイントで候補を交換し、各集団の候補やパラメータを平均した候補も比較した。
スコアに寄与した指示・工夫
改善を進めるうえで意識したのは次の点です。
大きな改善を早く諦めさせない:「自由に、野心的に、徹底的に実験してください」といった指示を繰り返しました。改善が小さくなってからも、既存の設計が限界に近いという前提を置かず、構造そのものを見直すよう依頼しました。
抽象的な依頼と具体的な課題指定を使い分ける:「このベースラインから改善して」という依頼に加え、「紙の設計の部分を改良して」「高速化して」など、注目する箇所を絞った指示も行いました。特に、最初に紙を設計する部分にはまだ改善の余地があると考え、繰り返し取り組んでもらいました。
有望な小さな工夫を掘り下げる:紙を戻した後の並びや将来の取り出しやすさを評価する工夫など、比較的単純な変更でも改善が出ました。その結果を受け、ほかにも見落としている工夫があるはずだと考え、追加の実験を依頼しました。
悪いケースにも着目する:平均値だけでなく、手数が多くなるケースを改善する方向も試しました。特定のケースに効く変更については、ほかのケースへの悪影響も含めて評価し、適用条件や閾値を調整できないか検討してもらいました。
実行環境の速度差を考慮して比較する:時間で探索を打ち切るコードでは、実行環境の違いによって探索量とスコアも変わります。そのため、終盤の調整・比較は探索量を固定して行い、提出コードには時間制御を残しました。大規模な比較はクラウドで実施し、学習とは別のケースでも確認しました。
高速化をスコア改善につなげる:固定した探索量で有望だった候補について、徹底的な高速化を依頼しました。特に、オンラインの注文処理に入る前の前処理を重点的に見直し、処理を速くすることに加えて、軽くて良い手法への置き換えも検討してもらいました。
パラメータ調整にも探索の幅と継続性を持たせる:調整項目の追加、探索範囲の見直し、学習ケース数や探索集団の拡大を依頼しました。定期的にチェックポイントを保存して途中結果を取り出せるようにし、前の探索を引き継いで最後の調整まで進めました。
人間の役割として大きかったのは、結果を見ながら「次にどこを掘るか」を決め、別のスレッドで得られた知見を渡して、実験を続けてもらうことだったと思います。解法の理解を深めることは、次の指示を具体的にするうえでも役立ちました。
解説の作成
この記事は、wataさんの「AI を用いた取り組み (MM167 WordGame)」を参考に、ChatGPTに以下の指示を与えて作成しました。
これと同じフォーマットで記事を作成してください。
AHC074に関する過去の対話と、GitHubに残した実験記録をもとに文章化しています。
posted:
last update: