
「デジタルツインがループを閉じると生産量が増えた」という主張は、ループを閉じたことだけが違いである場合に限って意味を持ちます。noteflowai/robot-reel リポジトリの Factory Twin Lab(本記事はコミット 7a1f08f の解説ドキュメントと手法と制約に基づきます。証拠レベル [O]、つまりプロジェクト自身の記述です)は、そのまま応用できるレビューの方法を示しています。実行はすべてペアで行い、一方ではツインの指令が実際にプラントへ届き、もう一方では記録されるだけです。両者は外乱とセンサーノイズのサンプルをすべて共有します。12 ペアのペアごとの数値は seeds.json に保存されており、閉ループのほうが生産量の少なかった 2 ペアも含まれます。
ペア比較で切り分けられるもの
実験の「プラント」は完全にシミュレーションされた工場と構内です。6 工程の生産ライン、3 台の AMR、建屋の空調、構内のエネルギーから成り、10:00 から 13:00 まで 1 s 刻みで計算されます。デジタルツインはそこからテレメトリを受け取り、状態を推定し、候補となる行動を比較して、指令を返します。各シードは 2 つのモードで実行されます。
- 閉ループ(closed):指令は送信の 5 s 後にプラントへ届きます。
- シャドー(shadow):同じツインが動いて同種の判断を記録しますが、何も送信しません。
乱数はシード、ストリーム、インデックスをキーとするカウンター方式の生成器(counter-based generator)から得るため、ペアの 2 回の実行はまったく同じ外乱とノイズサンプルを受けます。ドキュメントはこれを根拠に、両者の差を「このモデルでループを閉じた効果」と定義しています。この範囲は狭く、実際の工場についての推定ではなく、1 つのモデルと 1 組のパラメータの中での対照比較です。
本サイトの「フィジカルAIラボ 0.1」では、フィジカル AI を「見る・考える・動く」のループを繰り返すものとして説明しました。ここでは同じループが工場建屋の規模に拡大され、シャドーモードが「見て考えるが動かない」対照群の役割を果たします。
ツインが何を見て、どう判断するか
ツインの判断をレビューするには、まず情報の境界を確かめます。ドキュメントには、ツインはプラントの状態を直接読まず、テレメトリだけを使うと明記されています。
| 段階 | ツインが行うこと |
|---|---|
| センシング | 5 s ごとに PLC、CNC、電力計、建屋の気候、AMR の姿勢の 5 グループのパケットを受信します。各グループは 2–3% の確率で欠落し、すべて 5 s 遅れで届き、値にはノイズと丸めが含まれます |
| 同期 | 各グループの最新パケットから工程の状態、バッファ、AMR の姿勢を写し取り、各グループのデータの古さを保持します |
| 推定 | 拡張カルマンフィルタで、振動モデル v = 2.4 + 5.5 w² + noise から CNC 2 主軸の観測できない摩耗 w と摩耗速度を追跡します。初期値は公称パラメータ(初期摩耗 0.45、公称速度、しきい値 1.0)で、どのシードの隠れた真値とも異なります |
| 予測 | 保守的な(2σ)残寿命が稼働 150 分を下回ると、5 分ごとに自分のラインモデルで 14 通りの計画を 90 分先まで順方向にシミュレーションします。1 分ごとに現在と次の課金区間を予測します |
| 判断 | 保全の予定、送り速度の低減、建屋の設定温度の引き上げ、EV 充電の制限を行います |
14 通りの計画は、「今すぐ保全」「10・20・30・45・60 分後に保全」「保全しない」の 7 つのタイミングに、それぞれ減速あり・なしを組み合わせたものです。各計画の価値は、期待良品数から、早めの保全で捨てる主軸寿命(摩耗 1 単位あたり 40 個)を引き、計画が失敗した場合はさらに 25 個を引いたものです。保全を要求するのは「今すぐ」が最良のときだけで、減速の切り替えは利得が 1.5 個を超える場合に限られます。デマンド制御は 4 段階(設定温度 +1 / +2 °C、EV 充電器 50%)で、ヒステリシスを持ち、27 °C 未満という快適性の制約があります。
これらの重み(40、25、1.5)はデモのために選ばれたものです。レビューでは判断の一部として記録しておくべきです。重みが違えば、同じテレメトリから別の保全タイミングが導かれる可能性があります。
代表シフト:利得と代償を並べる
ドキュメントが示す代表シフトはシード 10(10:00–13:00)です。
| シャドー(助言のみ) | 閉ループ | |
|---|---|---|
| 良品 | 182 | 202 |
| CNC 2 主軸の故障 | 1(修理 45 分) | 0(15 分の計画保全 1 回) |
| 不良品 | 10 | 2 |
| 15 分デマンドのピーク | 560.3 kW | 466.3 kW |
| 520 kW を超えた課金区間 | 2 | 0 |
| 建屋の最高温度 | 24.2 °C | 24.8 °C |
最後の行は閉ループの代償の 1 つで、閉ループでは建屋の最高温度が 0.6 °C 高くなりました。建屋の設定温度の引き上げはツインのデマンド制御の手段の 1 つですが、この 0.6 °C の原因の内訳はドキュメントに示されていません。閉ループでは 15 分の計画停止も 1 回行われました。これは記録されたコストの 1 つであり、故障回避の総コストはドキュメントに示されていません。EV 充電の制限も閉ループの代償の 1 つです。Robot Reel の文書はシード 10 の EV サービス指標を示していませんが、ワークベンチのメンテナーは読み込んだ v0.18.0 の記録についてシード 10 の EV サービス指標が 74%で、既定基準を満たさないと報告しています。ただし、引用資料はその記録が本記事で使うコミットと同じであることを示していません。利得だけを並べた表では読者にこうしたトレードオフが見えません。レビューでは両面を示すよう求めるべきです。
12 ペアをすべて見る:負けた 2 ペアも含めて
12 ペアのシードについて、ドキュメントは次のように報告しています。
- 主軸の故障:閉ループ 0 回、シャドー 11 回。
- 上限を超えた課金区間:閉ループ 0、シャドー 8。
- 良品数:10 ペアで増加、2 ペアで減少。平均 +11.1、範囲 −3〜+20。
平均の +11.1 だけでは、この 2 ペアが見えなくなります。コミット 7a1f08f の文書と METHODS.md によると、生産量が減ったシード 3 と 11 の両方でシャドーモードの主軸が故障しましたが、発生が遅く、45 分の修理のうち 3 時間の枠内に入ったのは 13.6 分と 14.5 分だけでした。そのため閉ループの 15 分の計画保全のほうが、遅い故障より多くの生産量を失いました。このトレードオフは、デモ用のパラメータと 3 時間の枠内に限ったもので、実工場での保全の利益を示すものではありません。
これは本サイトの「EvalArc:スコアが上がったとき、エージェントはどこで退行したのか」で扱った問題と同じで、平均が上がってもすべての項目が改善したとは限らないため、項目ごとに見る必要があります。本サイトの Robot Reel 紹介記事は同じリポジトリにある SmolVLA のペア型ストレス実験を扱っています。Factory Twin はそれとは別の実験で、ペア比較を判断ループに適用したものです。
検証:信用するのではなく再生する
どのペアも再実行できます。ドキュメントによれば、シミュレーションに影響するのは整数演算と IEEE-754 演算だけで、Python 標準ライブラリでビット単位まで同一に再実行できます。--verify は記録されたテレメトリからツインを再生し、推定値と判断が完全に一致することを求めます。これは「ツインはテレメトリだけを使う」という点の検証にもなります。
以下は上流のドキュメントに書かれた手順で、本サイトでは実行していません。どちらの方法でも robot-reel コマンドを利用できる必要があります。引用した資料にはインストールや実行プログラムのバージョンを固定する手順がないため、以下のコマンドだけでは環境の再現手順は完結しません。1 つ目はオフライン実験です。プロジェクトサイトの experiment.zip か GitHub Release の robot-reel-factory-twin-experiment.zip をダウンロードして展開します。METHODS.md の例では --output が展開した実験フォルダ(例では factory-twin)を指しています。どのディレクトリからコマンドを実行するかは、上流の資料には書かれていません。
robot-reel factory-twin --output factory-twin --verify # 代表ペア
robot-reel factory-twin --output factory-twin --verify --all-seeds # 全 12 ペア
2 つ目は、リポジトリをコミット 7a1f08f でチェックアウトした場所から、docs/factory-twin.md の Reproduce の節に従い、出力先を docs/factory-twin として実行する方法です。
robot-reel factory-twin --output docs/factory-twin --verify # 代表ペア
robot-reel factory-twin --output docs/factory-twin --verify --all-seeds # 全 12 ペア
PyPI にあるバージョン指定なしの robot-reel パッケージ、プロジェクトサイトの experiment.zip、latest と表示された GitHub Release は、いずれもコミット 7a1f08f に固定されておらず、本記事が引用した版と内容が異なる可能性があります。2 つ目の方法のチェックアウトは、引用したソースファイルと記録データを固定しますが、実際に呼び出す robot-reel 実行プログラムを固定するものではありません。
METHODS.md の記述は「両コマンドに必要なのは Python 3.12 と標準ライブラリだけ」です。
レビューで読めるファイルは次のとおりです。seeds.json には 12 ペアすべてが入っています。trace-closed.json と trace-shadow.json には代表シードの全サンプルがあり、プラントの真値、生のテレメトリパケット、ツインのスナップショット、証拠と予測付きの判断ログ、予測とその後のプラントの実績との照合が含まれます。1 回の保全判断を、ログの証拠から当時の予測までたどり、真値と比べられます。
3D シーンとフライスルー映像は Blender で作られていますが、Blender は記録されたサンプルをキーフレームとして再生するだけで、物理計算は行いません。robot-reel factory-twin --verify は Blender チェックのレシートの入力ハッシュを確認するだけで、Blender は再実行しません。映像は見せるためのもので、証拠ではありません。
制約と注意点
- プラント全体がシミュレーションです。プラントのパラメータとツインのコストの重みはデモのために選ばれたもので、実在の工場に合わせた較正はされていません。ドキュメントは、これらの数値はループが説明どおりに動くことの確認にすぎず、削減額の推定ではないと明言しています。
- このモデルでループを閉じると効果があったことは、実際の工場でコストが下がることも、これらの指令で実機を安全に制御できることも示しません。
- 12 ペアのうち 2 ペアで良品数が減っており、「閉ループなら必ず生産量が増える」とは言えません。
- 本記事では上記のコマンドを再実行していません。上流に付属するチェックや、リリースファイルを入手できるかどうかは、独立した再現ではありません。ここでの数値はすべてプロジェクトのドキュメント自身の記述です。
- ダウンロード経路(PyPI のパッケージ、プロジェクトサイトの
experiment.zip、latest の Release)はコミット7a1f08fに固定されておらず、本記事が引用したドキュメントと一致しない可能性があります。コミット7a1f08fのチェックアウトが固定するのはソースファイルと記録データだけで、実際に呼び出すプログラムのバージョンは別途確認する必要があります。 - PAI Design Workbench プロジェクトは、固定した Robot Reel v0.18.0 の記録を読み込む、ホストされたワークベンチの読み取り専用レビューの受け入れ確認を報告しています。基準を先に固定し、各シードを比較します。既定基準では、シード 3・11 の生産量低下と、既定基準を満たさないシード 10 の EV サービス指標 74% により、計画を拒否します。引用したワークベンチ文書には、この指標の算出方法も判定のしきい値も示されていないため、74% を充電電力量の割合と解釈することはできません。このホストされた環境での確認では工場シミュレーションを再実行せず、実機制御も検証していません。これはワークベンチのメンテナーによる確認記録であり、本記事の著者による独立再現ではありません。引用した確認記録は、v0.18.0 のファイルが本記事で引用するコミット
7a1f08fと同じであることを示していません。



