サービスロボット導入シミュレーション Log#16 | 眠っている間に、配膳ロボットを比べる基準ができた

パソコンの中に作ったファミレスで、配膳ロボットを何台入れると店がどう変わるかを調べています。お客さんが来て、スタッフが案内し、ロボットが料理を運ぶ。Unity(ゲームを作る道具)で作った3Dの店を、混む2時間ぶん動かして、待ち時間などを数えます。前回までに、これを人が寝ている間に何十回も回す仕組みを作りました。今回は、その仕組みで実際に夜を3回回しました。

回し始める前に、思いがけないことが分かりました。同じ店・同じ条件でも、Mac がほかの仕事で忙しいほど、ロボットが動けなくなる回数が増えます。 1本だけで回すと中央値1回、4本を同時に回すと7回でした。お客さんの入店待ちには差が出ません。つまり、シミュレーションの数字の一部が、店の中のことではなく、パソコンの空き具合で変わっていました。そこで、夜は必ず同じ本数(4本)で回し、比べる相手も同じ回し方でそろえることにしました。

もう1つ決めたことがあります。実際の店の配膳ロボットは、通路でほかのロボットと会うと、速さを落として止まらずにすれ違います。シミュレーションでも同じ動きを入れるかどうかを、2晩分のデータで比べました。入れると、ロボットどうしが向かい合って動けなくなる時間の中央値が、422秒から64秒に縮みました。お客さんの待ちには、はっきりした差がありません。この動きを標準にして、3晩目に回した60回を、これから先の夜の結果を比べる基準(基準データ v4)にしました。

やったことの全体です。

やったことなぜ結果
同時に回す本数で結果が変わるかを確かめた
1本で回すと詰まりが少なく見える気配があったため
動けなくなった回数がはっきり増える。夜は4本に固定した
台帳に書く所を別の AI(codex)にレビューしてもらった
台帳は壊すと戻せないため
「見送り」と判定。今夜に関わる8つを直してから回した
最初の夜(70回)を回した夜の仕組みを実物で通すため
70回とも最後まで回った。1回だけ、店が空にならなかった
店が空にならなかった回を調べた
夜の数字を信じてよいか決めるため
卓に着けないロボットが同じ皿を持ち続けていた。2回失敗したら人が運ぶ形にした
2回目の夜(70回)を回した
直したあとも結果が変わらないかを見るため
60回とも前の夜の幅に入った
すれ違いの入と切を2晩分で比べた
実物に合わせた動きを標準にしてよいか決めるため
長く向かい合う止まりがはっきり減り、待ちは悪くならない。入を標準にした
3回目の夜(60回)を回し、基準データ v4 にした
標準を変えたので、比べる相手も作り直すため
60回とも最後まで回った。次の夜からはこの60回と比べる
Claude Code への依頼を自動で渡すようにした
人が依頼文を貼り付ける手間をなくすため
3回目の夜は、人がコマンドを打たずに回った

1つ、まだ答えの出ていない点があります。3回目の夜で、③の店ではロボットを1台から2台に増やしたとき、10種のうち6種で入店待ちが長くなりました。ロボットを増やせば待ちが短くなる、というサイトの試算とは逆の向きです。基準 v4 で初めて出た印なので、次の店に広げる中で追いかけます。

次は、同じ仕組みを別の店の形(④⑤⑥、そのあと②)に広げます。

作業ログ ― 同時に回す本数で、ロボットの詰まりが変わった

ここから下は作業ログです。効果のうち「見込める効果」と書いた所は、まだ測っていない見込みです。測った数字はそのまま載せています。

busycheck:③1台・種1 を1本ずつ5回と、4本同時で8回

前回の終わりに、同じ回を1本だけで回すと「動けなくなった」が少なく見える気配がありました。夜に何本同時に回すかを決める前に、これを確かめました。条件は③の店・ロボット1台・乱数の種1で、すべて同じです。Unity のエディタは閉じて回しました。4本同時の回は、5回だと最後の1本が1本だけで回ってしまうので、2束の8回にしました(Claude Code の判断)。

回1本ずつ:動けなくなった人のあきらめ入店待ち(分)4本同時:動けなくなった人のあきらめ入店待ち(分)
15382.3303361.653
23312.2936402.003
31231.5848511.642
41352.3115331.929
51342.1939352.824
62321.575
711513.046
88481.623
中央値1342.2927381.791

順位で比べると、動けなくなった回数ははっきり違いました(U=4/40。5回と8回なら6以下か34以上で、偶然では起きにくい差)。人のあきらめは増える向きでも言い切れず(U=8.5/40)、入店待ちは違いがありません(U=25/40。中央値は逆に1本ずつの方が長い)。台帳の全部の列を当たると、はっきり動いたのは、動けなくなった・助けに行った・ロボットが運んだ割合・店員が遅れて運んだ皿の4つだけでした。忙しい → ロボットが止まる → ロボットの分担が下がる → 店員が代わりに運ぶ、という流れで、客の待ちは店員が吸い取っています。

もう1つ分かったのは、基準にしていたエディタの回(cs:7)が、4本同時の幅の中に入っていたことです。エディタで回すと、それだけで Mac が4本同時くらい忙しくなる、ということになります。

エディタ(cs:7)1本ずつの幅4本同時の幅
動けなくなった91〜52〜11
ロボットが運んだ割合0.64560.6748〜0.71360.6359〜0.6942
店員が遅れて運んだ皿7359〜6763〜75
入店待ち(分)3.0041.584〜2.3301.575〜3.046
  • ねらい:夜に何本同時に回すかを、速さだけでなく、数字がずれないかで決める
  • 変わったこと:同時本数を4に決め、夜の途中で変えない。夜は Unity のエディタを閉じる
  • 見込める効果:夜どうし・基準との比べで、Mac の忙しさの違いが混ざらない(4本同時なら70回が約1時間で終わる)

ロボットが動けなくなる回数がパソコンの忙しさで変わるということは、ほかの人の Mac で回すと数字が変わる、ということでもあります。誰が回しても同じ結果になる形にするには、いずれ直す必要があります。原因の候補は、ロボットの動きの計算が Mac の空き具合で割り振られることです。今は本数を固定して比べ、直すのは後に回しました。

夜の並びを種ごとにし、1回ごとの開始・終了の時刻を残した

夜の終わりは、残りの回が少なくなり、同時に走る本数が4本より減ります。その数回だけ Mac が空いた状態で回ります。最初の並びは、70回の最後の10回が全部すれ違い入の回でした。これでは、すれ違い入の回だけ詰まりが少なく出るおそれがあります。

そこで並びを「種ごと」(種0の全7条件 → 種1の全7条件 → …)に変えました(cs:18)。最後に薄くなる3回は、種9の別々の条件になります。あわせて、実行係が1回ごとの開始と終了の時刻を night/{夜}/runs.csv に書き、その夜に並べた回を night/{夜}/queue.json に写すようにしました(cs:19)。

runs.csv があると、その回が回っている間に何本走っていたかを、あとから計算できます。最初の夜では、最後の2回だけ平均の同時本数が3.4本と3.0本に下がり、それ以外はほぼ4本でした。

作業ログ ― codex のレビューは「見送り」、今夜に関わる8つを直した

codex の判定:通常の書き方は整っているが、まれな場面で台帳が壊れる道がある

台帳(unity_ledger_v1.csv)は、1回の結果を1行ずつ足していくファイルで、ここにしか残らない数字もあります。夜に4本が同時にこの台帳へ書くので、書く所だけを codex(別の AI)にレビューしてもらいました。Mac のターミナルから codex を読むだけの形で起動し、22項目について答えてもらいました。

判定は「現状では、70回・4本同時の本番は見送りを勧めます」でした。指摘のうち重いものです。

項目指摘
A2 古い鍵
落ちた回の鍵を「古い」と判定した2本が、先に取り直した側の新しい鍵を消し、2本が同時に台帳へ書く道がある
A4 半端な行
書く途中で落ちると、次の行がくっつく
B3 書けなかった回
台帳に書けなくても終了コード0で「成功」になり、行が黙って抜ける
D6 マウントの確かめ
KIOXIA(外付けSSD)が外れていると、Mac の中にフォルダを作る道がある

直したのは8つ、残りは今夜の前提で踏まないもの

最初の夜は、実行係を1つだけ起動し、途中で止めない・KIOXIA を抜かない・同じ夜を回し直さない前提で回します。その前提で、台帳が壊れる・行が黙って抜ける・Mac の中に書く、の3つの道だけを先に塞ぎました(依頼 v14、cs:21)。

直したこと中身
古い鍵
年齢だけで鍵を消すのをやめた。取れなければ60秒待ち、過ぎたら「台帳に書けなかった」で失敗にする。解放は自分の札の鍵だけ
半端な行
鍵の中で、台帳の最後が改行かを確かめる。改行でなければ書かない(自動で切り詰めない)
書けなかった回
Python も59列の名前と順番を全部照合する。書けなかったら終了コード3にし、実行係が記録とまとめに出す
行の版の欄
実行係が書く止まった回・落ちた回の行にも、版(schema 2)を入れる
版を読む場所
実行ファイルの版の情報を探す場所のずれを直し、見つからなければ始めない
保留ありの実行ファイル
保留があるまま作った実行ファイルでは、夜を始めない
KIOXIA の確かめ
本当にマウントされているかを、夜のフォルダを作る前・ログを開く前・各回を起こす直前に確かめる
runs.csv の書き方
値によって列がずれないよう、CSV の正しい書き方にする

確かめは本物の台帳を使わず、コピーで行いました。鍵が残っている・最後が改行でない・ヘッダが1列違う・保留ありの版・KIOXIA がない、の5つの場面すべてで、書かずに断り、台帳は1バイトも変わらず、終了コードとログに出ました。そのあと本物で4本同時の1束(名札 fixcheck)を回し、台帳にちょうど4行入りました。

  • ねらい:台帳が壊れたり、行が黙って抜けたりしたまま夜が進むのを防ぐ
  • 変わったこと:書けない場面では必ず断り、終了コードとログで分かるようにした
  • 見込める効果:3晩・200回で、台帳に書けなかった回は0、古い行の変化も0だった(毎晩、回す前の退避と md5 で照らした)

Claude Code は、レビューで「あとで直す」に回した7件のうち6件を、cs:20 ですでに直していました(同じ夜を回し直したときの扱い、Ctrl+C での記録、時刻の正確さ など)。この6件は codex に見せていないので、あとでまとめて見てもらいます。

作業ログ ― 最初の夜(70回):店が空にならない回が1回出た

70回とも最後まで回り、台帳は無事だった

2026-10-26 の22:11に回し始め、23:25に終わりました(夜の名前 20261027)。③と⑦の店(⑦は③の列の間の通路を95cmに狭めた店)それぞれで、ロボット0・1・2台を種0〜9で回す60回(すれ違いは切)と、③ロボット2台・すれ違い入の10回です。回す前に、台帳を archive/unity_ledger_v1_prenight_20261027/ にコピーで退避しました(121行・md5 bacc1e04…)。

  • 70回とも completed・終了コード0。台帳に書けなかった回・止まった回・やり直しは0
  • 台帳は121行 → 191行。先頭の121行の md5 は退避と同じ
  • 1回の実時間は平均4.2分、最長14.4分(その1回が下の、店が空にならなかった回)

判定の印は、基準の幅が狭すぎることで付いていた

朝の判定(judge.md)では、70回のうち30回が「Unity の作り」、2条件が「試算を見直す候補」に振り分けられました。どれも、比べた基準(エディタで1条件3回だけ回した cs:7)の最小〜最大の幅を、少しはみ出したものです。3回の幅に10回を当てれば、はみ出すのは当たり前で、幅の狭さが主な理由と見ました。ロボットを増やしたときの向きが試算と逆になった条件はありませんでした。

そこで、この夜のすれ違い切の60回を、基準データ v3 にしました(エイイチの決定)。1条件10回なので、幅が広く、夜と同じ回し方(画面なし・4本同時)です。v3 で判定し直すと、60回とも正常になりました。

店が空にならなかった回:ロボットが同じ皿を持ったまま、56回やり直していた

1回だけ、③ロボット2台・すれ違い入・種0が、店の中の時間の上限720分まで回っても、お客さんが全員帰りませんでした。Claude Code に、何が止まっていたかを調べてもらいました。

内容
客
2組。1組は食べ終わっているのに、残りの1皿を待って会計へ進めない。もう1組は1皿も食べ始めていない
ロボット
ロボット1が、その2皿を持って卓へ向かうが着けない。600秒で時間切れ → 待機場所へ戻る、を56回くり返した
スタッフ
4人とも手が空いていて、仕事の板も空。皿はいつもロボットが持っていたので、一度も頼まれなかった

時間切れのたびに皿は板に戻されていましたが、戻した同じ瞬間に、受け渡し口のすぐ横にいる同じロボットが取り直していました。歩いてくるスタッフより、ロボットの方が先に取ります。だから板はいつも空に見え、スタッフは手が空いたままでした。

なぜ卓に着けないのかは、この調べでは分かりませんでした。同じ種で回し直すと起きず、タイミングで起きる不具合です。同じ回の別の往復では、2台のロボットが互いの前をふさいで道が引けず、60秒待って諦めて引き直し、それでも引けない、をくり返す型が見つかりました。夜の回も、これが抜けられなかったと見ています。

原因が分からなくても、先に入れられる直しが1つありました。同じ皿が2回時間切れになったら、ロボットに渡さずスタッフの仕事にする(cs:23・cs:24)。「ロボットが詰まったら人がサポートする」という前からの決まりとも合います。入れる前に、v3 の60回で同じ皿が2回時間切れになったことがあるかを数えると、0回でした。入れても v3 の数字は1つも変わりません。

  • ねらい:ロボットが詰まったまま、店が永久に終わらない回をなくす
  • 変わったこと:同じ皿が2回時間切れになったら、スタッフが運ぶ
  • 見込める効果:2回目の夜・3回目の夜の130回では、店が空にならなかった回は0だった。時間切れが14回あった回も、皿がスタッフに回って最後まで回った

ロボット1台ずつの位置を、店の時間の5秒おきに残すようにした

次に同じことが起きたときに1回で原因が分かるよう、ロボット1台ずつの位置(robot_track.csv)を記録に足しました(cs:25)。時刻・ロボット・x・z・いまの仕事・すれ違い中か・後ずさり中か・向かっている卓です。busycheck で分かったとおり、記録を細かくしすぎると Mac が忙しくなり、ロボットの詰まり方そのものが変わります。そこで、1コマごとではなく、店の中の時間で5秒おきにしました。1回でおよそ2,200行です。cs:25 で回した1回(③1台・種1)は、主な9項目すべてが v3 の幅に入りました。

作業ログ ― 2回目の夜(70回)と、すれ違いの入と切の比べ

60回とも v3 の幅に入った

2026-10-27 の8:33から9:46に、cs:25 で同じ70回を回しました(夜の名前 20261028)。70回とも最後まで回り、台帳の先頭195行は退避と同じ md5 のままでした。すれ違い切の60回は、60回とも v3 の幅に入り、判定の印は1つも付きませんでした。直しを入れたあとでも結果が変わっていないことが確かめられました。すれ違い入の10回も全部最後まで回り、店が空にならない回はありませんでした。

入にすると、長く向かい合う止まりがはっきり短くなる

③ロボット2台の2晩分を合わせて比べました(入は最後まで回らなかった1回を除いた19回)。

切(20回)入(19回)順位の比べ
向かい合って止まった最長(秒)
42264
はっきり短い(U=271/380)
動けなくなった25.519
減る向き(U=253.5、はっきりではない)
入店待ち(分)3.045.42
差があるとは言えない(U=171)
ロボットが運んだ割合0.930.91ほぼ同じ
人のあきらめ6363同じ

20回と19回なら、順位の比べ(U)が120以下か260以上で、偶然では起きにくい差と見ます。入店待ちは中央値が上がって見えますが、種による幅が1.4〜14分と大きく、その中のばらつきです。

この結果から、すれ違い入を標準にしました(エイイチの決定)。実物の配膳ロボットの動き方に近く、客の待ちを悪くせず、ロボットどうしが長く向かい合う止まりが減るためです。

作業ログ ― すれ違い入を標準にし、3回目の夜を基準データ v4 にした

Claude Code への依頼を、依頼箱から自動で渡した

ここまでは、Claude の書いた依頼文をエイイチが Claude Code に貼り付けていました。この日から、iCloud の 依頼箱/新規/ に依頼のファイルを置くと、Mac の見張り係が拾って Claude Code に渡し、報告を 依頼箱/結果/ に書き戻す形を使い始めました。依頼の頭に作業フォルダと上限時間を書き、自動で回してよいのは ServiceSim の作業フォルダだけです。

この形で、3つの依頼を続けて渡しました。

依頼中身かかった時間
03 すれ違い入を標準に
既定を入にし、実行ファイルを作り直して、60回の並びをから回しで確かめる(cs:26)
5分
04 v4 の夜を回す
始める前に5つ(Unity が閉じている・KIOXIA・台帳の md5・鍵なし・保留0)を確かめてから60回を回す
80分
05 基準を v4 に
判定の基準を v4 に替え、余分な回の指定の誤り止めと、手で起こしたときの既定の入をそろえる(cs:27)
3分
  • ねらい:人がコマンドや依頼文を貼り付けなくても、夜を回せるようにする
  • 変わったこと:依頼のファイルを置くだけで、Claude Code が確かめてから回し、報告を書く
  • 見込める効果:3回目の夜は、エイイチがコマンドを打たずに回った。台帳の退避だけは Claude が回す前に行った

3回目の夜(60回):全部最後まで回り、v3 と比べて悪さは見えない

2026-10-27 の10:19から11:18に、全条件をすれ違い入で60回回しました(夜の名前 20261029・cs:26)。60回とも最後まで回り、店が空にならなかった回もありません。台帳は265行 → 325行で、先頭の265行は退避と同じ md5 でした。

v3(すれ違い切)と v4(すれ違い入)を、条件ごとに種10個の中央値で並べました。

条件入店待ち(分)v3 → v4動けなくなった v3 → v4
向かい合って止まった最長(秒)v3 → v4
③ 0台4.08 → 4.210 → 0—
③ 1台4.56 → 3.018 → 4—
③ 2台3.04 → 4.1820.5 → 25
630 → 102(はっきり短い)
⑦ 0台4.22 → 4.480 → 0—
⑦ 1台4.98 → 3.846.5 → 6—
⑦ 2台2.89 → 4.8121.5 → 1753 → 77

10回と10回なら、順位の比べが23以下か77以上で、はっきり違うと見ます。はっきり違ったのは、③2台の向かい合う最長(U=83)と、③1台の人のあきらめ(51.5 → 39.5、U=79.5)だけでした。通路の狭い⑦でも、すれ違い入による悪さは見えません。⑦2台で時間切れが増える向き(中央1.5 → 3回、U=25.5)はありますが、はっきりではなく、皿はスタッフに回って店は最後まで回っています。

この60回を基準データ v4 にしました(エイイチの決定)。判定の基準の既定を 20261029_night_cs26_* に替え、v4 の60回そのものを判定にかけると、60回とも正常になりました。

判定に新しく出た印:③で1台 → 2台にすると、入店待ちが長くなる種が多い

3回目の夜の判定では、1つ新しい印が出ました。③の店で、ロボットを1台から2台に増やしたとき、10種のうち6種で入店待ちが長くなりました。サイトの試算では、ロボットを増やすと入店待ちは短くなります。その逆の向きです。v3(すれ違い切)では、この向きは出ていませんでした(1台4.56分 → 2台3.04分)。

2台にすると、ロボットどうしが会う場面が増えます。すれ違い入では、狭い所で速さを落として寄るので、その間に人の通り道が狭くなることが、入店待ちに効いているのかもしれません。まだ確かめていない見立てです。サイトの試算が正なので、Unity の数字に合わせてサイトを直すことはしません。次の店に広げながら、同じ向きが出るかを見ます。

作業ログ ― 次の店へ

③⑦の2つの店で、夜に回して朝に振り分ける流れが一通り通りました。次は、サイトにすでにある別の店の形に広げます。

店形卓
④
効率重視・狭い店・入口が右の壁
28
⑤ゆったり型・入口が正面の中央46
⑥ゆったり型・入口が左の壁38
②定番の郊外型(記憶の店)19

サイトが正なので、まずサイトの条件のファイル(serving-robot-params.json)に④の条件を書き出し、それを Unity が読んで店を建てます。1回ずつ回して確かめたあと、④の夜(ロボット0・1・2台 × 種10個)を回し、④の基準にします。

コードと記録の全量

この記事で使った分析・依頼文・codex のレビュー・Claude Code の報告・夜の記録・台帳の行・Unity のコード(ServiceSim/cs:27)の全文です。

比べに使った分析(compare_nights.py)

この記事のコード・ログ・データは、1ファイルずつ下に置いています。全文はリンク先にあります。

ファイルの一覧(32本)

01_compare_nights.py.txt ― compare_nights.py・3,523字

02_compare_nights_output.txt ― compare_nights_output.txt・6,910字

03_codex_review_request_v12_ledger.md ― codex_review_request_v12_ledger.md(codex へのレビュー依頼・cs:19 に合わせて直した版)・5,119字

04_codex_review_result_v12_ledger_1.md ― codex_review_result_v12_ledger_1.md(codex のレビュー結果)・10,204字

05_sec10.txt ― 20261026_1556_busycheck.txt・8,520字

06_20261026_1744_v14_ledger_fixes.txt ― 20261026_1744_v14_ledger_fixes.txt・11,040字

07_sec10.txt ― 20261027_2327_night1_70runs.txt・8,156字

08_20261027_0743_stuck_run_s0_passon.txt ― 20261027_0743_stuck_run_s0_passon.txt・8,200字

09_20261027_0804_v3_baseline_and_dish_fix.txt ― 20261027_0804_v3_baseline_and_dish_fix.txt・8,510字

10_20261027_0958_passby_default_on.txt ― 20261027_0958_passby_default_on.txt・5,607字

11_sec10.txt ― 20261027_1141_baseline_v4.txt・3,681字

12_night_20261027_runner_log.txt ― night/20261027/runner_log.txt・15,473字

13_night_20261027_runs.csv ― night/20261027/runs.csv・12,393字

14_night_20261028_runner_log.txt ― night/20261028/runner_log.txt・15,542字

15_night_20261028_runs.csv ― night/20261028/runs.csv・12,393字

16_night_20261029_runner_log.txt ― night/20261029/runner_log.txt・14,202字

17_night_20261029_runs.csv ― night/20261029/runs.csv・10,953字

18_sec12.csv ― unity_ledger_v1.csv の122〜325行目・73,203字

19_Assets_ServiceSim_Experiment_ServiceSimLedger.cs.txt ― Assets/ServiceSim/Experiment/ServiceSimLedger.cs・27,842字

20_Assets_ServiceSim_Experiment_LedgerRow.cs.txt ― Assets/ServiceSim/Experiment/LedgerRow.cs・12,843字

21_Assets_ServiceSim_Experiment_HeadlessRun.cs.txt ― Assets/ServiceSim/Experiment/HeadlessRun.cs・21,178字

22_Assets_ServiceSim_Experiment_ExperimentRunner.cs.txt ― Assets/ServiceSim/Experiment/ExperimentRunner.cs・68,688字

23_Assets_ServiceSim_Experiment_TripLogger.cs.txt ― Assets/ServiceSim/Experiment/TripLogger.cs・89,237字

24_Assets_ServiceSim_Experiment_RobotTrackLogger.cs.txt ― Assets/ServiceSim/Experiment/RobotTrackLogger.cs・4,635字

25_Assets_ServiceSim_Robot_RobotSpec.cs.txt ― Assets/ServiceSim/Robot/RobotSpec.cs・14,087字

26_Assets_ServiceSim_Robot_ServingRobotController.cs.txt ― Assets/ServiceSim/Robot/ServingRobotController.cs・114,775字

27_Assets_ServiceSim_Service_ServiceSpec.cs.txt ― Assets/ServiceSim/Service/ServiceSpec.cs・6,956字

28_Assets_ServiceSim_Service_ServiceOps.cs.txt ― Assets/ServiceSim/Service/ServiceOps.cs・65,138字

29_tools_make_queue.py.txt ― tools/make_queue.py・7,736字

30_tools_night_runner.py.txt ― tools/night_runner.py・31,090字

31_tools_ledger.py.txt ― tools/ledger.py・9,947字

32_tools_judge_night.py.txt ― tools/judge_night.py・15,191字

busycheck・すれ違いの入と切・v3 と v4 の比べは、このスクリプトで出しました。KIOXIA の service_sim/unity/ の中で動かし、台帳と各回の summary.json を読むだけです。

compare_nights.py

01_compare_nights.py.txt3,523字・94行・python
#!/usr/bin/env python3
"""compare_nights.py — LOG384 の比べ(busycheck・すれ違い入と切・v3 と v4)

service_sim/unity/ の中で動かす(台帳と各回の summary.json を読むだけ。何も書かない)。
  python3 compare_nights.py
順位の比べ(U)は「左が右より大きい組の数」。n=5 と 8 なら両側5%で U<=6 か U>=34、
n=10 と 10 なら U<=23 か U>=77、n=20 と 19 ならおよそ U<=120 か U>=260 が目安。
"""
別のタブで開く保存

compare_nights_output.txt

02_compare_nights_output.txt6,910字・71行・text
== busycheck ③1台・種1(1本ずつ 5回 / 4本同時 8回)
  動けなくなった                  1本ずつ 中央     1.000(1.000〜5.000) 4本同時 中央     7.000(2.000〜11.000) U(1本ずつ>4本同時)=4.0/40
  人のあきらめ                   1本ずつ 中央    34.000(23.000〜38.000) 4本同時 中央    38.000(32.000〜51.000) U(1本ずつ>4本同時)=8.5/40
  入店待ち(分)                  1本ずつ 中央     2.292(1.584〜2.330) 4本同時 中央     1.791(1.575〜3.046) U(1本ずつ>4本同時)=25.0/40
  ロボットが運んだ割合               1本ずつ 中央     0.699(0.675〜0.714) 4本同時 中央     0.660(0.636〜0.694) U(1本ずつ>4本同時)=35.0/40
  助けに行った                   1本ずつ 中央     1.000(1.000〜5.000) 4本同時 中央     7.000(2.000〜11.000) U(1本ずつ>4本同時)=4.0/40
  店員が遅れて運んだ皿               1本ずつ 中央    62.000(59.000〜67.000) 4本同時 中央    70.000(63.000〜75.000) U(1本ずつ>4本同時)=5.0/40
== すれ違い ③2台・2夜(切 20回 / 入 19回)
別のタブで開く保存

依頼文とレビュー

codex_review_request_v12_ledger.md(codex へのレビュー依頼・cs:19 に合わせて直した版)

03_codex_review_request_v12_ledger.md5,119字・93行・markdown
# コードレビュー依頼:夜の実行で台帳に書く所(サービスロボット導入シミュレーション・v12)

対象(読むだけ。書き換えない):Unity プロジェクト `/Users/shimazueiichi/Robotics_UX/ServiceSim/`(ServiceSim/cs:19)

- `Assets/ServiceSim/Experiment/ServiceSimLedger.cs`(台帳に1行足す。鍵もここ。Editor の外へ移した版)
- `Assets/ServiceSim/Experiment/LedgerRow.cs`(1行の中身を作る。Editor と画面なしで共通)
- `Assets/ServiceSim/Experiment/HeadlessRun.cs`(画面なしの実行ファイルで1回回す入口)
- `Assets/ServiceSim/Editor/BuildHeadless.cs`(`build_info.json` を書く。台帳の `unity_cs` の出どころ)
別のタブで開く保存

codex_review_result_v12_ledger_1.md(codex のレビュー結果)

04_codex_review_result_v12_ledger_1.md10,204字・57行・markdown
**現状では、70回・4本同時の本番は見送りを勧めます。** 通常の追記経路は整っていますが、古い鍵の回収で排他が破れる経路と、台帳への追記失敗を成功終了として扱う経路があります。追加された時刻記録にも修正が必要です。

ファイルは変更していません。コードの読解、実台帳の読み取り、ファイル操作をモックしたPython検証で確認しました。Unityの起動・実台帳への追記はしていません。

現物は **exFAT**。台帳はヘッダ込み117行で、ヘッダ59列・フォルダ名の重複なしでした。履歴中の旧49列行は異常扱いしていません。ビルド情報も指定の `cs19_20261026_1649`・保留0・schema 2と一致しています。

**A:ロジックの正しさ**
別のタブで開く保存

claude_code_request_v14_ledger_fixes.md(今夜の前に直す8つの依頼)

# 依頼 v14:codex レビュー(台帳に書く所)の指摘のうち、最初の夜の前に直すもの(2026-10-26)

レビュー結果:同じフォルダの codex_review_result_v12_ledger_1.md(判定は「見送り」)。
最初の夜(20261026・70回・4本同時)は、実行係を1つだけ起動し、途中で止めない・KIOXIA を抜かない・同じ夜を回し直さない前提で回す。その前提で、台帳が壊れる・行が黙って抜ける・Mac の中に書く道だけを先に塞ぐ。残りは「あとで直すもの」に回す。

## 変えないもの
- 店の回し方・ロボットと人の動き・記録の中身
- 台帳の列(59列・schema 2)。今までの行
- 夜の並び(種ごと)・runs.csv・queue.json の写し

## 今夜の前に直すもの

1. A2 古い鍵:年齢だけで鍵を消す処理をやめる(C# と Python の両方)。鍵が取れないまま待ちの上限を過ぎたら、その回は「台帳に書けなかった」として失敗にする(下の 3)。解放は、鍵の中身が自分のもの(PID など)のときだけ消す。待ちの上限は単調時計で測る
2. A4 半端な行:鍵の中で、台帳の最後の1バイトが改行かを確かめる。改行でなければ追記しない(自動で切り詰めない)。1行は UTF-8 で先に作り、1回で書く
3. B3 書けなかったときの扱い:Python も59列の名前と順番を全部照合する。C# の Append が false(重複で正しく拒否した場合は除く)なら、実行ファイルの終了コードを 3 にする。実行係は終了コード 3 を「台帳に書けなかった回」として runner_log と最後のまとめに出す
4. D7:Python が書く stopped / failed の行にも ledger_schema_version = 2 を入れる
5. A7(今夜に関わる所だけ):night_runner.py の build_info.json を探す場所を、実行ファイルの .app と同じ所に直す。見つからなければ始めない(cm status に頼らない)
6. A8:保留がある状態で作った実行ファイルは、夜の実行係が始めない(build_info の pending_changes が空でなければ止める)
7. D6・C3 マウント:KIOXIA が本当にマウントされているかを os.path.ismount('/Volumes/KIOXIA') で確かめる。夜のフォルダを作る前・ログを開く前・各回を起動する直前に確かめ、外れていたら新しい回を起動せず、フォルダも作らない。C# 側も書く前に同じ確かめ(Directory.Exists ではなく、マウントされていること)
8. B2:runs.csv は csv.writer で書く

## 確かめ(本物の台帳は使わない)
- 台帳のコピーを別の場所に置き、そこを指して確かめる(--unity-dir など)。本物の台帳と夜のフォルダには触らない
- 確かめる場面:鍵が残っている/台帳の最後が改行で終わっていない/ヘッダが1列違う/保留ありの build_info/KIOXIA がない(存在しないパスを渡す)
- それぞれで「台帳が1バイトも変わらない」「終了コードとログに出る」ことを報告する
- そのあと本物で、③1台・種1を4本同時で1束だけ回し(名札 fixcheck)、台帳に4行・runs.csv に4行入ることを確かめる
- 実行ファイルは直したあとの cs で、保留0で作り直す

## あとで直すもの(今夜は直さない。報告に一覧で残す)
- A6・C2 同じ夜を回し直したときの _try2 の扱い
- A9 Ctrl+C・SIGTERM で止めたときの runs.csv の記録
- A10 開始・終了の時刻の正確さ(今は5秒の見回りの分だけずれる)
- C4 ログが書けないときの例外
- A5 止めた回の wait()・照合エラー時の扱い
- B5 queue.json の写しの書き方
- A7 の残り(--cs-token ss{N}・pass_by の大文字小文字)

## 順番
- 作業の区切りごとに VCS の check-in。git add . と git clean は使わない
- 終わったら claude_code_reports に報告を書く

20261027_03_すれ違い入を標準に.md(依頼箱 03(すれ違い入を標準に))

---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 60
---
# 依頼:すれ違い入を標準にし、基準データ v4 の夜の準備をする(2026-10-27)

エイイチの決定(2026-10-27):ロボットどうしのすれ違いは「入」を標準にする。
根拠:2夜分(20261027・20261028)の ③2台で、入(19回)は切(20回)より、向かい合って止まった一番長い回がはっきり短い(中央 422秒 → 64秒)。客の待ち・ロボットが運んだ割合・人のあきらめは差があると言えない。

## やること

1. RobotSpec の passByEnabled の既定を「入」にして check-in する。
2. tools/make_queue.py の --pass-by の既定を on にする。--pass-by off で切の回も作れるまま残す。--pass-by-extra もそのまま残す。
3. 実行ファイルを作り直す(保留 0 で。Unity が開いていればコマンドから作れないので、その場合は手を止めて報告)。
4. --dry-run で、夜の名前 20261029・4本同時の 60回(③ fam_p1・⑦ fam_p5 × ロボット 0・1・2台 × 種0〜9、全部すれ違い入、種ごとの並び)を確かめる。60回が並び、出力フォルダ名の末尾の付け方(入が標準になったときに _passon が付くか付かないか)を報告する。
5. judge_night.py の基準の既定は v3(20261027_night_cs21_*、_passon を除く)のまま変えない。v4 の夜が終わってエイイチが確かめたあとで替える。

## 変えないもの

- 店の回し方・人の動き・皿の打ち切り上限・robot_track.csv
- 台帳の列(59列・schema 2)と今までの行。台帳に新しい行を書く確かめはしない(--dry-run だけ)
- 本番の夜は回さない(エイイチが台帳を退避してから回す)

## 報告

claude_code_reports に 20261027_HHMM_passby_default_on.txt として書く(場所:~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/)。
入れた cs 番号・作った実行ファイルの build_id と保留の有無・--dry-run の最初と最後の数行・出力フォルダ名の形・本番のコマンド(夜の名前 20261029)を書く。

20261027_04_v4の夜を回す.md(依頼箱 04(v4 の夜を回す))

---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 150
---
# 依頼:基準データ v4 の夜(20261029・60回・すれ違い入)を回す(2026-10-27)

エイイチが「v4 を回す」と決め、回し始めるのを自動にするよう頼んだ。台帳の退避は Claude がもう済ませた。
- 退避先:/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_prenight_20261029/unity_ledger_v1.csv
- 265 行・md5 b7f65cde2f6f5b1396cb706974bea226

## 始める前に確かめること(1つでも違えば回さずに報告して終わる)

1. Unity エディタが起動していない(pgrep などで確かめる。起動していたら閉じずに報告して終わる)
2. /Volumes/KIOXIA がマウントされている(os.path.ismount)
3. 本物の台帳 /Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv の md5 が上の退避と同じ(違えば、退避のあとに台帳が変わっている)
4. 鍵ファイル unity_ledger_v1.lock がない
5. ServiceSim の保留が 0 で、実行ファイルの build_info が cs26_20261027_0956・保留なし

## 回す

作業フォルダで、次の2つを順に実行する。night_runner.py は終わるまで待つ(約50分)。

```
python3 tools/make_queue.py --out queue.json
python3 tools/night_runner.py --queue queue.json --parallel 4 --night 20261029
```

- 回している間は、ほかの作業をしない。Assets・tools・設定ファイルを開かない・変えない。Unity を開かない
- Ctrl+C で止めない。途中で止まっても、同じ夜を回し直さない(そのまま報告する)

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261029_night_v4.txt として書く(場所:~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/)。
- 始める前の確かめ5つの結果
- runner_log.txt のまとめ(completed の回数・失敗・止まった回・終了コード3・最長の実時間)
- 台帳の行数(265 → 325 になるはず)と、先頭 265 行の md5 が退避と同じか
- 全員が帰らなかった回があれば、その回の名前(原因の調べはしない)
- judge.md ができたか(中身の判断はしない。v4 にするかはエイイチと Claude が決める)

20261027_05_基準をv4に.md(依頼箱 05(基準を v4 に))

---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 60
---
# 依頼:基準データを v4 に替える(2026-10-27)

エイイチの決定(2026-10-27):v4 の夜(20261029_night_cs26_*・すれ違い入・60回)を基準データ v4 にする。
v3(20261027_night_cs21_*、すれ違い切)と比べて、③2台で向かい合って止まる最長がはっきり短く、それ以外の数字にはっきりした差がなかったため。

## やること

1. tools/judge_night.py の基準の既定を 20261029_night_cs26_* にし、既定の除外(*_passon*)を外す(--baseline-exclude で指定したときだけ除く形は残す)。
2. tools/make_queue.py:--pass-by が on のときに --pass-by-extra が指定されたら、誤りとして止める(同じ回が2回並び、出力フォルダ名がぶつかるため)。
3. 実行ファイルを手で起こしたときの -ssPassBy の既定を入にそろえる(HeadlessRun.cs)。夜の実行係は毎回指定を渡すので、夜の回の動きは変わらない。
4. 3 で Assets を変えたので、実行ファイルを作り直す(保留 0)。
5. 確かめ(台帳に新しい行を書かない)
   - judge_night.py を v4 の60回そのものに当てて(--runs '20261029_night_*' --out は一時フォルダ)、正常 60・回の失敗 0・基準なし 0 になること
   - make_queue.py に --pass-by-extra fam_p1_s4_r2_a42 を付けて、誤りで止まること
   - --dry-run(夜の名前 20261030)で60回が並び、-ssPassBy on が渡ること
6. check-in(個別に指定。git add . と git clean は使わない)

## 変えないもの
- 店の回し方・人とロボットの動き・台帳の列と今までの行・night/ の記録
- 本番の夜は回さない

## 報告
claude_code_reports に 20261027_HHMM_baseline_v4.txt として書く(場所:~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/)。cs 番号・build_id と保留の有無・5 の確かめの結果を書く。

依頼箱の結果 20261027_03_すれ違い入を標準に_20261027_0952.md

# 結果:20261027_03_すれ違い入を標準に

- 状態:完了
- 始めた時刻:2026-10-27 09:52
- 終わった時刻:2026-10-27 09:57(5分)
- 作業フォルダ:/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume d6b8340e-d116-41a3-9203-442063340d8a`

## Claude Code の報告

**やったこと**
- RobotSpec の passByEnabled の既定を「入」にしました。設定ファイル(.asset)の値も 0 から 1 にしています。実際に効くのはこちらの値です。
- tools/make_queue.py の --pass-by の既定を on にしました。--pass-by off で切の回も作れます。--pass-by-extra は変えていません。
- 上の2つを3ファイル個別に指定して check-in しました(**cs:26**、保留 0)。
- Unity は閉じていたので、コマンドから実行ファイルを作り直しました。
- 夜の名前 20261029・4本同時で --dry-run を行いました。
- judge_night.py の基準は v3 のまま触っていません。本番の夜は回しておらず、台帳にも書いていません。

**結果**
- 実行ファイル:build_id **cs26_20261027_0956**、保留 なし、作ったあとも保留 0 です。
- --dry-run は終了コード 0 で、**60回**(切 0回・入 60回)が種ごとに並びました。種0 の全6条件 → 種1 → … の順です。
  - 最初:1 回め fam_p1_s4_r0_a42 種0 すれ違い入 → 20261029_night_cs26_fam_p1_r0_s0_passon
  - 最後:60 回め fam_p5_s4_r2_a42 種9 すれ違い入 → 20261029_night_cs26_fam_p5_r2_s9_passon
- 出力フォルダ名は `20261029_night_cs26_{店}_r{台数}_s{種}_passon` の形です。入が標準になっても **_passon は付きます**。切の回は前と同じで末尾が付きません。
- から回しで KIOXIA の night/20261029/ にログが1つできました。本番のログと混ざらないよう runner_log_dryrun_20261027.txt に改名しました(消していません)。出力フォルダと台帳の行は 0 で、台帳は 265 行のままです。
- 本番のコマンドは次のとおりです(台帳を退避して、Unity を閉じてから)。
  ```
  cd /Users/shimazueiichi/Robotics_UX/ServiceSim
  python3 tools/make_queue.py --out queue.json
  python3 tools/night_runner.py --queue queue.json --parallel 4 --night 20261029
  ```

**変えたファイル**
- Assets/ServiceSim/Robot/RobotSpec.cs
- Assets/ServiceSim/Robot/RobotSpec.asset
- tools/make_queue.py
- 報告:claude_code_reports/20261027_0958_passby_default_on.txt

**決めてほしいこと**
1. **v4 に替えるときは、除く決まりも一緒に替える必要があります。** v4 の60回は全部 _passon が付きます。いまの「_passon を除く」のまま基準を 20261029_night_cs26_* にすると、基準が 0 回になります。
2. **夜の最後に自動で行う判定は、基準 v3(切)と比べます。** 入の60回を切の基準と比べるので、印が付くことがあります。v4 は判定の印ではなく、数字そのもので確かめてください。
3. **--pass-by-extra は変えていないので、既定の入と一緒に使うと名前がぶつかります。** 同じ回が2回並び、出力フォルダ名が重なります。--pass-by off のときだけ使うか、直すかを決めてください。
4. **実行ファイルを手で起こすときの既定は、まだ切です。** -ssPassBy を付けないと切で回ります(HeadlessRun.cs)。夜の実行では毎回この指定を渡すので影響はありません。既定を入に揃えるかを決めてください(依頼の範囲外なので触っていません)。

依頼箱の結果 20261027_04_v4の夜を回す_20261027_1018.md

# 結果:20261027_04_v4の夜を回す

- 状態:完了
- 始めた時刻:2026-10-27 10:18
- 終わった時刻:2026-10-27 11:39(81分)
- 作業フォルダ:/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume 3ca18741-89aa-4270-8a67-bbe1d36b8843`

## Claude Code の報告

**やったこと**
- night_runner が終わったことはすでに確かめ、報告も書き終えていたので、今回はあとで自動で起きる予定を止めただけです。

**結果**
- 夜 20261029 は 60 回とも completed で、失敗・止まった回・終了コード 3 は 0 回でした。night_runner の終了コードは 0 です。
- 実時間は平均 3.9 分、最長 4.8 分でした。
- 台帳は 265 行から 325 行になりました。先頭 265 行の md5 は退避と同じでした。
- 全員が帰らなかった回はありません。
- judge.md はできています。

**変えたファイル**
- 今回はなし。夜の実行で変わったファイルと報告ファイル(claude_code_reports/20261029_night_v4.txt)は、前の報告に書いたとおりです。

**決めてほしいこと**
- v4 にするかどうか。judge.md を見て、エイイチと Claude で決めてください。

依頼箱の結果 20261027_05_基準をv4に_20261027_1139.md

# 結果:20261027_05_基準をv4に

- 状態:完了
- 始めた時刻:2026-10-27 11:39
- 終わった時刻:2026-10-27 11:42(3分)
- 作業フォルダ:/Users/shimazueiichi/Robotics_UX/ServiceSim
- この続きを Claude Code で話すとき:作業フォルダで `claude --resume d996f97a-09e9-4ade-ba46-f4f492dbd4d7`

## Claude Code の報告

**やったこと**
- judge_night.py:基準データの既定を v4(20261029_night_cs26_*)に替え、既定の除外(*_passon*)をやめました。--baseline-exclude を渡したときだけ除く形は残しています。
- make_queue.py:すれ違いが入のとき(既定)に --pass-by-extra を渡すと、理由を出して止まるようにしました。
- HeadlessRun.cs:-ssPassBy を渡さないときの既定を「入」にしました。
- 3つのファイルを個別に指定して check-in し、cs:27 になりました。そのあと実行ファイルを作り直しました。
- 実行ファイルの番号(build_id)は cs27_20261027_1141 で、保留は 0 です(作り直したあとも 0 のまま)。
- 本番の夜は回していません。台帳にも書いていません。

**結果**
- **v4 の60回への判定**:基準 60回、振り分けた回 60回。正常 60・回の失敗 0・基準なし 0 でした。何も外さずに基準が組めています。台帳は前後とも 325 行で、中身も変わっていません。
- **--pass-by-extra fam_p1_s4_r2_a42**:誤りとして止まりました(終了コード 1)。並べた回のファイルは作られていません。--pass-by off と一緒に使う場合は、今までどおり 70回(入 10回)が並びます。
- **から回し(夜の名前 20261030・4本同時)**:60回が並び、60本すべてに -ssPassBy on が渡りました(off は 0本)。出力フォルダ名は 20261030_night_cs27_…_passon の形です。
- から回しで night/20261030/ にできた runner_log.txt は、本番の記録と混ざらないよう runner_log_dryrun_20261027.txt に名前を替えました。消してはいません。

**変えたファイル**
- tools/judge_night.py
- tools/make_queue.py
- Assets/ServiceSim/Experiment/HeadlessRun.cs
- Builds/headless/(作り直した実行ファイルと build_info.json)
- 報告:claude_code_reports/20261027_1141_baseline_v4.txt

**決めてほしいこと**
なし

(範囲外なので触っていませんが、ひとつ気づいたことがあります。judge_night.py の印の文に「基準 v2 でも同じ(既知)」という古い名前が残っています。直すかどうかは、必要なら依頼してください。)

Claude Code の報告

20261026_1556_busycheck.txt

05_sec10.txt8,520字・243行・text
====================================================================
busycheck:同時に何本走らせるかで数字が動くか
③1台・種1(fam_p1_s4_r1_a42・種1)/Unity エディタを閉じて
2026-10-26 15:56
====================================================================

結論
別のタブで開く保存

20261026_1744_v14_ledger_fixes.txt

06_20261026_1744_v14_ledger_fixes.txt11,040字・329行・text
====================================================================
依頼 v14:codex レビューの指摘のうち、最初の夜の前に直す8つ
2026-10-26 17:44 check-in:ServiceSim/cs:21(保留 0)
====================================================================

結論

  ・8つぜんぶ直しました。実行ファイルも cs:21・保留 0 で作り直しました
別のタブで開く保存

20261027_2327_night1_70runs.txt

07_sec10.txt8,156字・242行・text
====================================================================
最初の夜:70回・4本同時(night 20261027)の結果
2026-10-26 22:11 〜 23:25(1時間15分)/ServiceSim/cs:21
====================================================================

結論

  ・**70回ぜんぶ completed・終了コード 0**。止まった回・落ちた回・
別のタブで開く保存

20261027_0743_stuck_run_s0_passon.txt

====================================================================
720 分終わらなかった回の調べ
20261027_night_cs21_fam_p1_r2_s0_passon(③2台・すれ違い入・種0)
2026-10-27 07:43 調べただけ。Assets は直していません
====================================================================

結論(ひとことで)
別のタブで開く保存

20261027_0804_v3_baseline_and_dish_fix.txt

====================================================================
基準データ v3・皿の打ち切り上限・原因の調べ
2026-10-27 08:04 check-in:cs:22・cs:23・cs:24(保留 0)
====================================================================

結論

  1. 基準データ v3 に替えました(**cs:22**)。基準どうしの確かめで
別のタブで開く保存

20261027_0958_passby_default_on.txt

====================================================================
すれ違い「入」を標準にする・基準データ v4 の夜の準備
2026-10-27 09:58 check-in:cs:26(保留 0)
====================================================================

結論

  ・RobotSpec の passByEnabled の既定を「入」にしました(**cs:26**)。
別のタブで開く保存

20261029_night_v4.txt

基準データ v4 の夜(20261029・60回・すれ違い入)報告(2026-10-27)

■ 始める前の確かめ(5つとも合格)
1. Unity エディタ:起動していない(Unity Hub は起動していたが、エディタ本体は動いていない)
2. /Volumes/KIOXIA:マウントされている(os.path.ismount = True)
3. 台帳の md5:b7f65cde2f6f5b1396cb706974bea226(退避と同じ・265 行)
4. 鍵ファイル unity_ledger_v1.lock:なし
5. ServiceSim の保留:0(cm status で保留なし・cs:26 head)
   build_info:build_id = cs26_20261027_0956、pending_changes = 空(保留なし)

■ 回した内容
- make_queue.py:60 回(条件 6 × 種 0〜9、すれ違い 入 60 回・切 0 回)、試算の版 v2.8、店の形の版 8a5b2f6a016a
- night_runner.py --parallel 4 --night 20261029:10:19:09 開始 → 11:18:48 終了、終了コード 0

■ runner_log.txt のまとめ(night/20261029/runner_log.txt)
- completed:60 回
- 失敗:0 回
- 止まった回:0 回
- 終了コード 3:0 回
- 実時間:平均 3.9 分、最長 4.8 分(20261029_night_cs26_fam_p5_r2_s6_passon)

■ 台帳
- 行数:265 → 325(60 行増えた)
- 先頭 265 行の md5:b7f65cde2f6f5b1396cb706974bea226(退避と同じ)
- 新しい 60 行:status はすべて completed、鍵ファイルは残っていない

■ 全員が帰らなかった回
- なし(新しい 60 行すべて everyone_left = 1)

■ judge.md
- できた:/Volumes/KIOXIA/r2r2r-data/service_sim/unity/night/20261029/judge.md(中身の判断はしていない)

20261027_1141_baseline_v4.txt

11_sec10.txt3,681字・94行・text
====================================================================
基準データを v4 に替える
2026-10-27 11:41 check-in:cs:27(保留 0)
====================================================================

結論

  ・judge_night.py の基準の既定を **20261029_night_cs26_*(v4・すれ違い入の60回)** に
別のタブで開く保存

夜の記録(KIOXIA の service_sim/unity/night/)

night/20261027(最初の夜・cs:21・70回)

night/20261027/runner_log.txt

12_night_20261027_runner_log.txt15,473字・155行・text
2026-10-26 22:11:01  === 夜の実行係を始めます(night 20261027・同時 4 本・上限 90.0 分)===
2026-10-26 22:11:01  並べた回: queue.json(70 回)
2026-10-26 22:11:01  台帳: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv(59 列)
2026-10-26 22:11:01  版: ServiceSim/cs:21(Builds/headless/build_info.json)→ 出力フォルダの字 cs21
2026-10-26 22:11:01  並べた回の試算の版: v2.8 / 店の形の版: 8a5b2f6a016a
2026-10-26 22:11:01  スリープを止めました(caffeinate pid 7845)
2026-10-26 22:11:01  並べた回を写しました: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/night/20261027/queue.json
2026-10-26 22:11:01  並べた回 70 / もう completed の回を飛ばす 0 / 回す 70
別のタブで開く保存

night/20261027/judge.md

# 夜の結果の振り分け(20261027_night_*)

基準データ: 20261025_stageB_cs7_*(18回)/振り分けた回: 70回

| 振り分け | 回数 |
|---|---|
| 正常 | 30 |
| 試算を見直す候補 | 0 |
| Unity の作り | 30 |
| 回の失敗 | 1 |
| 基準なし | 9 |

## 回の失敗

- 20261027_night_cs21_fam_p1_r2_s0_passon: 全員が帰っていない

## 基準なし(基準データに同じ条件がないので判定していない)

- fam_p1 スタッフ4 ロボット2台・すれ違い入

## Unity の作り(種の中央値が、基準の同じ条件の最大を超えた)

- fam_p1 スタッフ4 ロボット1台: 30秒以上の止まり(1往復あたり) 0.203(基準 0.083〜0.182)
- fam_p5 スタッフ4 ロボット1台: 30秒以上の止まり(1往復あたり) 0.152(基準 0.075〜0.119)
- fam_p5 スタッフ4 ロボット1台: 動けなくなった(60秒) 6.5(基準 3.0〜3.0)
- fam_p5 スタッフ4 ロボット2台: 瞬間移動 69.0(基準 47.0〜59.0)

## 試算を見直す候補

### ロボットを増やしたときの向きが、種の過半数で試算と逆

- なし

### Unity÷試算 の大きさが、基準の同じ条件の範囲から外れた

- fam_p5 スタッフ4 ロボット1台: 料理の待ち(Unity÷試算) 1.24倍(基準 0.95〜1.22倍)
- fam_p5 スタッフ4 ロボット2台: 料理の待ち(Unity÷試算) 1.4倍(基準 1.52〜1.57倍)

## 記録(印にしない):試算との差の大きさ(条件ごとの種の中央値・Unity÷試算)

| 条件 | 種の数 | 入店待ち | 料理の待ち | 席は空いているのに待った |
|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット0台 | 10 | 1.24 | 2.05 | 3.01 |
| fam_p1 スタッフ4 ロボット2台・すれ違い入 | 9 | 5.25 | 1.62 | 10.89 |
| fam_p1 スタッフ4 ロボット1台 | 10 | 1.76 | 1.25 | 3.22 |
| fam_p1 スタッフ4 ロボット2台 | 10 | 2.58 | 1.57 | 3.54 |
| fam_p5 スタッフ4 ロボット0台 | 10 | 1.53 | 2.19 | 3.39 |
| fam_p5 スタッフ4 ロボット1台 | 10 | 2.75 | 1.24 | 6.53 |
| fam_p5 スタッフ4 ロボット2台 | 10 | 1.47 | 1.40 | 2.72 |

## すれ違い 入 と 切 の比べ(同じ夜・同じ条件・種の中央値。印にしない)

| 条件 | 入店待ち | 料理の待ち | 席は空いているのに待った | 動けなくなった | あきらめた | ロボットが運んだ割合 |
|---|---|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット2台(10回) | 3.04 | 1.49 | 1.36 | 20.50 | 59.50 | 0.93 |
| fam_p1 スタッフ4 ロボット2台・すれ違い入(9回) | 6.19 | 1.54 | 4.20 | 23.00 | 66.00 | 0.91 |

線: 立ち往生 30秒以上の止まり/向きは 5%・0.2分より小さい変化を数えない/外れは基準の同じ条件の最小〜最大

night/20261027/runs.csv

13_night_20261027_runs.csv12,393字・71行・csv
folder,condition,seed,pass_by,tryno,launch_running,parallel,started_iso,ended_iso,started_unix,ended_unix,started_mono,ended_mono,wall_s,status,exit_code
20261027_night_cs21_fam_p1_r0_s0,fam_p1_s4_r0_a42,0,off,1,1,4,2026-10-26T22:11:01,2026-10-26T22:14:21,1793020261.620,1793020461.753,246064.959,246265.092,200.133,completed,0
20261027_night_cs21_fam_p1_r1_s0,fam_p1_s4_r1_a42,0,off,1,2,4,2026-10-26T22:11:06,2026-10-26T22:14:41,1793020266.624,1793020481.766,246069.963,246285.105,215.143,completed,0
20261027_night_cs21_fam_p5_r0_s0,fam_p5_s4_r0_a42,0,off,1,4,4,2026-10-26T22:11:16,2026-10-26T22:14:46,1793020276.636,1793020486.777,246079.976,246290.116,210.141,completed,0
20261027_night_cs21_fam_p1_r2_s0,fam_p1_s4_r2_a42,0,off,1,3,4,2026-10-26T22:11:11,2026-10-26T22:15:01,1793020271.629,1793020501.796,246074.969,246305.135,230.167,completed,0
20261027_night_cs21_fam_p5_r1_s0,fam_p5_s4_r1_a42,0,off,1,4,4,2026-10-26T22:14:21,2026-10-26T22:18:11,1793020461.840,1793020691.998,246265.101,246495.258,230.158,completed,0
20261027_night_cs21_fam_p5_r2_s0,fam_p5_s4_r2_a42,0,off,1,4,4,2026-10-26T22:14:41,2026-10-26T22:18:47,1793020481.855,1793020727.019,246285.114,246530.279,245.165,completed,0
20261027_night_cs21_fam_p1_r0_s1,fam_p1_s4_r0_a42,1,off,1,4,4,2026-10-26T22:15:01,2026-10-26T22:19:02,1793020501.882,1793020742.034,246305.141,246545.293,240.152,completed,0
別のタブで開く保存

night/20261028(2回目の夜・cs:25・70回)

night/20261028/runner_log.txt

14_night_20261028_runner_log.txt15,542字・155行・text
2026-10-27 08:33:59  === 夜の実行係を始めます(night 20261028・同時 4 本・上限 90.0 分)===
2026-10-27 08:33:59  並べた回: queue.json(70 回)
2026-10-27 08:33:59  台帳: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv(59 列)
2026-10-27 08:33:59  版: ServiceSim/cs:25(Builds/headless/build_info.json)→ 出力フォルダの字 cs25
2026-10-27 08:33:59  並べた回の試算の版: v2.8 / 店の形の版: 8a5b2f6a016a
2026-10-27 08:33:59  スリープを止めました(caffeinate pid 22110)
2026-10-27 08:33:59  並べた回を写しました: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/night/20261028/queue.json
2026-10-27 08:33:59  並べた回 70 / もう completed の回を飛ばす 0 / 回す 70
別のタブで開く保存

night/20261028/judge.md

# 夜の結果の振り分け(20261028_night_*)

基準データ: 20261027_night_cs21_*(*_passon* を除く)(60回)/振り分けた回: 70回

| 振り分け | 回数 |
|---|---|
| 正常 | 60 |
| 試算を見直す候補 | 0 |
| Unity の作り | 0 |
| 回の失敗 | 0 |
| 基準なし | 10 |

## 回の失敗

- なし

## 基準なし(基準データに同じ条件がないので判定していない)

- fam_p1 スタッフ4 ロボット2台・すれ違い入

## Unity の作り(種の中央値が、基準の同じ条件の最大を超えた)

- なし

## 試算を見直す候補

### ロボットを増やしたときの向きが、種の過半数で試算と逆

- なし

### Unity÷試算 の大きさが、基準の同じ条件の範囲から外れた

- なし

## 記録(印にしない):試算との差の大きさ(条件ごとの種の中央値・Unity÷試算)

| 条件 | 種の数 | 入店待ち | 料理の待ち | 席は空いているのに待った |
|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット0台 | 10 | 1.27 | 2.01 | 3.12 |
| fam_p1 スタッフ4 ロボット2台・すれ違い入 | 10 | 2.63 | 1.85 | 4.71 |
| fam_p1 スタッフ4 ロボット1台 | 10 | 1.17 | 1.23 | 2.10 |
| fam_p1 スタッフ4 ロボット2台 | 10 | 2.53 | 1.50 | 4.47 |
| fam_p5 スタッフ4 ロボット0台 | 10 | 1.63 | 2.14 | 3.68 |
| fam_p5 スタッフ4 ロボット1台 | 10 | 1.98 | 1.25 | 3.48 |
| fam_p5 スタッフ4 ロボット2台 | 10 | 1.82 | 1.45 | 4.23 |

## すれ違い 入 と 切 の比べ(同じ夜・同じ条件・種の中央値。印にしない)

| 条件 | 入店待ち | 料理の待ち | 席は空いているのに待った | 動けなくなった | あきらめた | ロボットが運んだ割合 |
|---|---|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット2台(10回) | 2.98 | 1.42 | 1.72 | 26.50 | 64.00 | 0.93 |
| fam_p1 スタッフ4 ロボット2台・すれ違い入(10回) | 3.10 | 1.76 | 1.81 | 16.00 | 57.00 | 0.88 |

線: 立ち往生 30秒以上の止まり/向きは 5%・0.2分より小さい変化を数えない/外れは基準の同じ条件の最小〜最大

night/20261028/runs.csv

15_night_20261028_runs.csv12,393字・71行・csv
folder,condition,seed,pass_by,tryno,launch_running,parallel,started_iso,ended_iso,started_unix,ended_unix,started_mono,ended_mono,wall_s,status,exit_code
20261028_night_cs25_fam_p1_r0_s0,fam_p1_s4_r0_a42,0,off,1,1,4,2026-10-27T08:33:59,2026-10-27T08:37:24,1793057639.433,1793057844.549,283442.711,283647.826,205.115,completed,0
20261028_night_cs25_fam_p1_r1_s0,fam_p1_s4_r1_a42,0,off,1,2,4,2026-10-27T08:34:04,2026-10-27T08:37:39,1793057644.440,1793057859.570,283447.717,283662.847,215.130,completed,0
20261028_night_cs25_fam_p5_r0_s0,fam_p5_s4_r0_a42,0,off,1,4,4,2026-10-27T08:34:14,2026-10-27T08:37:39,1793057654.451,1793057859.570,283457.728,283662.847,205.119,completed,0
20261028_night_cs25_fam_p1_r2_s0,fam_p1_s4_r2_a42,0,off,1,3,4,2026-10-27T08:34:09,2026-10-27T08:37:49,1793057649.444,1793057869.606,283452.721,283672.883,220.162,completed,0
20261028_night_cs25_fam_p5_r1_s0,fam_p5_s4_r1_a42,0,off,1,4,4,2026-10-27T08:37:24,2026-10-27T08:40:59,1793057844.562,1793058059.730,283647.838,283863.006,215.168,completed,0
20261028_night_cs25_fam_p5_r2_s0,fam_p5_s4_r2_a42,0,off,1,3,4,2026-10-27T08:37:39,2026-10-27T08:41:19,1793057859.579,1793058079.744,283662.855,283883.020,220.165,completed,0
20261028_night_cs25_fam_p1_r2_s0_passon,fam_p1_s4_r2_a42,0,on,1,4,4,2026-10-27T08:37:44,2026-10-27T08:41:24,1793057864.606,1793058084.755,283667.882,283888.030,220.148,completed,0
別のタブで開く保存

night/20261029(3回目の夜・基準データ v4・cs:26・60回)

night/20261029/runner_log.txt

16_night_20261029_runner_log.txt14,202字・135行・text
2026-10-27 10:19:09  === 夜の実行係を始めます(night 20261029・同時 4 本・上限 90.0 分)===
2026-10-27 10:19:09  並べた回: queue.json(60 回)
2026-10-27 10:19:09  台帳: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv(59 列)
2026-10-27 10:19:09  版: ServiceSim/cs:26(Builds/headless/build_info.json)→ 出力フォルダの字 cs26
2026-10-27 10:19:09  並べた回の試算の版: v2.8 / 店の形の版: 8a5b2f6a016a
2026-10-27 10:19:09  スリープを止めました(caffeinate pid 25702)
2026-10-27 10:19:09  並べた回を写しました: /Volumes/KIOXIA/r2r2r-data/service_sim/unity/night/20261029/queue.json
2026-10-27 10:19:09  並べた回 60 / もう completed の回を飛ばす 0 / 回す 60
別のタブで開く保存

night/20261029/judge.md

# 夜の結果の振り分け(20261029_night_*)

基準データ: 20261027_night_cs21_*(*_passon* を除く)(60回)/振り分けた回: 60回

| 振り分け | 回数 |
|---|---|
| 正常 | 0 |
| 試算を見直す候補 | 0 |
| Unity の作り | 0 |
| 回の失敗 | 0 |
| 基準なし | 60 |

## 回の失敗

- なし

## 基準なし(基準データに同じ条件がないので判定していない)

- fam_p1 スタッフ4 ロボット0台・すれ違い入
- fam_p1 スタッフ4 ロボット1台・すれ違い入
- fam_p1 スタッフ4 ロボット2台・すれ違い入
- fam_p5 スタッフ4 ロボット0台・すれ違い入
- fam_p5 スタッフ4 ロボット1台・すれ違い入
- fam_p5 スタッフ4 ロボット2台・すれ違い入

## Unity の作り(種の中央値が、基準の同じ条件の最大を超えた)

- なし

## 試算を見直す候補

### ロボットを増やしたときの向きが、種の過半数で試算と逆

- fam_p1 スタッフ4・すれ違い入 1→2台: 入店待ち(試算は短くなる)— 逆 6/10 種 — 新しく出た

### Unity÷試算 の大きさが、基準の同じ条件の範囲から外れた

- なし

## 記録(印にしない):試算との差の大きさ(条件ごとの種の中央値・Unity÷試算)

| 条件 | 種の数 | 入店待ち | 料理の待ち | 席は空いているのに待った |
|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット0台・すれ違い入 | 10 | 1.28 | 2.04 | 2.91 |
| fam_p1 スタッフ4 ロボット1台・すれ違い入 | 10 | 1.16 | 1.23 | 2.28 |
| fam_p1 スタッフ4 ロボット2台・すれ違い入 | 10 | 3.54 | 1.70 | 6.68 |
| fam_p5 スタッフ4 ロボット0台・すれ違い入 | 10 | 1.63 | 2.18 | 3.58 |
| fam_p5 スタッフ4 ロボット1台・すれ違い入 | 10 | 2.11 | 1.24 | 4.47 |
| fam_p5 スタッフ4 ロボット2台・すれ違い入 | 10 | 2.44 | 1.55 | 6.04 |

## すれ違い 入 と 切 の比べ(同じ夜・同じ条件・種の中央値。印にしない)

| 条件 | 入店待ち | 料理の待ち | 席は空いているのに待った | 動けなくなった | あきらめた | ロボットが運んだ割合 |
|---|---|---|---|---|---|---|
| fam_p1 スタッフ4 ロボット0台(0回) | - | - | - | - | - | - |
| fam_p1 スタッフ4 ロボット0台・すれ違い入(10回) | 4.21 | 0.94 | 2.78 | 0.00 | 12.50 | 0.00 |
| fam_p1 スタッフ4 ロボット1台(0回) | - | - | - | - | - | - |
| fam_p1 スタッフ4 ロボット1台・すれ違い入(10回) | 3.01 | 2.40 | 1.30 | 4.00 | 39.50 | 0.71 |
| fam_p1 スタッフ4 ロボット2台(0回) | - | - | - | - | - | - |
| fam_p1 スタッフ4 ロボット2台・すれ違い入(10回) | 4.17 | 1.62 | 2.57 | 25.00 | 66.50 | 0.92 |
| fam_p5 スタッフ4 ロボット0台(0回) | - | - | - | - | - | - |
| fam_p5 スタッフ4 ロボット0台・すれ違い入(10回) | 4.48 | 0.98 | 3.20 | 0.00 | 15.00 | 0.00 |
| fam_p5 スタッフ4 ロボット1台(0回) | - | - | - | - | - | - |
| fam_p5 スタッフ4 ロボット1台・すれ違い入(10回) | 3.84 | 2.44 | 2.17 | 6.00 | 45.00 | 0.67 |
| fam_p5 スタッフ4 ロボット2台(0回) | - | - | - | - | - | - |
| fam_p5 スタッフ4 ロボット2台・すれ違い入(10回) | 4.81 | 1.52 | 2.70 | 17.00 | 50.50 | 0.92 |

線: 立ち往生 30秒以上の止まり/向きは 5%・0.2分より小さい変化を数えない/外れは基準の同じ条件の最小〜最大

night/20261029/runs.csv

17_night_20261029_runs.csv10,953字・61行・csv
folder,condition,seed,pass_by,tryno,launch_running,parallel,started_iso,ended_iso,started_unix,ended_unix,started_mono,ended_mono,wall_s,status,exit_code
20261029_night_cs26_fam_p1_r0_s0_passon,fam_p1_s4_r0_a42,0,on,1,1,4,2026-10-27T10:19:09,2026-10-27T10:22:29,1793063949.266,1793064149.387,289752.372,289952.493,200.121,completed,0
20261029_night_cs26_fam_p1_r1_s0_passon,fam_p1_s4_r1_a42,0,on,1,2,4,2026-10-27T10:19:14,2026-10-27T10:22:49,1793063954.279,1793064169.407,289757.385,289972.513,215.128,completed,0
20261029_night_cs26_fam_p5_r0_s0_passon,fam_p5_s4_r0_a42,0,on,1,4,4,2026-10-27T10:19:24,2026-10-27T10:22:49,1793063964.292,1793064169.407,289767.398,289972.513,205.115,completed,0
20261029_night_cs26_fam_p1_r2_s0_passon,fam_p1_s4_r2_a42,0,on,1,3,4,2026-10-27T10:19:19,2026-10-27T10:22:59,1793063959.285,1793064179.421,289762.391,289982.527,220.137,completed,0
20261029_night_cs26_fam_p5_r1_s0_passon,fam_p5_s4_r1_a42,0,on,1,4,4,2026-10-27T10:22:29,2026-10-27T10:25:59,1793064149.399,1793064359.578,289952.503,290162.682,210.179,completed,0
20261029_night_cs26_fam_p1_r0_s1_passon,fam_p1_s4_r0_a42,1,on,1,4,4,2026-10-27T10:22:54,2026-10-27T10:26:29,1793064174.421,1793064389.612,289977.525,290192.716,215.191,completed,0
20261029_night_cs26_fam_p1_r1_s1_passon,fam_p1_s4_r1_a42,1,on,1,4,4,2026-10-27T10:22:59,2026-10-27T10:26:49,1793064179.428,1793064409.632,289982.532,290212.736,230.204,completed,0
別のタブで開く保存

台帳の行(unity_ledger_v1.csv・この記事で回した回)

205行(ヘッダ1行と、122行目〜325行目。busycheck・fixcheck・3晩の夜・確かめの回)。

unity_ledger_v1.csv の122〜325行目

18_sec12.csv73,203字・205行・csv
timestamp,run_folder,status,unity_cs,layout_generation,params_model,store,staff,robots,arrivals_per_h,mode,trays,fragile_by,seed,staff_first_yield,yield_order_enabled,one_robot_per_aisle,robot_first_wait_s,everyone_left,total_minutes,wall_seconds,entry_wait_mean,staff_wait_mean,dish_wait_mean,cold_share,robot_share,staff_util,robot_util,walk_km_per_staff,site_entry_wait_mean,site_staff_wait_mean,site_dish_wait_mean,site_robot_share,robot_speed_mps,pause_rate,pause_s_mean,stuck_rate,trips,timeouts,stuck_count,stop_s_total,corner_stop_time_share,gave_up,warped,table_freed,rescues,late_staff_dishes,staff_yield_share_of_staff_time,ledger_schema_version,pay_wait_mean,site_pay_wait_mean,blocked_wait_mean,site_blocked_wait_mean,turn_mean,site_turn_mean,clear_wait_mean_s,clear_wait_max_s,clear_wait_over_count,pay_job_wait_mean_s
2026-10-26T22:14:17,20261027_night_cs21_fam_p1_r0_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p1,4,0,42,serve,1,any,0,1,1,1,120,1,172.5542,194.885,1.4864,0.2944,0.829,0,0,0.66,0,2.7885,3.301,0.9547,0.459,0,0,,0,,0,0,0,0,0,6,9,0,0,0,0,2,2.1598,12.2785,0,0.7327,3.3458,2.4872,63.7974,302.9956,0,92.9196
2026-10-26T22:14:40,20261027_night_cs21_fam_p1_r1_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p1,4,1,42,serve,3,any,0,1,1,1,120,1,174.9465,212.5,1.6292,0.4055,2.1114,0.1688,0.7938,0.5909,0.741,2.2081,2.5992,0.572,1.9487,0.7204,0.5797,,3.8196,,67,0,4,981.1951,0,35,48,0,4,33,0.0335,2,2.7096,7.9893,0,0.4827,3.0394,2.1338,38.1375,459.8486,0,104.9457
2026-10-26T22:14:45,20261027_night_cs21_fam_p5_r0_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p5,4,0,42,serve,1,any,0,1,1,1,120,1,173.6043,207.8589,1.5122,0.331,0.8133,0,0,0.6661,0,2.8429,2.7562,0.8929,0.4478,0,0,,0,,0,0,0,0,0,8,13,0,0,0,0,2,2.1229,11.7376,0,0.6821,3.723,2.5036,83.032,299.342,0,92.0491
2026-10-26T22:14:58,20261027_night_cs21_fam_p1_r2_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p1,4,2,42,serve,3,any,0,1,1,1,120,1,172.355,226.2467,1.5647,0.2622,1.6317,0.175,0.8563,0.6546,0.6775,2.2238,1.1788,0.3853,0.9488,0.9912,0.5583,,1.184,,108,3,33,4298.596,0,56,54,0,33,23,0.0485,2,2.6685,7.9844,0,0.322,4.0129,2.0672,84.3712,484.9482,0,105.955
2026-10-26T22:18:10,20261027_night_cs21_fam_p5_r1_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p5,4,1,42,serve,3,any,0,1,1,1,120,1,172.6156,227.2205,1.4068,0.1913,1.863,0.15,0.8125,0.5812,0.7441,2.2132,1.815,0.4851,1.9698,0.721,0.5827,,2.0972,,69,0,4,617.6973,0,23,41,0,4,30,0.0298,2,2.4838,8.0624,0,0.3915,2.5959,2.1404,12.0715,116.9414,0,101.5082
2026-10-26T22:18:45,20261027_night_cs21_fam_p5_r2_s0,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p5,4,2,42,serve,3,any,0,1,1,1,120,1,174.2824,242.5067,1.5402,0.3483,1.0214,0.025,0.9875,0.5948,0.6474,2.0801,1.9669,0.4479,0.9839,0.991,0.5686,,1.595,,129,1,18,3427.149,0,38,49,1,18,2,0.0361,2,2.0406,7.9555,0,0.3816,4.5839,2.0967,129.2542,551.0391,0,82.6225
2026-10-26T22:18:58,20261027_night_cs21_fam_p1_r0_s1,completed,ServiceSim/cs:21,8a5b2f6a016a,v2.8,fam_p1,4,0,42,serve,1,any,1,1,1,1,120,1,184.9572,235.7075,3.8691,2.6631,1.0446,0,0,0.7743,0,3.2202,3.301,0.9547,0.459,0,0,,0,,0,0,0,0,0,5,9,0,0,0,0,2,4.6625,12.2785,2.1342,0.7327,10.8906,2.4872,519.3842,1186.447,39,139.8171
別のタブで開く保存

Unity のコード(ServiceSim/cs:27)

前回(cs:17)から変わったファイルの全文です。

Assets/ServiceSim/Experiment/ServiceSimLedger.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using UnityEngine;

namespace ServiceSim
別のタブで開く保存

Assets/ServiceSim/Experiment/LedgerRow.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using UnityEngine;

namespace ServiceSim
{
別のタブで開く保存

Assets/ServiceSim/Experiment/HeadlessRun.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using UnityEngine;

namespace ServiceSim
{
別のタブで開く保存

Assets/ServiceSim/Experiment/ExperimentRunner.cs

using System.Collections.Generic;
using System.IO;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 条件を回して記録する。1回の Play の中で、条件を順に通せる(段階3の Run All)。
別のタブで開く保存

Assets/ServiceSim/Experiment/TripLogger.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using UnityEngine;

namespace ServiceSim
別のタブで開く保存

Assets/ServiceSim/Experiment/RobotTrackLogger.cs

using System.Collections.Generic;
using System.Globalization;
using System.Text;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>
別のタブで開く保存

Assets/ServiceSim/Robot/RobotSpec.cs

using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 道の決め方(依頼 v9 の 2 章)。
    ///   MapPlanner … ロボットが地図(サイトの {名前}_map.json)の上で自分で道を引く。NavMesh は使わない
    ///   SiteRoutes … サイトの routes の点を順にたどる(v5b〜v8b と同じ。比べるために残す)
別のタブで開く保存

Assets/ServiceSim/Robot/ServingRobotController.cs

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

namespace ServiceSim
{
    /// <summary>
別のタブで開く保存

Assets/ServiceSim/Service/ServiceSpec.cs

using UnityEngine;

namespace ServiceSim
{
    /// <summary>
    /// 店の回し方の数字。試算(haizen_sim.py の COMMON と STORES["family"])と同じ値にそろえる。
    /// 店の運営に関する数字はすべてこの .asset に置く。
    ///
別のタブで開く保存

Assets/ServiceSim/Service/ServiceOps.cs

using System.Collections.Generic;
using UnityEngine;

namespace ServiceSim
{
    /// <summary>料理1皿</summary>
    public class DishOrder
    {
別のタブで開く保存

Builds/headless/build_info.json(3回目の夜のあとに作り直した実行ファイル)

{
  "schema": "servicesim-build-info/0.1",
  "build_id": "cs27_20261027_1141",
  "unity_cs": "ServiceSim/cs:27",
  "pending_changes": "",
  "built_at": "2026-10-27 11:41:41",
  "editor_version": "2022.3.62f3",
  "target": "StandaloneOSX",
  "architecture": "ARM64(Apple Silicon)",
  "scene": "Assets/ServiceSim/Scenes/ServiceSim_Family.unity",
  "app": "Builds/headless/ServiceSim.app",
  "exe": "ServiceSim",
  "ledger_schema_version": 2,
  "total_size_bytes": 59966690,
  "build_seconds": 2.8
}

夜の実行係(ServiceSim の tools/・cs:27)

tools/make_queue.py

29_tools_make_queue.py.txt7,736字・214行・python
#!/usr/bin/env python3
"""make_queue.py — 夜に回す「条件 × 種」を queue.json に並べる(依頼 v12 の 4 章)

条件は Unity と同じ所から引く(手で写さない):
  Assets/ServiceSim/Experiment/serving-robot-params.json の unity_conditions

最初の夜:6条件(③ fam_p1・⑦ fam_p5 × ロボット 0・1・2 台)× 種 0〜9 = 60 回
          + ③2台・すれ違い「入」× 種 0〜9 = 10 回  … 合わせて 70 回
別のタブで開く保存

tools/night_runner.py

30_tools_night_runner.py.txt31,090字・806行・python
#!/usr/bin/env python3
"""night_runner.py — 夜のあいだ、並べた回を全部回す(依頼 v12 の 4 章)

  python3 tools/night_runner.py --queue queue.json --parallel 2 --night 20261026

やること
  ・始める前に、KIOXIA がつながっているか・実行ファイルがあるかを確かめる(無ければ始めない)
  ・caffeinate で Mac をスリープさせない(終わったら必ず解く)
別のタブで開く保存

tools/ledger.py

31_tools_ledger.py.txt9,947字・295行・python
#!/usr/bin/env python3
"""ledger.py — 台帳 unity_ledger_v1.csv に鍵をかけて1行足す(依頼 v12 の 3 章)

夜は実行ファイルを何本も同時に走らせるので、台帳に同時に書かないよう鍵をかける。
ここは **台帳を壊すと戻しにくい所** なので、決まりを狭くしてある。

決まり(C# の ServiceSimLedger と同じ)
  ・**追記だけ**。前の行は読むだけで、書き換えない・消さない
別のタブで開く保存

tools/judge_night.py

32_tools_judge_night.py.txt15,191字・366行・python
#!/usr/bin/env python3
"""judge_night.py — 夜に回した Unity の結果を自動で振り分ける(読むだけ。Unity も台帳も変えない)

振り分け(2026-10-25 エイイチ決定)
  回の失敗        : 最後まで回っていない・台帳に行がない・ロボットが1コマで0.05m超え動いた
  Unity の作り    : 立ち往生(ロボットが30秒以上止まった)などが、基準データと比べて外れた
  試算を見直す候補 : ロボットを増やしたときの向きが、種の過半数で試算と逆
                    または Unity ÷ 試算 の大きさが、基準データの同じ条件の範囲から外れた
別のタブで開く保存