PyBCA Dev Memo
このメモは、PyBCA のシミュレーション理論と更新アルゴリズムの意図を整理した開発者向け資料です。
1. 対象モデル
PyBCA は、2 次元 Brownian circuit の動作をセルオートマトンとして近似する実装です。
主要状態:
0: vacant1: wire2: token-1: recycle-bin 接続点
recycle-bin 接続点は、理想的に十分なトークン源または吸収先として扱います。
2. 実装上の中心クラス
BCA_SimulatorYAML から CellSpace と rule を読み込み、torch上で更新します。- CellSpace Viewer セル空間の可視化と手動検査に使います。
3. 1 step 更新の狙い
GPU 上で trial 並列、セル並列を維持しつつ、次を満たすことが目的です。
- ランダム性の公平性
- 競合更新の抑制
- token の不正増殖防止
4. 主なテンソル
TCHW[Trial, 1, H, W]のセル空間rule_arrays[N, 2, 3, 3]の遷移規則rule_mask四近傍マッチ用マスクrule_probs規則別確率TNHW_boolMask各 rule が適用可能な中心座標マスクtmp_mask書き換え競合検査用TCHW_applied既に書き換えられたセルのフラグ
5. 更新アルゴリズム
- 乱数生成器を現在 step と seed から初期化
- 全 rule に対してマッチ候補を
TNHW_boolMaskに展開 global_probにより候補を間引く- rule のシャッフル順に各 rule を処理
- rule 内競合を除去
- 既適用セルとの競合を除去
nextパターンをTCHWに反映- 必要なら state gate を適用
- 必要なら spatial event を適用
6. 競合解決の意図
同じ step 内で複数 rule が同じセルを書き換えると、セルオートマトンの解釈が不定になります。 そこで PyBCA では、各 rule の書き換え領域を tmp_mask に投影し、重なりを持つ候補を両方落とします。
この方針により、更新順依存の偏りを抑えつつ GPU 並列化を維持します。
7. Special Event と state gate
- state gate 一定 interval ごとに大域状態変換をかける仕組みです。
- spatial event 任意セルの状態条件に応じて任意セルを書き換える仕組みです。
通常更新とは別レイヤですが、実験系のモデル化には重要です。
8. 現状の移植状態
- シミュレーション本体は
src/PyBCA/core/simulator.pyに移植済み - GUI Viewer は legacy 実装を継続利用
- utility 群も legacy ラッパが残る
実行理論自体は parity suite で legacy と一致確認済みです。