この記事の目的

テトリスAIに使ったソースコードを公開します。ファイルを開いたときだけコードを読み込みます。

使用したモデル

  • stable-baselines3 の DQN: 低レベル7行動のモデル(30万、37万ステップ)とマクロ40行動のモデル(30万ステップ)。モデルファイルは載せていません。
  • Qwen2.5-3B-Instruct GGUF q4_k_m(llama-cpp-python): 文字の盤の審判、候補番号の選択
  • Qwen2.5-VL-3B-Instruct(transformers): 絵の盤の審判、場所の直接選択

フォルダ構成

  • tetris: C++ エンジン(tetris_engine)、C API(tetris_c_api)、Qt6 の画面と TCP サーバー(main_window、tetris_widget)、CMake
  • local_tetris_env.py: ctypes でエンジンを包んだ gymnasium 環境
  • simple_tetris_env.py: エンジンをビルドしていないときに使う純粋な Python 環境。観測と行動の形式が違うので、モデルを入れ替えて使うことはできません。
  • macro_planning_env.py: ブロックごとに1回選ぶ40個の行動の環境
  • train_tetris_rl.py: 画面なしの DQN 学習
  • train_qt_live.py: 学習しながら Qt の画面に現在のモデルを見せます。人が打った盤で学習するモードもあります。
  • qt_rl_client.py: 学習したモデルを Qt の画面につなぎます。
  • llm_teacher.py、vlm_teacher.py、llm_reward_wrapper.py: LLM・VLM の報酬の審判
  • vlm_macro_client.py: VLM が場所を直接選ぶクライアント
  • llm_macro_client.py: 候補の計算と LLM の番号選び
  • moe_macro_policy.py: 4つのルールを混ぜた候補の選択
  • config/rl_config.py: 学習の設定

ビルドの成果物、仮想環境、モデルの重みと学習したモデルファイルは除外しました。

全ソース

25ファイル · 4,969行 — フォルダを開いてファイルを押すとコードを読み込みます。

プロジェクトルート14ファイル
llm_macro_client.pypython · 894行 · 33KB

コードを読み込んでいます…

llm_reward_wrapper.pypython · 96行 · 3KB

コードを読み込んでいます…

llm_teacher.pypython · 128行 · 4KB

コードを読み込んでいます…

local_tetris_env.pypython · 252行 · 9KB

コードを読み込んでいます…

macro_planning_env.pypython · 152行 · 5KB

コードを読み込んでいます…

moe_macro_policy.pypython · 81行 · 3KB

コードを読み込んでいます…

project.mdmarkdown · 46行 · 2KB

コードを読み込んでいます…

qt_rl_client.pypython · 148行 · 5KB

コードを読み込んでいます…

requirements.txttext · 11行 · 128B

コードを読み込んでいます…

simple_tetris_env.pypython · 154行 · 6KB

コードを読み込んでいます…

train_qt_live.pypython · 726行 · 28KB

コードを読み込んでいます…

train_tetris_rl.pypython · 316行 · 11KB

コードを読み込んでいます…

vlm_macro_client.pypython · 236行 · 8KB

コードを読み込んでいます…

vlm_teacher.pypython · 179行 · 6KB

コードを読み込んでいます…

config/2ファイル
config/__init__.pypython · 2行 · 55B

コードを読み込んでいます…

config/rl_config.pypython · 101行 · 3KB

コードを読み込んでいます…

tetris/9ファイル
tetris/CMakeLists.txttext · 57行 · 2KB

コードを読み込んでいます…

tetris/src/main_window.cppc++ · 408行 · 13KB

コードを読み込んでいます…

tetris/src/main_window.hc++ · 58行 · 1KB

コードを読み込んでいます…

tetris/src/main.cppc++ · 38行 · 1KB

コードを読み込んでいます…

tetris/src/tetris_c_api.cppc++ · 167行 · 6KB

コードを読み込んでいます…

tetris/src/tetris_engine.cppc++ · 446行 · 13KB

コードを読み込んでいます…

tetris/src/tetris_engine.hc++ · 130行 · 4KB

コードを読み込んでいます…

tetris/src/tetris_widget.cppc++ · 117行 · 3KB

コードを読み込んでいます…

tetris/src/tetris_widget.hc++ · 26行 · 536B

コードを読み込んでいます…