---
title: "サービスロボット導入シミュレーション Log#18 | 小さい店では、2台目のロボットが待ちを延ばした"
slug: small-store-second-robot-wait
date: 2026-10-28
day: 393
meta_description: "3Dのファミレスで28卓の小さな店に配膳ロボットを2台入れると、入店待ちはロボットなしの倍、試算の約7倍に延びた。席・ドリンクバー・回し方を直し、待機場所へ戻らない作りの誤りを見つけた。"
tags: [サービスロボット導入シミュレーション, 配膳ロボット, 飲食店, Unity, シミュレーション, 店の形, 待機場所]
series: "導入シミュレーション"
---

3Dのファミレスのシミュレーションで、28卓の小さな店に配膳ロボットを2台入れると、お客さんが席に着くまでの待ち時間は、ロボットがいないときの倍になりました。パソコンの中の計算では、2台入れれば待ちは3分ほどに縮むはずでした。ところが、通路や人の動きまで作り込んだ3Dの店で回すと、待ちは25分近くまで延びました。

配膳ロボットを入れると店がどう変わるかを、2つのやり方で調べています。1つはサイトに公開している試算で、卓までの距離・料理の数・スタッフの人数から、待ち時間を計算します。もう1つは Unity（ゲームを作る道具）で作った3Dのファミレスで、お客さん・スタッフ・ロボットを1人ずつ動かすシミュレーションです。試算を正とし、3Dの店は「通路で実際に何が起きるか」を測る役です。これまでは42卓の店（③と⑦）で回してきました。今回は、それより小さい28卓の店（④）に広げました。

④は、試算の上ではロボットがよく効く店です。スタッフ2人の店で、ロボットがいないと入店待ちは約10分ですが、1台入れると約3分に縮みます。それが3Dの店では、1台でも縮まず、2台ではかえって延びました。

原因を1つずつ外していきました。

| やったこと | なぜ | 結果 |
|---|---|---|
| ④を3Dの店に建て、ロボット0・1・2台で1回ずつ回した | 小さい店に広げる最初の確かめ | 2台で入店待ち29.5分（試算3.2分）。30秒以上止まったのが143回 |
| 壁ぎわの2人席を上へ1mずらし、角にロボットがよける隙間を作った | 左の壁ぞいの一本道で、2台が向かい合って動けなくなっていた | 止まりは1往復あたり1.86回→1.04回。入店待ちは16.3分 |
| ④を種（来客の並びの乱数）を変えて10回ずつ回した | 1回ずつでは偶然と見分けられない | 2台で入店待ち26.9分。止まりの一番多い所は受け渡し口の前 |
| ドリンクバーを壁ぎわへ動かした | 並ぶお客さんがロボットの出発点まで来ていた | 受け渡し口の前の止まりは減らなかった（見立て違い） |
| 受け渡し口に入れるロボットを1台ずつにした | 受け渡し口の前で2台がぶつかっていた | 調べる途中で、ロボットが待機場所へ戻っていなかったと分かった |
| 往復を終えたロボットが待機場所へ戻るように直した | 3Dの店の作りの誤り。店の形では待機場所を決めてあった | 受け渡し口の前のロボットどうしの止まりは278回→110回 |
| 42卓の店（③⑦）も、待機場所へ戻る作りで回し直した | 同じ誤りで回っていたため | 2台の止まりが減り、ロボットを足したときの向きが試算とそろった |

**④の入店待ちが延びる理由のいくつかは、店の形と3Dの店の作りの誤りでした。それを直しても、小さい店では2台目のロボットが待ちを延ばす形は残りました。** 待機場所へ戻るように直したあとも、④の入店待ちは、ロボット0台で12.7分・1台で14.4分・2台で24.8分です。2台のときの待ちのほとんどは「席は空いているのに、片付けと案内が追いつかずに待った時間」で、スタッフ2人の手が回らなくなっています。ここは直し続けず、調べる対象として記録に残し、次の店（⑤⑥）へ進むことにしました。

途中で、同じ条件・同じ乱数の種で回しても、3Dの店の数字が毎回少しずつずれることも分かりました。2台の入店待ちは、同じ回し方を3回くり返して18.4〜19.9分でした。そのため、比べるときは1回どうしではなく、種10個の真ん中の値（中央値）で比べています。

【図解】LOG393_jam_steps.html

ここから下は作業ログです。「見込める効果」と書いた所は見込みで、測った値は「変わったこと」に書いています。3Dの店の回はすべて Claude Code が依頼箱（依頼を置くと Mac で自動で実行される仕組み）で回し、報告を書き戻しました。依頼文と報告は全量を載せています。


## 作業ログ ― ④の条件をサイトの試算から書き出した

### ④（28卓・88席）の3条件は、③⑦と同じ決め方にした

3Dの店は、サイトの試算から書き出した serving-robot-params.json を読んで動きます。これまでは③⑦の6条件だけが入っていました。④を足すにあたって、条件の決め方は③⑦と同じにしました。スタッフは店の選択肢の真ん中の人数、混み具合は普通、上げ膳（料理を運ぶ仕事）だけ、1往復で3卓、レジ1つです。④では、スタッフ2人・1時間に28組・ロボット0・1・2台になります。

スタッフ2人だと、会計（1組90秒×28組＝1時間に約42分）のあいだ、1人がほぼレジにかかりきりになります。2人で始め、問題が多ければ考え直すことにしました。最終的には、0人から4人まで、どの人数でも回せるようにする必要があります。

試算（v2.8）の④の値（入店待ちの平均・分。かっこ内は、そのうち席は空いているのに片付けと案内が追いつかずに待った時間）:

| ロボット | 入店待ち | 料理の待ち | 会計待ち |
|---|---|---|---|
| 0台 | 9.72（7.93） | 0.90 | 4.24 |
| 1台 | 3.37（2.19） | 1.30 | 4.97 |
| 2台 | 3.17（1.93） | 0.47 | 4.86 |

試算は計算し直していません。書き出しのスクリプト export_params.py の「3Dの店で回す店」に④を足しただけで、③⑦の6条件と共通の値は前と同じであることを、書き出したファイルどうしで比べて確かめました（p2m-site commit bd71298）。

### 書き出しのスクリプト export_params.py（このあと3回直した最後の版）

このあと、店の形の版の番号が2回変わり、3Dの店の回し方の決まり（unity_rules）を2回足し直しています。ここに載せるのは最後の版（schema 0.4）です。

```python
"""試算（haizen_sim.py）の条件と店の回し方の値を、Unity が読む JSON に書き出す（2026-10-22。v2.8 で2026-10-25 にレジの数を足した）。

「何について正か」（unity_design_v0.md の 0 章）で、条件と店の回し方の決まり・時間・数字の定義はサイトが正。
Unity はこの JSON を読み、値を手で写さない（LOG359 のずれ9「値の手写し」をなくすため）。

使い方: python3 export_params.py results.json <出力先>   （出力先は p2m-site の public/sim/serving-robot-params.json）
- common：店に共通の値。role が "unity_measures" の値は Unity で測ってサイトに戻すための仮の値なので、Unity は読まない
- stores：Unity で回す店（fam_p1・fam_p5・fam_p2）の値。registers はレジの数（v2.8）
- unity_conditions：Unity で回す条件（店ごとに3つ。③⑦④で9条件）と、同じ条件の試算の結果（40回の平均）。Unity の店はレジの内側に店員が1人だけなので、レジは1つ
"""
import json
import sys

import haizen_sim as h

res_path, out = sys.argv[1], sys.argv[2]
R = json.load(open(res_path, encoding="utf-8"))
gen = {g["generation"] for g in json.load(open(h.LAYOUT_DIR + "/summary.json", encoding="utf-8"))}
assert len(gen) == 1, gen

ROLE = {
    "robot_speed": "unity_measures", "pause_rate": "unity_measures", "pause_s": "unity_measures", "stuck_rate": "unity_measures",
    "hop_m": "site_only",          # 試算の近似（1往復で複数卓を回るときの寄り道）。Unity は実際の道を走るので使わない
    "sustain": "site_only", "warmup_min": "site_only", "util_sample_s": "site_only", "model": "site_only",
}
NOTE = {
    "unity_measures": "Unity で測ってサイトに戻すための仮の値。Unity は読まない",
    "site_only": "試算の中だけの設定。Unity は使わない",
    "site_rule": "サイトが正。Unity はこの値を使う",
}
common = {k: {"value": v, "role": ROLE.get(k, "site_rule")} for k, v in h.COMMON.items()}

UNITY_STORES = ["fam_p1", "fam_p5", "fam_p2"]   # ④は2026-10-27に追加（スタッフ2人・28組/時）
UNITY_REGISTERS = 1
stores = {}
for k in UNITY_STORES:
    s = dict(h.STORES[k])
    stores[k] = s

conds = []
rows = {h.key(r): r for r in R["rows"]}
for k in UNITY_STORES:
    s = h.STORES[k]
    staff = s["staff"][1]           # 真ん中の人数
    arr = s["arrivals"][1]          # 普通
    for robots in (0, 1, 2):
        c = {"store": k, "staff": staff, "robots": robots, "arrivals_per_h": arr, "mode": "serve",
             "trays": 3 if robots else 1, "fragile_by": "any",   # ロボット0台の試算は trays=1 で持っている（使い方・段の数は関係ない）
             "registers": UNITY_REGISTERS}
        r = rows[h.key(c)]
        conds.append({"condition": c, "site_result": {m: r[m] for m in r if m not in c}})

D = {
    "meta": {
        "schema_version": "serving-robot-params/0.4",
        "model": h.COMMON["model"], "reps": h.REPS, "ng_min": h.NG_MIN, "layout_generation": gen.pop(),
        "source": "p2m-site の public/sim/serving-robot.html と同じ試算（haizen_sim.py）と結果（results.json）",
        "roles": NOTE,
        "time_window": "空の店から始め、peak_min 分だけ選んだペースで来客し、全員が帰るまで回す（max_extra_min で打ち切り）",
        "registers": "会計はレジ1つにつき1組ずつ（pay_s 秒）。食べ終えた組は卓に座ったまま順番を待つ。Unity の条件はすべてレジ1つ（v2.8）",
        "metrics": {
            "entry_wait_mean": "入店待ち：店に来てから案内されて卓に着くまで（分）",
            "full_wait_mean": "そのうち満席で待った時間（分）",
            "staff_wait_mean": "そのうち席は空いているのに片付け・案内が追いつかず待った時間（分）。ng_min 以上なら「店が回らない」",
            "dish_wait_mean": "料理ができてから卓に届くまで（分）", "dish_wait_p90": "同じく上位10%の境目（分）",
            "cold_share": "cold_min 分を超えて届いた皿の割合", "turn_mean": "客が帰ってから卓が使えるまで（分）",
            "walk_km_per_staff": "スタッフ1人が歩いた距離（km）", "staff_util": "スタッフの手がふさがっている割合",
            "robot_util": "ロボットがふさがっている割合", "robot_share": "ロボットが運んだ皿の割合",
            "rescues": "立ち往生でスタッフが動かしに行った回数", "pauses": "一時停止の回数", "groups": "入れた組の数",
            "pay_wait_mean": "食べ終えてから会計が始まるまで（分）。レジの順番とスタッフの手が空くのを待つ（v2.8）",
        },
    },
    "common": common,
    # 2026-10-27 エイイチと決めた回し方の決まり（案B）。試算の数字には効かない（試算の料理は卓の区別がなく、受け渡し口で積む時間も0秒で順番待ちがないため）。
    # 受け渡し口でのロボットどうしのぶつかりは通路で起きることなので Unity が測る。Unity はこの値を使う（切り替えで入れ、まず④で確かめる）
    "unity_rules": {
        # 2026-10-28 エイイチと決めた：待機場所へ戻るを標準に。案B（受け渡し口は1台ずつ・同じ卓は1台）は切に戻す
        # （④・③⑦の夜で、待機場所が受け渡し口から1.5m以内にあるため2台が互いを待ち、往復が減ったため。待機場所との距離の決め方を考え直すまで使わない）
        "standby_return": {"value": True, "role": "site_rule",
                           "note": "往復を終えたロボットは、受け渡し口の点で止まらず、店の形の RobotStandby（1台に1つ）へ下がって待つ"},
        "pass_one_robot": {"value": False, "role": "site_rule",
                           "note": "（切）受け渡し口の前に入れるロボットは1台だけ。前の1台が出発点から pass_clear_m 離れるまで、次の1台は待機場所で待つ"},
        "pass_clear_m": {"value": 1.5, "role": "site_rule", "note": "仮の値（pass_one_robot が切のあいだは使わない）"},
        "same_table_one_robot": {"value": False, "role": "site_rule",
                                 "note": "（切）その卓へ向かっているロボットがいる間は、その卓の料理を別のロボットに積まない"},
    },
    "stores": stores,
    "unity_conditions": conds,
}
json.dump(D, open(out, "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print(out, len(conds), "conditions / generation", D["meta"]["layout_generation"])
for c in conds:
    print(" ", c["condition"], {m: c["site_result"].get(m) for m in ("entry_wait_mean", "staff_wait_mean", "dish_wait_mean", "pay_wait_mean")})
```


## 作業ログ ― ④を3Dの店に建て、1回ずつ回した

### 依頼文：④を建てて確かめる（20261027_06）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 180
---
# 依頼：④ 効率重視・小さめの店（fam_p2）を Unity に建て、1回ずつ回して確かめる（2026-10-27）

エイイチの決定（2026-10-27）：Unity を別の店へ広げる。順番は ④ → ⑤⑥ → ②。今回は④だけ。

サイト（正）はもう直して公開した（p2m-site commit bd71298）。
- `public/sim/serving-robot-params.json`：Unity で回す店に fam_p2 を足した。unity_conditions は6件 → 9件。③⑦の6件と common は前と同じ。試算は v2.8 のまま計算し直していない
- ④の3条件：スタッフ2人・28組/時・ロボット0・1・2台・上げ膳・1往復3卓（0台は trays 1）・レジ1つ
- 店の形：`public/sim/layouts/unity/p2_efficient_narrow.json` と `p2_efficient_narrow_map.json`（generation 8a5b2f6a016a。③⑦と同じ版。前から公開済み）
- 台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_pre_p2check_20261027/unity_ledger_v1.csv`（325行・md5 f6c7e71ce48dba4a620850b48535c411）

## 始める前に確かめること（違えば手を止めて報告）

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0

## やること

1. サイトの params と④の店の形2つを、③⑦と同じやり方でプロジェクトに写す（写し元は https://pixelstomotors.com/sim/ か p2m-site の main。手で値を写さない）。generation が 8a5b2f6a016a でそろっているか確かめる
2. ④を③⑦と同じコード・同じ規則で建てる（地図の上で自分で道を引く動き方・すれ違い入・店員優先のよけ方・逃がし弁・モニター、すべて今の標準のまま）。④のためだけの手直しはしない
   - ④の店の形のせいで建てられない・回らないところ（届かない卓、待機場所・レジ・スタッフが待つ点・並ぶ点が置けない、NavMesh の切れ目など）があっても、Unity 側で形を直さない。場所と理由を「決めてほしいこと」に書く（直すならサイトが先）
3. tools/make_queue.py に、店を選んで並べる指定（例 `--stores fam_p2`）を足す。**指定しないときは今までどおり ③ fam_p1・⑦ fam_p5 の60回**（params の条件が9件に増えても60回のまま）。judge_night.py は変えない（④は基準データがないので「基準なし」に振り分けられてよい）
4. check-in して、画面なしの実行ファイルを作り直す（保留 0）
5. 確かめの3回を回す：④ × ロボット0・1・2台 × 種0、すれ違い入。夜の回と混ざらないラベル（例 `p2check`）で。同時に回す本数は今の4のまま（3回なので3本になってよい）。ラベルを変えられない作りなら、その小さな変更は入れてよい
   - 台帳には3行が足される（追記だけ）。終わったら行数と、先頭325行の md5 が退避と同じかを確かめる
6. `make_queue.py --dry-run` 相当で、何も指定しないとき③⑦の60回のままであることを確かめる（台帳に書かない）

## 変えないもの

- 店の回し方・人とロボットの動き・速さ・Stiffness などの物理の設定・同時に回す本数（N=4）
- 台帳の列（59列）と今までの行。③⑦の基準データ v4 の記録（night/ と 20261029_night_* の出力）
- 本番の夜は回さない（④の夜は、確かめの結果をエイイチが画面で見てから決める）

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261027_HHMM_p2_build_check.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ4つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル
- ④を建てて分かったこと（卓の数28・止まる位置・待機場所・レジ・スタッフが待つ点が置けたか、置けなかった所）
- 3回それぞれ：最後まで回ったか・全員帰ったか・入れた組の数・入店待ち・そのうち席は空いているのに待った時間・料理の待ち・会計待ち・ロボットが運んだ皿の割合・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・卓を空けた・瞬間移動・打ち切り。試算の同じ条件の値（params の site_result）と並べる。差の理由の調べはしなくてよい
- 台帳の行数（325 → 328 のはず）と先頭325行の md5
- dry-run で③⑦が60回のままか
- **エイイチが画面で④を見る手順**（Unity を開いてから、どのシーン・メニューで④の、どの条件を流せるか。短く）
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261027_1228_p2_build_check.txt

```text
====================================================================
④ 効率重視・小さめの店（fam_p2）を建てて、1回ずつ回して確かめた
2026-10-27 12:28　check-in：cs:28（保留 0）
====================================================================

結論

  ・④は③⑦と同じコード・同じ決まりで建ちました。卓 28・席 88。止まる位置 28 か所は
    すべて NavMesh の上にあり、届かない卓は 0 です。店の形は Unity 側で直していません。
  ・確かめの3回（④ × ロボット 0・1・2 台 × 種 0・すれ違い入）は、3回とも最後まで回り、
    全員が帰りました。
  ・ただし **ロボット2台の回は止まりがとても多く出ました**。
    30秒以上の止まりが 143 回（1往復あたり 1.86）、動けなくなった（60秒）が 116 回、
    瞬間移動が 74 回、打ち切りが 18 回、卓を空けたが 2 回です。
    入店待ちは 29.5 分で、試算の 3.2 分を大きく上回りました。
    1台の回でも止まりが目立ちます（30秒以上の止まり 27 回・瞬間移動 21 回）。
  ・台帳は 325 → 328 行です。先頭 325 行の md5 は退避と同じでした。
  ・make_queue.py は、何も指定しないとき③⑦の60回のままです。v4 の夜の queue.json と並びまで同じでした。
  ・本番の夜は回していません。


====================================================================
1. 始める前の確かめ（4つとも合格）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけが起動していた）
  2. /Volumes/KIOXIA：マウントされている。鍵ファイル unity_ledger_v1.lock：なし
  3. 台帳の md5：f6c7e71ce48dba4a620850b48535c411（退避と同じ・325 行）
  4. ServiceSim の保留：0（cs:27 head）


====================================================================
2. 写したもの・変えたもの（cs:28）
====================================================================

  写し元：https://pixelstomotors.com/sim/（2026-10-27 12:17 に取得）
    控え：unity/site_copy_v28_p2/（params と unity/p2_*.json の2つ）
    p2 の2本は前からある site_copy_8a5b2f6a016a/unity/ のものと md5 が同じ
  版の番号：params の layout_generation・p2_efficient_narrow・p2_efficient_narrow_map・
            summary.json のどれも 8a5b2f6a016a でそろっている
  params の変わったところ：stores.fam_p2 が増え、unity_conditions が 6 → 9 件になった。
            meta.registers の文が1つ変わった。③⑦の6件と common は前と同じ

  足したファイル
    Assets/ServiceSim/Store/Layouts/p2_efficient_narrow.json（＋.meta）
    Assets/ServiceSim/Store/Layouts/p2_efficient_narrow_map.json（＋.meta）
    Assets/ServiceSim/Store/StoreLayout_p2_efficient_narrow.asset（＋.meta）
      ⑦の .asset を写して、JSON・地図・名前・写し元を差し替えた。
      細い通路の幅は JSON と同じ 1.2 m にした
  変えたファイル
    Assets/ServiceSim/Experiment/serving-robot-params.json  公開版をそのまま写した
    Assets/ServiceSim/Scenes/ServiceSim_Family.unity
      画面なしの実行ファイルが選べる店の形（HeadlessRun.layouts）に④を足した（1行）
    Assets/ServiceSim/Editor/ServiceSimSetup.cs
      P2LayoutPath を足し、Setup を押すと HeadlessRun.layouts に④も入るようにした
    Assets/ServiceSim/Editor/ServiceSimSiteRun.cs
      Site Run のメニューに④の3条件（unity_conditions の 6・7・8）を足した
    Assets/ServiceSim/Editor/ServiceSimJsonStore.cs
      「④ p2_efficient_narrow を建てて確かめる」のメニューを足した。
      試算の値の確かめにも④を足した
    Assets/ServiceSim/Editor/ServiceSimMapPlanner.cs
      「④ 確かめ A」のメニューを足した（③⑦と同じ中身を呼ぶ）
    Assets/ServiceSim/Editor/ServiceSimStageB.cs
      件数の確かめを「ちょうど6件」から「6件以上」に変えた。
      段階Bは並びの頭の6件（③⑦）だけを使うので、9件になると段階Bのメニューが
      すべて止まってしまうため。並びと回し方は変えていない
    tools/make_queue.py
      --stores を足した（下の 6 章）
    tools/night_runner.py
      --record-name を足した。既定は --night と同じなので、今までと動きは変わらない。
      名札（--label）は前から変えられた。ただし記録（runner_log・runs.csv・queue.json・judge）は
      night/{night}/ に置かれるので、--night 20261027 のままだと
      最初の夜の night/20261027/ の queue.json と judge.md を上書きしてしまう。
      それを避けるため、記録の置き場所だけを分けられるようにした

  変えていないもの：店の回し方、人とロボットの動き、速さ、物理の設定、同時に回す本数（4）、
    judge_night.py、台帳の列（59）と今までの行、night/ の既存の記録

  画面なしの実行ファイル
    build_id cs28_20261027_1222 / unity_cs ServiceSim/cs:28 / pending_changes 空（保留なし）
    Build Finished, Result: Success・error CS 0。作ったあとも保留 0

  手で戻したもの
    建てて確かめる処理をエディタで回したら、ProjectSettings/NavMeshAreas.asset に
    「New Agent」が3つ書き足されたので、cs:27 の中身に戻した（cm undo）。
    Mat_RobotKeepout.mat も書き直されたが、中身は同じだった。どちらも check-in していない


====================================================================
3. ④を建てて分かったこと（ServiceSim/JSON Store・Map Planner の確かめ A）
====================================================================

  数         卓：Unity 28 / JSON 28 / summary.json 28 で一致。席は 88 で一致
             細い通路は1本（A01・1.2 m）。外寸は 17 × 12 m
  止まる位置  28 か所すべて、ロボット用の NavMesh の上に乗っている（乗らない 0）
  道順       受け渡し口から全 28 卓へ、すべての区間がつながった。
             JSON の dist との差は平均 −0.12 m・最大 0.43 m（T06）。30% を超えた卓は 0
  席         入口から全 28 卓の席に着く点まで歩ける（入れない卓 0）
  場所の点    23 か所すべて NavMesh に乗った（乗らない 0）
             待機場所2・レジ（店員側 0.7 × 2.7 m、受け渡し口から 3.56 m で行ける）・
             スタッフ待機4・会計の列3・待合・入口・パントリー・返却口はすべて置けた
  行き止まり  通路をふさいでも、ほかの全卓に届く。届かない卓 0（ロボット・人とも）
  NavMesh    ロボット用・人用とも、つながっていない面は 0 m2
  確かめ A   地図で全卓に道が引けた（引けない卓 0）。狭い道を使う卓は 0 で、サイトと一致。
             待機場所2つへも道が引けた（どちらもマスの種類 1＝通れる幅だけの所）

  気づいたこと（直していない）
    ・A01（1.2 m）の人用の歩ける幅：計算では 0.8 m、焼いた面では 0.68 m。
      「0.12 m 足りない」と出ている。③の 1.2 m の通路でも同じような出方が前からある
    ・ロボットの待機場所2つは、地図で「ふだんの道」ではなく「通れる幅だけ」のマスにある
  置けなかった所：なし

  書き出し（screens/）
    20261027_p2_efficient_narrow_json_check.txt / _table_dist.csv
    20261027_1221_map_planner_checkA_p2.txt / 20261027_1221_map_plan_p2_efficient_narrow.csv


====================================================================
4. 確かめの3回（すれ違い入・種0・ラベル p2check・同時 3 本）
====================================================================

  出力フォルダ   20261027_p2check_cs28_fam_p2_r{0,1,2}_s0_passon
  記録          night/20261027_p2check/（runner_log・runs.csv・queue.json・judge.md）
  runner        終了コード 0。completed 3・失敗 0・止まった回 0。実時間 3.0 / 3.3 / 4.6 分
  judge.md      基準なし 3（④の基準データがないので判定はしていない。依頼のとおり）

  左が Unity、右が試算（params の site_result）。単位は分。割合は 0〜1
                                 0台                1台                2台
  最後まで回ったか                completed           completed          completed
  全員帰ったか                    はい                はい               はい
  店の時間（分）                  193.6               206.5              285.9
  入れた組の数                    48 / 56.1           48 / 56.3          48 / 54.6
  入店待ち                        6.31 / 9.72         12.70 / 3.37       29.45 / 3.17
   うち席は空いているのに待った    5.17 / 7.93         11.39 / 2.19       27.82 / 1.93
  料理の待ち                      1.32 / 0.90         2.11 / 1.30        5.19 / 0.47
  会計待ち                        1.80 / 4.24         1.89 / 4.97        3.69 / 4.86
  ロボットが運んだ皿の割合         0 / 0               0.858 / 0.957      0.833 / 1.000
  往復の数                        0                   77                 77
  30秒以上の止まり（1往復あたり）  0（0）              27（0.351）        143（1.857）
  動けなくなった（60秒）           0                   22                 116
  卓を空けた（逃がし弁）           0                   0                  2
  瞬間移動                        0                   21                 74
  打ち切り                        0                   0                  18
  （参考）あきらめた               0                   39                 166
  （参考）冷めた皿の割合           0.042 / 0.002       0.267 / 0.043      0.550 / 0
  （参考）卓が使えるまで           22.9 / 17.6         26.1 / 5.2         63.6 / 4.6

  差の理由は調べていません（依頼のとおり）。


====================================================================
5. 台帳
====================================================================

  行数：325 → 328（3 行足した。追記だけ）
  先頭 325 行の md5：f6c7e71ce48dba4a620850b48535c411（退避と同じ）
  鍵ファイルは残っていない


====================================================================
6. 何も指定しないときに③⑦の60回のままか（台帳には書いていない）
====================================================================

  python3 tools/make_queue.py --out /tmp/q_default.json
    → 条件 6（fam_p1・fam_p5 × 0・1・2 台）× 種 0〜9 ＝ 60 回・すれ違い入 60
    → night/20261029/queue.json（v4 の夜）と比べて runs が並び順まで同じ
  python3 tools/make_queue.py --stores fam_p2 --seeds 0 --label p2check …  → 3 回
  --stores fam_p9 → 「知らない店です」で終了コード 1。queue は作らない
  --conditions を付けたときは、その条件をそのまま使う（--stores の既定では絞らない）

  確かめの前に night_runner の dry-run を1度だけ回した。
  その記録は night/20261027_p2check_dryrun/ にある（消していない。台帳には書いていない）


====================================================================
7. エイイチが画面で④を見る手順
====================================================================

  1. Unity Hub から ServiceSim（/Users/shimazueiichi/Robotics_UX/ServiceSim）を開く
  2. シーン Assets/ServiceSim/Scenes/ServiceSim_Family.unity を開く
     （メニューを押せば自動で切り替わるものもある）
  3. 建てるだけで見る：ServiceSim → JSON Store → ④ p2_efficient_narrow を建てて確かめる
  4. 回して見る：ServiceSim → Site Run → ④ スタッフ2人・ロボット0台 / 1台 / 2台
     Play に入って回り、終わると自動で Play を抜ける。
     出力は KIOXIA の {日付}_p2_efficient_narrow_{条件}_s{種}_{時刻}/ に出る。
     すれ違いは RobotSpec の passByEnabled（いまは入）に従う。
     種は ExperimentPlan の trialSeed（確かめの3回は種 0）
     ※ 止まりが多いのを見るなら、2台の回がいちばん分かりやすい


====================================================================
8. 決めてほしいこと
====================================================================

  1. ④ロボット2台の止まりの多さ（1往復あたり 1.86・打ち切り 18・瞬間移動 74・
     入店待ち 29.5 分 対 試算 3.2 分）を、店の形（サイト側）の問題とみるか、
     Unity の作りの問題とみるか。④の夜を回すかどうかも含めて決めてください。
     このまま夜を回しても、2台の回はこの傾向のまま出ると思われます。
     Unity 側でも店の形でも、④のためだけの手直しはしていません。
  2. 入れた組の数が3回とも 48 組で、試算（54.6〜56.3 組）より少ない。
     28 組/時 × 120 分ならおよそ 56 組です。調べるかどうか決めてください
     （③⑦にも同じ傾向があるかは、今回は見ていません）。
  3. 段階Bの件数の確かめを「6件以上」に緩めたこと（2 章）。
     これでよいか確かめてください（③⑦の18回の並びは変えていません）。
```

### ロボット2台で、30秒以上の止まりが143回出た

④は③⑦と同じ作り・同じ決まりで建ち、28卓すべてにロボットの道が引けました。ところが、2台の回では30秒以上止まったのが143回（1往復あたり1.86回）、60秒以上動けなくなったのが116回でした。入店待ちは29.5分で、試算の3.2分を大きく上回りました。③の基準データ（v4）では、2台の止まりは1往復あたり0.26回です。

3Dの店をエディタで流して画面で見ると、立ち往生がたしかに多く出ていました。

> 途中報告立ち往生多いね。

画面録画を8秒ごとのコマで見ると、48秒あたりで、1号機が卓04の前で止まり、2号機がそれをよけるために相手を待って、2台が向かい合ったまま動けなくなっていました。止まりの記録（stops.csv）を場所ごとに分けると、30秒以上の止まりの合計時間のうち、左の壁ぞいの列の卓へ行った往復が約2.6時間（56%）でした。左の列は、7卓分の止まる位置が1本の通路に縦に並んでいます。

もう1つ、2台が同じ卓へ同時に向かっていることも分かりました。2台の往復が時間的に重なった70組のうち14組（20%）が同じ卓を含んでいました。③では118組中5組（4%）です。

### 同じ種でも、エディタで流すと数字が変わった

画面で見るためにエディタで流した回（種1）も、2台で入店待ち38.9分、30秒以上の止まり123回のうち62回が「もう1台のロボット」でした。種を変えても同じ形が出たので、偶然ではなく、④の店の形と2台の組み合わせで起きていると見ました。


## 作業ログ ― 壁ぎわの2人席を上へ1mずらし、ロボットがよける隙間を作った

### 角に逃げ場を空ける案は、画面を見て決めた

エディタで流した画面のコマでは、左下の角で、配膳中のロボットの横をもう1台が抜けられずに止まっていました。

> ここにロボットを逃す隙間を空けた方がいいね。
> 壁際の2名席をもう少し上にずらす感じで

左の壁ぞいの2人席は、1.1m間隔で5卓あります。一番下の卓と下の6人ボックスのあいだは0.4mで、ロボットが入れる隙間はありませんでした。一番上の卓の上には、トイレの入口の前の空け場所まで1.4mの余りがありました。

上へ1.0mずらす案と、余りいっぱいの1.4mずらす案を、店の形の決まりの確かめにかけました。どちらも決まりを満たし、28卓すべてにふだんの1.0mの道で届きます。ただ1.4mでは、一番下の卓のロボットが止まる位置が、空けた角そのものに移ってしまいます。配膳中のロボットが逃げ場をふさぐので、1.0mにしました。

途中で一度、言い間違えています。「上へ1.0mずらしても、一番上の2人席とトイレの入口の前の空け場所のあいだは1.4m残る」と伝えましたが、正しくは0.4mに縮みます。トイレの入口の前1.2mには何も置かない決まりは守れていて、店の形の確かめも通っています。

- ねらい：左の列の一本道で、配膳中のロボットの横をもう1台が抜けられるようにする
- 変わったこと：下の6人ボックスとのあいだが0.4m→1.4m。2台の回（種0）の30秒以上の止まりは143回→87回（1往復あたり1.86→1.04）、左の列の止まりは32回→15回、入店待ちは29.5分→16.3分
- 見込める効果：左の列の詰まりが減る分、1台目の配膳中も2台目が奥の卓へ行ける。卓までの距離は平均8.4m→8.5mでほぼ変わらない

### 試しにずらした形を描いたスクリプト try_p2.py

```python
import sys, json, re
import matplotlib.pyplot as plt
import famires_gen2 as gen, famires_v3 as v3
src=open('famires_gen2.py',encoding='utf-8').read()
shift=float(sys.argv[1])
orig=gen.two_seat_row
def p2():
    def tsr(x,y,side,n,pitch=1.1):
        if side=="left" and x==0.0 and y==2.2: y=round(2.2+shift,2)
        return orig(x,y,side,n,pitch)
    gen.two_seat_row=tsr
    try: return gen.p2_efficient_narrow()
    finally: gen.two_seat_row=orig
L=v3.prepare(p2())
v=v3.check_rules(L)
if v: print('NG',v); sys.exit()
res,err=v3.analyze(L,v3.SETTINGS['res'],{})
resb,errb=v3.analyze(L,v3.SETTINGS['check_res'])
print('err',err,errb)
summ=v3.summarize(L,res)
print({k:summ[k] for k in ('tables','robot_tables','narrow_tables','human_tables','robot_dist_mean','robot_dist_max')})
d={r['id']:r.get('dist') for r in res}
print({k:d[k] for k in list(d)[:5]}, [r['category'] for r in res][:5])
fig,ax=plt.subplots(figsize=(14,11),dpi=90); v3.draw(ax,L,res,summ,[]); fig.savefig(f'p2_shift_{shift}.png',bbox_inches='tight',facecolor='white')
```

### 店の形の作り方 famires_gen2.py の④の部分（最後の版）

このあとドリンクバーも動かしたので、最後の版を載せます。左の2人席は `two_seat_row(0.0, 3.2, "left", 5)`（前は 2.2）です。

```python
def p2_efficient_narrow():
    W, D = 17.0, 12.0
    rooms, walls, dish, sb, start = boh_right(W, D, 10.0, 5.0, 10.0, pw=1.5, sw=1.8, wash_gap=0.8)
    toilet, twalls, tdoor = toilet_block([0.0, 10.0, 2.4, 12.0], "bottom", W, D)   # 左上の角。入口は下向き
    rooms += [toilet]
    walls += twalls
    sb["rect"] = [12.0, 4.15, 13.6, 4.95]
    sb["slots"] = 2
    rooms += [dict(label="待合", rect=[16.5, 3.2, 17.0, 4.8], kind="guest"),
              *register([13.6, 0.3, 14.3, 3.0], [12.9, 0.3, 13.6, 3.0]),   # 入口に向いた縦のカウンター
              # ドリンクバーは下の壁ぎわ（2026-10-27 エイイチと決めた。前は y=1.6〜2.2 で、並ぶ点が受け渡し口の前（出発点）まで
              # 届き、Unity でロボット2台が受け渡し口の前で詰まったため。並ぶ点の先から受け渡し口の前まで約1.5m空く）
              dict(label="ドリンクバー", rect=[10.4, 0.0, 12.4, 0.6], kind="drink")]
    # 左の壁ぞいの2人席（トイレの入口の手前で止める）。下の6人ボックスとの間に1.4m空け、ロボットがよける隙間にする
    # （2026-10-27 エイイチと決めた。Unity で2台が左の列で向かい合って動けなくなったため。前は y=2.2 で隙間0.4m）
    t = two_seat_row(0.0, 3.2, "left", 5)
    t += two_seat_row(3.5, 10.6, "top", 6, pitch=1.05)   # 上の壁ぞいの2人席（トイレから1m以上離す）
    t += island(2.6, 2.9, "v", 3)
    t += island(6.3, 2.9, "v", 3)
    t += strip(1.6, 0.0, "h", 2, seats=6)             # 家族用の6人ボックス
    t += two_seat_row(5.6, 0.0, "bottom", 3)
    return dict(name="④ 効率重視型・狭い店・入口が右の壁", style="効率重視", outer=dict(w=W, d=D),
                entrance=dict(side="right", a0=0.6, a1=3.0), rooms=rooms, walls=walls, toilet_doors=[tdoor],
                dish_up=dish, robot_standby=sb, start=start, tables=t)
```

### 卓までの距離が変わったので、④だけ試算を計算し直した

店の形を直して卓までの距離が変わったら、その店だけ試算を計算し直し、店の形と一緒に公開すると前に決めています。6店を作り直したところ、④以外の5店は版の番号が変わっただけで、中身は同じでした（ロボットの地図は、ほどいた中身が同じで、圧縮のバイトだけが違った）。

試算（haizen_sim.py v2.8）は、前提が変わった店の条件だけを回し直す作りになっていたので、そのまま回しました。全32,850条件のうち30,222条件は使い回し、④の2,628条件だけを回し直しました（クラウドの作業環境・2コアで約10分）。公開中の試算のページは、④の結果と平面図だけを差し替えるスクリプトで作り直し、全37,800画面を描いて、欠け・undefined・NaN がないことを確かめました（p2m-site commit e7bbe7d）。

```
32850 conditions, 30222 reused, 2628 to run
結果が変わった行: {'fam_p2': 2628}
④の距離: [1.5, 13.9] 8.5
平面図で動かした卓: 5
書いた: serving-robot.v28b.html 版 25e420d53394
rendered 37800 / レジが詰まるが出た画面 6968 / 回らないが出た画面 5941 / 5台以上の注意 10800
```

| ロボット | 入店待ち（前） | 入店待ち（直したあと） |
|---|---|---|
| 0台 | 9.7分 | 10.4分 |
| 1台 | 3.4分 | 2.9分 |
| 2台 | 3.2分 | 3.5分 |

試算でも、1台と2台の差は小さいままです（40回の平均なので、0.5分ほどは揺れの範囲です）。

### ページの④だけを差し替えるスクリプト update_page_p2.py

```python
"""④の店の形を直したとき（2026-10-27）、公開中の試算のページの④だけを差し替える。
使い方: python3 update_page_p2.py <公開中のページ> <新しい results.json> <前の p2 の店の形> <新しい p2 の店の形> <新しい summary.json> <出力するページ>
- const D の r（結果）：④（fam_p2）の行だけが変わっていることを確かめてから、全部を新しい結果に入れ替える
- const D の stores.fam_p2：卓までの距離（dist_m・dist_mean）を新しい値に
- const D の plans.fam_p2：位置が変わった卓だけ、新しい位置に
- const D の layout_generation：新しい版の番号に
ほかの店・費用の欄・画面の文は変えない"""
import json, sys
import haizen_sim as h

live, res, old_lay, new_lay, summ, out = sys.argv[1:7]
s = open(live, encoding="utf-8").read()
N = json.load(open(res, encoding="utf-8"))
assert N["common"] == json.loads(json.dumps(h.COMMON))
lines = [l for l in s.split("\n") if l.startswith("const D = ")]
assert len(lines) == 1
D = json.loads(lines[0][len("const D = "):].rstrip(";"))
cond = D["k"][:8]
mets = D["k"][8:-1]
conds = list(h.conditions())
assert len(N["rows"]) == len(conds) == len(D["r"])
rows = []
changed = {}
for c, r, o in zip(conds, N["rows"], D["r"]):
    assert all(r[k] == c[k] for k in cond)
    row = [r[k] for k in cond] + [round(r[k], 3) for k in mets] + [1 if r["staff_wait_mean"] >= h.NG_MIN else 0]
    assert o[:8] == row[:8]
    if o != row:
        changed[c["store"]] = changed.get(c["store"], 0) + 1
    rows.append(row)
print("結果が変わった行:", changed)
assert set(changed) <= {"fam_p2"}, changed
D["r"] = rows

st = h.STORES["fam_p2"]
D["stores"]["fam_p2"]["dist_m"] = list(st["dist_m"])
D["stores"]["fam_p2"]["dist_mean"] = round(sum(st["dist_list"]) / len(st["dist_list"]), 1)
print("④の距離:", D["stores"]["fam_p2"]["dist_m"], D["stores"]["fam_p2"]["dist_mean"])

to = json.load(open(old_lay, encoding="utf-8"))["layout"]["tables"]
tn = json.load(open(new_lay, encoding="utf-8"))["layout"]["tables"]
rect = lambda t: [round(t["x"], 2), round(t["y"], 2), round(t["x"] + t["w"], 2), round(t["y"] + t["h"], 2)]
moves = {tuple(rect(a)): rect(b) for a, b in zip(to, tn) if a != b}
n = 0
for t in D["plans"]["fam_p2"]["tables"]:
    k = tuple(round(v, 2) for v in t[:4])
    if k in moves:
        t[:4] = moves[k]
        n += 1
assert n == len(moves), (n, len(moves))
print("平面図で動かした卓:", n)

gens = {g["generation"] for g in json.load(open(summ, encoding="utf-8"))}
assert len(gens) == 1
D["layout_generation"] = gens.pop()
s = s.replace(lines[0], "const D = " + json.dumps(D, ensure_ascii=False, separators=(",", ":")) + ";")
open(out, "w", encoding="utf-8").write(s)
print("書いた:", out, "版", D["layout_generation"])
```

### 依頼文：④を建て直す（20261027_07。Unity が開いていたので08で置き直した）

1回目（07）は、始める前の確かめで Unity のエディタが開いていたので、何も変えずに止まりました。エディタを閉じて、同じ中身を08として置き直しました。

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 120
---
# 依頼：④の店の形を直したので、Unity の④を建て直して3回回し直す（2026-10-27）

エイイチの決定（2026-10-27）：④の左の壁ぞいの2人席（T01〜T05）を上へ1.0mずらし、下の6人ボックスとの間に1.4mの隙間を作る。前回（cs:28）の2台の回で、2台が左の列で向かい合って動けなくなったため、ロボットがよけられる所を作る。

サイト（正）はもう直して公開した（p2m-site commit e7bbe7d）。
- 店の形の版：8a5b2f6a016a → **25e420d53394**（6店とも版の番号が変わる。中身が変わったのは④だけ。ほかの5店は、地図の圧縮のバイトが変わっただけで、ほどいた中身は同じ）
- ④：T01〜T05 の y が +1.0m。卓までの距離は平均 8.4 → 8.5m
- 試算：④の条件だけ計算し直した（v2.8 のまま）。params の④の3条件の site_result が変わった。③⑦の6条件は同じ
- 台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_pre_p2check2_20261027/unity_ledger_v1.csv`（328行・md5 ce05588198bca70278a439aa092acf04）

## 始める前に確かめること（違えば手を止めて報告）

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0
5. https://pixelstomotors.com/sim/serving-robot-params.json の meta.layout_generation が 25e420d53394（まだ前の版なら、サイトへの反映待ちなので数分待って取り直す。30分たっても前の版なら報告して終わる）

## やること

1. 前回と同じやり方で、params と6店の店の形（unity/ の JSON と地図）をプロジェクトに写す。版がそろっているか確かめる
2. ④を前回と同じコード・同じ規則で建て直す（④のためだけの手直しはしない）。前回と同じ確かめ（止まる位置・道順・場所の点・NavMesh・確かめ A）を回し、前回と比べる。特に、左下の隙間がロボットの地図で通れる所（マスの種類）になっているか、ロボット用の NavMesh に乗っているかを書く
3. ③⑦は建て直さなくてよい。ただし版の番号の確かめで止まるなら、③⑦の .asset の版の番号だけを新しくする（形は変えない）。③⑦の確かめ A を1回回し、前と同じ結果か書く
4. check-in して、画面なしの実行ファイルを作り直す（保留 0）
5. 確かめの3回を回す：④ × ロボット0・1・2台 × 種0、すれ違い入。ラベルは `p2check2`。記録の置き場所は前回と同じく分ける（`--record-name 20261027_p2check2` など）
   - 台帳には3行が足される（追記だけ）。終わったら行数と、先頭の行の md5 が退避と同じかを確かめる
6. 何も指定しないとき、make_queue が③⑦の60回のままか確かめる（台帳に書かない）

## 変えないもの

- 店の回し方・人とロボットの動き・速さ・物理の設定・同時に回す本数（N=4）
- 台帳の列（59列）と今までの行。③⑦の基準データ v4 の記録
- 本番の夜は回さない

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261027_HHMM_p2_rebuild_check.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ5つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル
- ④を建て直して分かったこと（前回との違い。左下の隙間）
- 3回それぞれ、前回（cs:28 の p2check）と同じ表：最後まで回ったか・全員帰ったか・入れた組の数・入店待ち・そのうち席は空いているのに待った時間・料理の待ち・会計待ち・ロボットが運んだ皿の割合・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・卓を空けた・瞬間移動・打ち切り。試算の値（新しい site_result）と、前回の Unity の値を並べる
- 2台の回の30秒以上の止まりを、理由（もう1台のロボット・人など）ごとと、場所（左の列・上の列・下の列・受け渡し口の前）ごとに数えたもの。前回と並べる。差の理由の調べはしなくてよい
- 台帳の行数と先頭の行の md5
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261027_2009_p2_rebuild_check.txt

```text
====================================================================
④の店の形を直した版（25e420d53394）で、Unity の④を建て直して3回回し直した
依頼：20261027_08_店4を建て直す_やり直し.md
2026-10-27 20:09　check-in：cs:29（保留 0）／build_id cs29_20261027_2004
====================================================================

結論

  ・④は前回と同じコード・同じ規則で建て直した。④のためだけの手直しはしていない。
    卓 28・席 88、止まる位置 28 か所はすべて NavMesh の上、届かない卓 0、確かめ A も通った。
  ・左下の隙間（左の壁ぞい、x 0〜1.4 m・y 1.8〜3.2 m）は、前はロボットの地図で
    ほぼ全部が「通れない（0）」だったのが、今は「ふだんの道（2）」と「通れる幅だけ（1）」になり、
    ロボット用の NavMesh にも乗った。受け渡し口から隙間まで道が引ける（約 10.9 m）。
  ・2台の回の 30 秒以上の止まりは 143 → 87 回（1往復あたり 1.857 → 1.036）、
    動けなくなった 116 → 65、瞬間移動 74 → 33、打ち切り 18 → 14、卓を空けた 2 → 1。
    入店待ちは 29.45 → 16.34 分。試算（3.46 分）にはまだ遠い。
  ・1台の回も止まりが減った（27 → 15 回、入店待ち 12.70 → 6.65 分）。
  ・台帳は 328 → 331 行（3行を追記）。先頭 328 行の md5 は退避と同じ。
  ・make_queue.py は何も指定しないとき③⑦の60回のまま。本番の夜は回していない。


====================================================================
1. 始める前の確かめ（5つとも合格。20:00 時点）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけが起動していた）
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳の md5：ce05588198bca70278a439aa092acf04（退避と同じ・どちらも 328 行）
  4. ServiceSim の保留：0（cs:28 head）
  5. サイトの params の meta.layout_generation：25e420d53394（1回目で新しい版だった）


====================================================================
2. 写したもの・入れたもの（cs:29）
====================================================================

  写し元：https://pixelstomotors.com/sim/（2026-10-27 20:00 に取得）
    控え：unity/site_copy_25e420d53394/（params・summary.json・unity/ の6店の JSON と地図、README.txt）
  版の番号：params の layout_generation、6店の JSON と地図の meta.generation がすべて 25e420d53394
  中身の比べ（前の版 8a5b2f6a016a と）
    ③ p1・⑦ p5：JSON は meta.generation だけが違う。地図は圧縮のバイトが違うだけで、
                 ほどいた free_class・clear_mm は同じ（counts も同じ）
    ④ p2：T01〜T05 の y が +1.0 m（止まる位置も上へ）。地図のマスの数
          2：56518 → 55988 / 1：18218 → 18520 / 0：251664 → 251892
    params：layout_generation と、stores.fam_p2 の dist_list（T01〜T05）・dist_m、
            unity_conditions の④3条件（6・7・8）の site_result だけが違う。③⑦の6条件・common は同じ
  ③⑦の .asset：版の番号の確かめは JSON の meta.generation を見ているので止まらなかった。
            .asset は変えていない（形も写した日時の字も前のまま）

  変えたファイル（cs:29 に入れたもの）
    Assets/ServiceSim/Experiment/serving-robot-params.json
    Assets/ServiceSim/Store/Layouts/p1_efficient_corner.json / p1_efficient_corner_map.json
    Assets/ServiceSim/Store/Layouts/p2_efficient_narrow.json / p2_efficient_narrow_map.json
    Assets/ServiceSim/Store/Layouts/p5_crammed.json / p5_crammed_map.json
    Assets/ServiceSim/Store/Layouts/summary.json
    Assets/ServiceSim/Store/StoreLayout_p2_efficient_narrow.asset（写した日時の字だけ。版 25e420d53394）
  プロジェクトに写したのは、プロジェクトにある p1・p2・p5 の3店だけ。
    p0・p3・p4 は控えにだけ置いた（プロジェクトに足していない）

  画面なしの実行ファイル
    build_id cs29_20261027_2004 / unity_cs ServiceSim/cs:29 / pending_changes 空（保留なし）
    Build Finished, Result: Success・error CS 0。作ったあとも保留 0

  手で戻したもの（前回と同じ）
    建てて確かめる処理を回したら ProjectSettings/NavMeshAreas.asset と Mat_RobotKeepout.mat が
    書き直されたので cm undo で cs:28 に戻した（Mat は中身が同じだった）。どちらも check-in していない
  一時的に使ったもの
    隙間を NavMesh で確かめるための一時スクリプト（Editor/TmpP2GapCheck.cs）を置き、
    画面なしのエディタで JSON Store・Map Planner の確かめと一緒に呼んだ。終わってから消した。
    check-in していない


====================================================================
3. ④を建て直して分かったこと（前回 cs:28 との比べ）
====================================================================

                         前回（8a5b2f6a016a）      今回（25e420d53394）
  卓・席                  28・88 で一致             28・88 で一致（summary.json とも）
  止まる位置（NavMesh）    乗らない 0 / 28           乗らない 0 / 28
  道順（全区間つながる）   28 / 28                   28 / 28
    JSON の dist との差    平均 −0.12・最大 0.43 m   平均 −0.13・最大 0.43 m（T06）／30%超 0
  席に入れない卓           0                         0
  場所の点                 乗らない 0                乗らない 0
  行き止まり               届かない卓 0              届かない卓 0（ロボット・人とも）
  NavMesh のつながらない面 0 m2                      0 m2（ロボット用 66.36 m2・人用 73.03 m2）
  確かめ A                 引けない卓 0・狭い道 0    引けない卓 0・狭い道 0（サイトと一致）
                                                     長さの比 最小 1.01・平均 1.028・最大 1.06
    T01〜T05 の道の長さ    —                         T01 9.82→10.76 m など、上へずれた分だけ延びた
  A01 の人用の歩ける幅     0.68 m（0.12 m 足りない） 同じ（変わらず）

  左下の隙間（x 0〜1.4 m・y 1.8〜3.2 m）
    ロボットの地図のマスの種類（この範囲のマスの数）
      前回：0（通れない）3046 / 1（通れる幅だけ）34 / 2（ふだんの道）0　clear_mm 最大 388
      今回：0 1495 / 1 381 / 2 1204　clear_mm 最大 878
      0.2 m ごとに見ると、y 2.0〜2.6 の帯が左の壁ぎわ（x 0.4）から左の列の通路（x 2.1 付近）まで
      2 でつながった。その下の角（x 0.4〜1.2・y 0.4〜1.8）は前から 2 だったが、
      前は周りが 0 で囲まれていて、つながっていなかった。今はつながった
    ロボット用の NavMesh
      今回：x 0.2〜1.4・y 0.2〜2.8 がほぼ全部乗る（0.2 m ごとの点で確かめた）
      受け渡し口 → (0.8, 2.4)：道が引けた（PathComplete・10.91 m）
      受け渡し口 → (1.0, 2.2)：引けた（10.72 m）／ → (0.8, 1.2)：引けた（11.37 m）
    回の中で使われたか（2台の回）
      ロボットの軌跡が隙間に入ったのは 3 点（2 回の時間帯・どれも「卓へ」）。前回は 0
      隙間の中での止まりの記録は 34 件、そのうち 30 秒以上は 0


====================================================================
4. ③⑦の確かめ A（建て直していない）
====================================================================

  ③：狭い道 0 卓（サイト 0）・引けない卓 0 / 42・長さの比 0.959 / 1.018 / 1.057・待機場所3つとも引けた
  ⑦：狭い道 24 卓（サイト 24）・引けない卓 0 / 42・長さの比 0.959 / 1.037 / 1.227・待機場所3つとも引けた
  → ③⑦とも通った。地図の中身（ほどいたもの）も道を引くコードも cs:28 と同じなので、結果は前と同じ。
    ※ 書き出しが残っている③⑦の確かめ A は 2026-10-24（v9・古い地図でマスの数が違う）のものしかなく、
      それと比べると、合否・狭い道の卓数・引けない卓数は同じ。長さの比の平均が③で 1.019 → 1.018、
      卓ごとの道の長さが数 cm 違う（地図の版が違うため）
  書き出し：screens/20261027_2003_map_planner_checkA.txt・_map_plan_p1/p5 の CSV


====================================================================
5. 確かめの3回（④・種0・すれ違い入・ラベル p2check2・同時 4 本の設定で 3 本）
====================================================================

  出力フォルダ   20261027_p2check2_cs29_fam_p2_r{0,1,2}_s0_passon
  記録          night/20261027_p2check2/（runner_log・runs.csv・queue.json・judge.md）
  runner        終了コード 0。completed 3・失敗 0。実時間 2.8 / 2.9 / 3.7 分
  judge.md      基準なし 3（④の基準データはないので判定していない）

  書き方：今回 Unity ／ 前回 Unity（cs:28）／ 試算（新しい site_result）。単位は分。割合は 0〜1
                              0台                    1台                    2台
  最後まで回ったか            completed／completed    completed／completed    completed／completed
  全員帰ったか                はい／はい             はい／はい             はい／はい
  （参考）店の時間            192.8／193.6           189.2／206.5           216.3／285.9
  入れた組の数                48／48／55.95          48／48／54.30          48／48／55.30
  入店待ち                    6.61／6.31／10.39      6.65／12.70／2.93      16.34／29.45／3.46
   うち席は空いているのに待った 5.46／5.17／8.37      5.38／11.39／2.01      15.04／27.82／1.99
  料理の待ち                  1.32／1.32／0.88       1.67／2.11／1.28       2.93／5.19／0.47
  会計待ち                    1.59／1.80／4.20       2.35／1.89／4.91       2.81／3.69／5.25
  ロボットが運んだ皿の割合    0／0／0                0.900／0.858／0.956    0.925／0.833／1.000
  往復の数                    0／0                   80／77                 84／77
  30秒以上の止まり            0／0                   15／27                 87／143
   （1往復あたり）            0／0                   0.188／0.351           1.036／1.857
  動けなくなった（60秒）      0／0                   12／22                 65／116
  卓を空けた（逃がし弁）      0／0                   0／0                   1／2
  瞬間移動                    0／0                   15／21                 33／74
  打ち切り                    0／0                   0／0                   14／18
  （参考）あきらめた          0／0                   19／39                 77／166
  （参考）冷めた皿の割合      0.050／0.042／0.003    0.158／0.267／0.039    0.317／0.550／0
  （参考）卓が使えるまで      22.9／22.9／16.8       20.0／26.1／5.2        33.4／63.6／4.9

  前回の試算の値（参考）：入店待ち 9.72 / 3.37 / 3.17、組 56.1 / 56.3 / 54.6
  差の理由は調べていない（依頼のとおり）。


====================================================================
6. 2台の回の 30 秒以上の止まり（理由ごと・場所ごと）
====================================================================

  数え方：stops.csv の duration_s が 30 秒以上の行。場所は止まった点（JSON の座標）で分けた
    受け渡し口の前：x 9.8 m 以上
    下の列        ：x 9.8 m 未満で y 2.9 m 未満（T24〜T28 の前の通路。左下の角もここ）
    左の列        ：x 3.0 m 未満で y 2.9 m 以上（T01〜T05・T12〜T14 の前の通路）
    上の列        ：y 8.5 m 以上（T06〜T11 の前の通路）
    その他        ：残り（真ん中の通路 x 5.8 m・x 9.5 m のあたり）

  理由ごと                  前回（cs:28）  今回（cs:29）
    もう1台のロボット           57            44
    人が立ち止まっていた        38            23
    スタッフとすれ違った        29            12
    椅子・荷物・ベビーカー      11             4
    お客さんとすれ違った         7             4
    分からない                   1             0
    合わせて                   143            87

  場所ごと                  前回          今回
    左の列                      32            15
    上の列                       2             0
    下の列                      75            50
    受け渡し口の前              27            19
    その他（真ん中の通路）       7             3

  理由×場所（多いもの）      前回          今回
    もう1台のロボット・下の列     32            20
    人が立ち止まっていた・下の列  25            19
    もう1台のロボット・受け渡し口 15            15
    もう1台のロボット・左の列     10             9
    スタッフとすれ違った・下の列  10             6
    椅子など・左の列               9             1
    スタッフとすれ違った・左の列   9             3


====================================================================
7. 台帳
====================================================================

  行数：328 → 331（3 行足した。追記だけ。版 cs:29・店の形の版 25e420d53394）
  先頭 328 行の md5：ce05588198bca70278a439aa092acf04（退避と同じ）
  鍵ファイルは残っていない


====================================================================
8. 何も指定しないときに③⑦の60回のままか（台帳には書いていない）
====================================================================

  python3 tools/make_queue.py --out /tmp/p2logs/q_default.json
    → 条件 6（fam_p1・fam_p5 × 0・1・2 台）× 種 0〜9 ＝ 60 回・すれ違い入 60
    → v4 の夜の night/20261029/queue.json と runs が並び順まで同じ
      （違うのは queue の layout_generation の字だけ：8a5b2f6a016a → 25e420d53394）


====================================================================
9. 決めてほしいこと
====================================================================

  1. ④の夜を回すかどうか。2台の回の止まりは減ったが（1往復あたり 1.86 → 1.04）、
     入店待ちは 16.3 分で試算の 3.5 分とまだ大きく離れている。
  2. 入れた組の数は今回も3回とも 48 組で、試算（54〜56 組）より少ない（前回からの持ち越し）。
     調べるかどうか。
  3. プロジェクトに写したのは、使っている p1・p2・p5 の3店だけ（p0・p3・p4 は控えにだけ置いた）。
     6店ともプロジェクトに入れるべきなら言ってください。
```


## 作業ログ ― ④を種10個ずつ回すと、2台で入店待ちが26.9分だった

### 依頼文：④の夜を回す（20261027_09）

````markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 120
---
# 依頼：④の夜（30回）を回す（2026-10-27）

エイイチが「④の夜を回す」と決めた。④（fam_p2・店の形 25e420d53394）× ロボット0・1・2台 × 種0〜9、すれ違い入。
台帳の退避は Claude が済ませた。
- 退避先：/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_prenight_20261030_p2/unity_ledger_v1.csv
- 331 行・md5 1eb3428dc415c0466edb79f53e9eef69

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

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 本物の台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0 で、実行ファイルの build_info が cs29_20261027_2004・保留なし

## 回す

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

```
python3 tools/make_queue.py --stores fam_p2 --out queue_p2.json
python3 tools/night_runner.py --queue queue_p2.json --parallel 4 --night 20261030 --record-name 20261030_p2
```

- 夜の名前は 20261030。記録は night/20261030_p2/ に分ける（night/20261030/ には前の dry-run の記録があるので混ぜない）。オプションの名前が違えば、同じ意味になるように合わせる
- 並ぶのは 30 回（④ × 0・1・2台 × 種0〜9・すれ違い入）であることを、回す前に queue_p2.json で確かめる。30 回でなければ回さずに報告
- プロジェクトの queue.json（③⑦の60回）は触らない
- 回している間は、ほかの作業をしない。Assets・tools・設定ファイルを開かない・変えない。Unity を開かない
- Ctrl+C で止めない。途中で止まっても、同じ夜を回し直さない（そのまま報告する）

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261030_night_p2.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。
- 始める前の確かめ4つの結果
- runner_log のまとめ（completed の回数・失敗・止まった回・最長の実時間）
- 台帳の行数（331 → 361 になるはず）と、先頭 331 行の md5 が退避と同じか
- 全員が帰らなかった回があれば、その回の名前（原因の調べはしない）
- 台数ごと（0・1・2台）の種10個の中央値と最小・最大：入店待ち・そのうち席は空いているのに待った時間・料理の待ち・会計待ち・入れた組の数・ロボットが運んだ皿の割合・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・瞬間移動・打ち切り・卓を空けた
- 2台の30秒以上の止まりを、理由ごと・場所ごと（前回 p2_rebuild_check と同じ分け方）に、種10個の合計で
- judge.md ができたか（④は基準がないので「基準なし」でよい。中身の判断はしない）
````

### 報告：20261030_night_p2.txt

```text
====================================================================
④の夜（30回）を回した
依頼：20261027_09_店4の夜を回す.md
2026-10-27 20:41〜21:15　build_id cs29_20261027_2004（cs:29・保留なし）
====================================================================

結論

  ・30回とも completed。失敗 0・止まった回 0・やり直し 0。runner の終了コード 0。
  ・全員が帰らなかった回：なし。
  ・台帳は 331 → 361 行。先頭 331 行の md5 は退避と同じ。
  ・judge.md はできた。30回とも「基準なし」（④は基準データがない）。
  ・2台の回の 30 秒以上の止まりは 1往復あたり 中央値 1.031（種10個の合計 1017 回）。
    いちばん多いのは「もう1台のロボット・受け渡し口の前」（256 回）。


====================================================================
1. 始める前の確かめ（4つとも合格。20:40 ごろ）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけが起動していた）
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳の md5：1eb3428dc415c0466edb79f53e9eef69（退避と同じ・どちらも 331 行）
  4. ServiceSim の保留：0（cs:29 head）
     build_info：build_id cs29_20261027_2004・unity_cs ServiceSim/cs:29・pending_changes 空

  並んだ回（queue_p2.json）：30 回
    fam_p2_s2_r0_a28・r1・r2 × 種 0〜9・すれ違い 切 0 回／入 30 回
    試算の版 v2.8・店の形の版 25e420d53394


====================================================================
2. 打ったコマンド（作業フォルダ ServiceSim で）
====================================================================

  python3 tools/make_queue.py --stores fam_p2 --out queue_p2.json
  python3 tools/night_runner.py --queue queue_p2.json --parallel 4 --night 20261030 --record-name 20261030_p2

  オプションの名前は依頼のとおりで合っていた。
  記録：night/20261030_p2/（runner_log.txt・runs.csv・queue.json・judge.md・judge.csv・logs/）
  出力フォルダ：20261030_night_cs29_fam_p2_r{0,1,2}_s{0..9}_passon
  プロジェクトの queue.json（③⑦の60回）は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま）


====================================================================
3. runner_log のまとめ
====================================================================

  completed：30 回／失敗：0／止まった回（stopped）：0／やり直し：0
  実時間：平均 4.4 分・最長 6.6 分（20261030_night_cs29_fam_p2_r2_s2_passon）
  全体：20:41:15 〜 21:15:42（約 34 分）


====================================================================
4. 台帳
====================================================================

  行数：331 → 361（30 行を追記）
  先頭 331 行の md5：1eb3428dc415c0466edb79f53e9eef69（退避と同じ）
  鍵ファイルは残っていない


====================================================================
5. 全員が帰らなかった回
====================================================================

  なし（30回とも everyone_left = 1）


====================================================================
6. 台数ごとの種10個（中央値（最小〜最大））
====================================================================

  数え方は前回 p2_rebuild_check と同じ。
    入店待ち＝entry_wait_mean／席は空いているのに待った＝staff_wait_mean／
    料理の待ち＝dish_wait_mean／会計待ち＝pay_wait_mean（いずれも台帳・分）
    入れた組の数＝summary.json の site_metrics.groups
    30秒以上の止まり＝stops.csv の duration_s が 30 秒以上の行の数。1往復あたりは それ÷trips
    動けなくなった＝stuck_count／瞬間移動＝warped／打ち切り＝timeouts／卓を空けた＝table_freed

                              0台                    1台                    2台
  入店待ち（分）              12.95（4.70〜30.07）   13.78（3.53〜33.95）   26.85（9.93〜48.73）
   うち席は空いているのに待った 11.49（3.53〜23.10）   12.12（2.15〜23.44）   23.93（8.61〜35.32）
  料理の待ち（分）            1.26（1.18〜1.39）     2.10（1.71〜3.25）     3.47（2.55〜5.82）
  会計待ち（分）              1.86（1.52〜2.62）     2.34（1.70〜6.07）     3.83（2.63〜5.64）
  入れた組の数                53.5（44〜70）         53.5（44〜70）         53.5（44〜70）
  ロボットが運んだ皿の割合    0（0〜0）              0.851（0.750〜0.908）  0.868（0.795〜0.912）
  （参考）往復の数            0                      79（69〜95）           89.5（74〜129）
  30秒以上の止まり（回）      0                      23（15〜49）           104（63〜142）
   （1往復あたり）            0                      0.314（0.200〜0.598）  1.031（0.795〜1.592）
  動けなくなった（60秒）      0                      13（8〜33）            78.5（53〜117）
  瞬間移動                    0（0〜2）              20（14〜35）           53.5（26〜71）
  打ち切り                    0                      0（0〜2）              12.5（8〜20）
  卓を空けた                  0                      0（0〜1）              1（0〜5）

  ※ 入れた組の数は、同じ種なら 0・1・2 台で同じ数だった（並びが3列とも同じになっている）。
     理由は調べていない。


====================================================================
7. 2台の回の 30 秒以上の止まり（種10個の合計）
====================================================================

  場所の分け方は前回 p2_rebuild_check と同じ（止まった点の座標 x・y）
    受け渡し口の前：x 9.8 m 以上
    下の列        ：x 9.8 m 未満で y 2.9 m 未満
    左の列        ：x 3.0 m 未満で y 2.9 m 以上
    上の列        ：y 8.5 m 以上
    その他        ：残り（真ん中の通路）
  前回の確かめの回（p2check2・2台・種0）でこの数え方を回し直し、87 回・理由ごと・場所ごとが
  前回の報告と同じになることを確かめてから数えた。

  理由ごと
    もう1台のロボット          479
    人が立ち止まっていた        278
    スタッフとすれ違った        159
    お客さんとすれ違った         75
    椅子・荷物・ベビーカー       16
    分からない                    9
    通路の幅が足りない            1
    合わせて                   1017

  場所ごと
    受け渡し口の前              348
    下の列                      333
    その他（真ん中の通路）      189
    左の列                      130
    上の列                       17

  理由×場所（多いもの10）
    もう1台のロボット・受け渡し口の前    256
    もう1台のロボット・下の列            119
    人が立ち止まっていた・下の列         110
    人が立ち止まっていた・その他          84
    スタッフとすれ違った・下の列          59
    もう1台のロボット・左の列             56
    人が立ち止まっていた・受け渡し口の前  51
    もう1台のロボット・その他             44
    スタッフとすれ違った・その他          37
    お客さんとすれ違った・下の列          34


====================================================================
8. judge.md
====================================================================

  できた：night/20261030_p2/judge.md（基準データ 20261029_night_cs26_*）
  振り分け：基準なし 30（正常・試算を見直す候補・Unity の作り・回の失敗はすべて 0）
  中身の判断はしていない。


====================================================================
9. そのほか
====================================================================

  ・queue_p2.json は作業フォルダに新しくできたファイル（cm status で「新しいファイル」と出る）。
    check-in していない。
  ・回している間、Assets・tools・設定ファイルは開いていない・変えていない。Unity も開いていない。


====================================================================
10. 決めてほしいこと
====================================================================

  1. queue_p2.json（作業フォルダの新しいファイル）を残すか・check-in するか・消すか。
```

### ロボットを入れても、④では入店待ちが縮まなかった

種10個の中央値（分）:

| | 0台 | 1台 | 2台 |
|---|---|---|---|
| 入店待ち（3Dの店） | 12.95 | 13.78 | 26.85 |
| 入店待ち（試算） | 10.39 | 2.93 | 3.46 |
| 30秒以上の止まり（1往復あたり） | 0 | 0.314 | 1.031 |
| 動けなくなった（60秒） | 0 | 13 | 78.5 |

0台は試算とほぼ同じです。試算ではロボット1台で入店待ちが大きく縮みますが、3Dの店の④では1台でも縮まず、2台では倍になりました。2台の30秒以上の止まり（10回の合計1,017回）は、受け渡し口の前が348回で一番多く、そのうち256回が「もう1台のロボット」でした。

この報告は 21:15 に書き終わっていましたが、依頼箱では「実行中」のまま残り、次の依頼が始まりませんでした。Claude Code が、報告のあとも何かを待っていたようです。見張り係を止めずに、自動で呼び出した Claude Code だけを止める手順（`pkill -INT -f "claude -p"`）を出しましたが、その直前に前の依頼は自分で終わっていて、止まったのは始まったばかりの次の依頼（10）でした。台帳には何も書かれていなかったので、同じ依頼を11として置き直しました。


## 作業ログ ― ドリンクバーを壁ぎわへ動かしたが、受け渡し口の前の詰まりは減らなかった

### 並ぶ点が、ロボットの出発点まで届いていた

④のドリンクバーは、受け渡し口の下にあり、前に並ぶお客さんの3つ目の点 (11.4, 4.5) が、ロボットの出発点 (11.05, 4.45) とほぼ同じ所にありました。受け渡し口の前の詰まりはこれが原因だと見て、ドリンクバーを下の壁ぎわ（y 0〜0.6）へ動かしました。並ぶ点の先から出発点まで約1.5m空きます。卓までの距離は1つも変わらないので、試算は計算し直していません（p2m-site commit 9eeca01）。

### 試しに動かした形を確かめたスクリプト try_db.py

```python
import sys, json, tempfile
from pathlib import Path
import matplotlib.pyplot as plt
import famires_gen2 as gen, famires_v3 as v3
rect=json.loads(sys.argv[1]); tag=sys.argv[2]
orig=gen.p2_efficient_narrow
L0=orig()
for r in L0["rooms"]:
    if r["label"]=="ドリンクバー": r["rect"]=rect
L=v3.prepare(L0)
v=v3.check_rules(L)
if v: print('NG',v); sys.exit()
ctx={}
res,err=v3.analyze(L,v3.SETTINGS['res'],ctx); resb,errb=v3.analyze(L,v3.SETTINGS['check_res'])
if err or errb: print('ERR',err,errb); sys.exit()
summ=v3.summarize(L,res); tmp=Path(tempfile.mkdtemp())
U=v3.export_unity(L,res,ctx,'p2',tmp,'x'); print('register', v3.check_register_clear(U))
print({k:summ[k] for k in ('robot_tables','narrow_tables','robot_dist_mean','robot_dist_max')})
print('dists',[r['dist'] for r in res])
for p in U['places']:
    if p['kind'].startswith('Drink') or p['kind'] in ('FoodPass','RobotStandby'): print(' ',p['kind'],p['point'],p.get('front',''))
fig,ax=plt.subplots(figsize=(14,11),dpi=90); v3.draw(ax,L,res,summ,[]); fig.savefig(f'db_{tag}.png',bbox_inches='tight',facecolor='white')
```

```
== now
register []
{'robot_tables': 28, 'narrow_tables': 0, 'robot_dist_mean': 8.5, 'robot_dist_max': 13.92}
  FoodPass [11.05, 4.45] 
  DrinkBar [11.4, 2.6] top
  DrinkBarStand [10.9, 2.6] 
  DrinkBarStand [11.9, 2.6] 
  DrinkBarQueue [11.4, 3.5] 
  DrinkBarQueue [11.4, 4.0] 
  DrinkBarQueue [11.4, 4.5] 
  RobotStandby [12.4, 4.55] 
  RobotStandby [13.2, 4.55] 
== wall
register []
{'robot_tables': 28, 'narrow_tables': 0, 'robot_dist_mean': 8.5, 'robot_dist_max': 13.92}
  FoodPass [11.05, 4.45] 
  DrinkBar [11.4, 1.0] top
  DrinkBarStand [10.9, 1.0] 
  DrinkBarStand [11.9, 1.0] 
  DrinkBarQueue [11.4, 1.9] 
  DrinkBarQueue [11.4, 2.4] 
  DrinkBarQueue [11.4, 2.9] 
  RobotStandby [12.4, 4.55] 
  RobotStandby [13.2, 4.55]
```

### 依頼文：ドリンクバーを動かして建て直す（20261027_10。11で置き直した）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 120
---
# 依頼：④のドリンクバーを動かしたので、Unity の④を建て直して3回回し直す（2026-10-27）

エイイチの決定（2026-10-27）：④の夜（20261030_p2・30回）で、2台の30秒以上の止まりが一番多かったのは「もう1台のロボット・受け渡し口の前」（256回）。ドリンクバーに並ぶ点が受け渡し口の前（出発点 11.05, 4.45）まで届いていたので、ドリンクバーを下の壁ぎわへ動かす。

サイト（正）はもう直して公開した（p2m-site commit 9eeca01）。
- 店の形の版：25e420d53394 → **39257d16b68a**（中身が変わったのは④だけ。ほかの5店は版の番号と地図の圧縮のバイトだけ）
- ④：ドリンクバー [10.4, 1.6, 12.4, 2.2] → **[10.4, 0.0, 12.4, 0.6]**。並ぶ点は (11.4, 1.9)・(11.4, 2.4)・(11.4, 2.9)。前に立つ点は y=1.0
- 卓までの距離は変わらないので、試算の数字（params の site_result）は前と同じ。params は layout_generation だけが変わった
- 台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_pre_p2check3_20261027/unity_ledger_v1.csv`（361行・md5 d019df2c3018fcb99b9e8bd4efde7e89）

## 始める前に確かめること（違えば手を止めて報告）

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0（作業フォルダに queue_p2.json が残っていれば、夜の記録 night/20261030_p2/queue.json と中身が同じかを確かめてから消してよい。check-in しない）
5. https://pixelstomotors.com/sim/serving-robot-params.json の meta.layout_generation が 39257d16b68a

## やること

1. 前回（cs:29）と同じやり方で、params と店の形をプロジェクトに写す（p1・p2・p5 と summary.json。版がそろっているか確かめる）
2. ④を前回と同じコード・同じ規則で建て直す（④のためだけの手直しはしない）。前回と同じ確かめ（止まる位置・道順・場所の点・NavMesh・確かめ A）を回し、前回と比べる。ドリンクバーの点（前・立つ点・並ぶ点）が NavMesh に乗っているか、受け渡し口の前のまわり（x 9.8〜13.6・y 2.9〜5.0）のロボットの地図のマスの種類が前とどう変わったかを書く
3. check-in して、画面なしの実行ファイルを作り直す（保留 0）
4. 確かめの3回を回す：④ × ロボット0・1・2台 × 種0、すれ違い入。ラベルは `p2check3`。記録の置き場所は分ける（`--record-name 20261027_p2check3`）
   - 台帳には3行が足される（追記だけ）。終わったら行数と、先頭361行の md5 が退避と同じかを確かめる
5. 何も指定しないとき、make_queue が③⑦の60回のままか確かめる（台帳に書かない）
6. 作業フォルダに queue の一時ファイルを残さない（作ったら、同じ中身が night/ の記録にあることを確かめて消す）

## 変えないもの

- 店の回し方・人とロボットの動き・速さ・物理の設定・同時に回す本数（N=4）
- 台帳の列（59列）と今までの行。③⑦の基準データ v4、④の夜 20261030_p2 の記録
- 本番の夜は回さない

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261027_HHMM_p2_drinkbar_check.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ5つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル
- ④を建て直して分かったこと（前回との違い。ドリンクバーのまわりと受け渡し口の前）
- 3回それぞれ、前回（cs:29 の p2check2）と同じ表で、今回・前回・試算を並べる
- 2台の回の30秒以上の止まりを、理由ごと・場所ごと（前回と同じ分け方）に。前回（p2check2・種0）と、④の夜（20261030_p2）の種0の回と並べる
- 台帳の行数と先頭361行の md5
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261027_2155_p2_drinkbar_check.txt

```text
====================================================================
④のドリンクバーを動かした版（39257d16b68a）で、Unity の④を建て直して3回回し直した
依頼：20261027_11_店4のドリンクバーを動かして建て直す_やり直し.md
2026-10-27 21:55　check-in：cs:30（保留 0）／build_id cs30_20261027_2150
====================================================================

結論

  ・④は前回と同じコード・同じ規則で建て直した。④のためだけの手直しはしていない。
    卓 28・席 88、止まる位置 28 か所はすべて NavMesh の上、届かない卓 0、確かめ A も通った。
    道順・確かめ A の道の長さは前回（cs:29）と1本も変わらない。
  ・ドリンクバーの点（前・立つ点2つ・並ぶ点3つ）は、ロボット用・人用どちらの NavMesh にも乗った。
  ・受け渡し口の前のまわり（x 9.8〜13.6・y 2.9〜5.0）のロボットの地図のマスの種類は、前と数が同じ
    （0：3054／1：848／2：8866）。変わったのはその下（y 1.1〜2.5）で、前の版のドリンクバーの場所が
    「通れない（0）」から「ふだんの道（2）」になった。
  ・2台の回の 30 秒以上の止まりは 87 → 85 回（1往復あたり 1.036 → 1.164）。ほぼ変わらない。
    「もう1台のロボット・受け渡し口の前」は 15 → 17 回（④の夜の種0も 17 回）。減っていない。
  ・1台の回は悪くなった（止まり 15 → 27 回、入店待ち 6.65 → 8.79 分）。
    ただし前回と同じ版・同じ種でも、前回の確かめ（p2check2）と④の夜の種0とで数字がずれている
    （2台の入店待ち 16.34 と 15.30、1台の止まり 15 と 18）ので、1回ずつの差は回ごとの揺れと見分けられない。
  ・台帳は 361 → 364 行（3行を追記）。先頭 361 行の md5 は退避と同じ。
  ・make_queue.py は何も指定しないとき③⑦の60回のまま。本番の夜は回していない。


====================================================================
1. 始める前の確かめ（5つとも合格。21:45 時点）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけが起動していた）
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳の md5：d019df2c3018fcb99b9e8bd4efde7e89（退避と同じ・どちらも 361 行）
  4. ServiceSim の保留：0（cs:29 head）。作業フォルダに queue_p2.json はなかった
     前回止めた回の残り：保留も、21:00 より後に書き換わった Assets・ProjectSettings・tools のファイルも
     なかったので、cm undo はしていない
  5. サイトの params の meta.layout_generation：39257d16b68a


====================================================================
2. 写したもの・入れたもの（cs:30）
====================================================================

  写し元：https://pixelstomotors.com/sim/（2026-10-27 21:46 に取得）
    控え：unity/site_copy_39257d16b68a/（params・summary.json・unity/ の6店の JSON と地図、README.txt）
  版の番号：params の layout_generation、summary.json の6店、6店の JSON と地図の meta.generation が
            すべて 39257d16b68a
  中身の比べ（前の版 25e420d53394 と）
    params：layout_generation だけが違う（site_result も同じ）
    summary.json：6店の generation だけが違う
    ③ p1・⑦ p5（と p0・p3・p4）：JSON は meta.generation だけ。地図はほどいた free_class・clear_mm が同じ
    ④ p2：ドリンクバー（places の DrinkBar と rooms の drink）の rect y 1.6〜2.2 → 0.0〜0.6、
          前の点と立つ点2つ y 2.6 → 1.0、並ぶ点 y 3.5/4.0/4.5 → 1.9/2.4/2.9
          地図のマスの数 2：55988 → 59723 / 1：18520 → 17745 / 0：251892 → 248932

  変えたファイル（cs:30 に入れたもの）
    Assets/ServiceSim/Experiment/serving-robot-params.json
    Assets/ServiceSim/Store/Layouts/p1_efficient_corner.json / p1_efficient_corner_map.json
    Assets/ServiceSim/Store/Layouts/p2_efficient_narrow.json / p2_efficient_narrow_map.json
    Assets/ServiceSim/Store/Layouts/p5_crammed.json / p5_crammed_map.json
    Assets/ServiceSim/Store/Layouts/summary.json
    Assets/ServiceSim/Store/StoreLayout_p2_efficient_narrow.asset（写した日時の字だけ。版 39257d16b68a）
  プロジェクトに写したのは前回と同じ p1・p2・p5 の3店だけ（p0・p3・p4 は控えにだけ置いた）

  画面なしの実行ファイル
    build_id cs30_20261027_2150 / unity_cs ServiceSim/cs:30 / pending_changes 空（保留なし）
    Build Finished, Result: Success・error CS 0。作ったあとも保留 0

  手で戻したもの（前回と同じ）
    建てて確かめる処理を回したら ProjectSettings/NavMeshAreas.asset と Mat_RobotKeepout.mat が
    書き直されたので cm undo で cs:29 に戻した（Mat は中身が同じだった）。どちらも check-in していない
  一時的に使ったもの
    ドリンクバーの点を NavMesh で確かめるための一時スクリプト（Editor/TmpP2DrinkCheck.cs）を置き、
    画面なしのエディタで JSON Store・Map Planner の確かめと一緒に呼んだ。終わってから消した。check-in していない
  screens の書き出し
    JSON Store の確かめと Build Store の書き出しは日付だけの名前なので、前回（20:03）の分を上書きする。
    前回の分は 20261027_cs29_2003_*（9 ファイル）として screens に残した


====================================================================
3. ④を建て直して分かったこと（前回 cs:29 との比べ）
====================================================================

                         前回（25e420d53394）      今回（39257d16b68a）
  卓・席                  28・88 で一致             28・88 で一致（summary.json とも）
  止まる位置（NavMesh）    乗らない 0 / 28           乗らない 0 / 28
  道順（全区間つながる）   28 / 28                   28 / 28
    JSON の dist との差    平均 −0.13・最大 0.43 m   同じ（卓ごとの CSV も1字も同じ）
  席に入れない卓           0                         0
  場所の点                 乗らない 0                乗らない 0
  行き止まり               届かない卓 0              届かない卓 0（ロボット・人とも）
  NavMesh のつながらない面 0 m2                      0 m2
    ロボット用の面         66.36 m2                  67.74 m2
    人用の面               73.03 m2                  74.11 m2
  確かめ A                 引けない卓 0・狭い道 0    引けない卓 0・狭い道 0（サイトと一致）
                           長さの比 1.01/1.028/1.06  同じ。卓ごとの道の長さも同じ（変わったのは探す時間だけ）
    待機場所1・2           1.331 m・2.154 m          同じ
  A01 の人用の歩ける幅     0.68 m（0.12 m 足りない） 同じ（変わらず）
  通れない場所の NavMesh   ドリンクバー 0 m2         ドリンクバー（x 10.4〜12.4・y 0〜0.6）0 m2

  ドリンクバーの点（ロボット用・人用とも、0.2 m 以内に NavMesh があるか）
    ドリンクバーの前   (11.4, 1.0)  乗る／乗る
    立つ点 1・2        (10.9, 1.0)・(11.9, 1.0)  乗る／乗る
    並ぶ点 1・2・3     (11.4, 1.9)・(11.4, 2.4)・(11.4, 2.9)  乗る／乗る
    受け渡し口の前 (11.05, 4.45) からの人の道：前 3.47 m・立つ点 3.45／3.55 m・
      並ぶ点 2.57／2.08／1.59 m（どれも PathComplete）
    並ぶ点 3 (11.4, 2.9) は、受け渡し口の前から 1.59 m・y の差 1.55 m。
    前の版の並ぶ点 3 (11.4, 4.5) は受け渡し口の前とほぼ同じ高さだった

  ロボットの地図のマスの種類
    受け渡し口の前のまわり（x 9.8〜13.6・y 2.9〜5.0。この範囲のマスの数）
      前回：0 3054 / 1 848 / 2 8866　clear_mm 最大 1400
      今回：0 3054 / 1 848 / 2 8866　clear_mm 最大 2038
      → マスの種類は1マスも変わらない。下が空いたぶん、壁までの空き（clear_mm）だけが広がった
    その下（ドリンクバーのまわり、x 10.0〜12.8・y 0〜3.2）
      前回：0 8240 / 1 1469 / 2 4627
      今回：0 5280 / 1 776 / 2 8280
      前の版のドリンクバーの場所（x 10.4〜12.4・y 1.6〜2.2）：全部 0 → 全部 2
      新しいドリンクバーの場所（x 10.4〜12.4・y 0〜0.6）：0 1200・1 320・2 400 → 全部 0
      0.2 m ごとに見ると、前は y 1.3〜2.5 の帯が x 10.1 から右で 0（通れない）で、
      受け渡し口の前の下は x 9.9 の1列だけが 2 だった。
      今は y 1.1〜3.1 が x 9.9〜12.3 まで 2 でつながり（x 12.5 は 1）、x 10.1 より右の 0 は y 0.9 以下だけ
    ロボット用の NavMesh（0.2 m ごと）
      x 9.9〜13.3・y 0.9〜4.9 はすべて乗る（x 13.5 は y 2.9 より下で乗らない＝レジのそば）。
      乗らないのは y 0.7 以下の x 10.3〜12.3 あたり（新しいドリンクバー）と、壁ぎわの y 0.1 の行だけ

  回の中で（2台の回）
    ドリンクバーのまわり（x 10.0〜12.8・y 3.2 未満）での 30 秒以上の止まり：0（前回 0・夜の種0 0）
    受け渡し口の前のまわり（x 9.8〜13.6・y 2.9〜5.0）での 30 秒以上の止まり：
      今回 23 ／ 前回 19 ／ 夜の種0 17


====================================================================
4. 確かめの3回（④・種0・すれ違い入・ラベル p2check3・同時 4 本の設定で 3 本）
====================================================================

  打ったコマンド（作業フォルダ ServiceSim で）
    python3 tools/make_queue.py --stores fam_p2 --seeds 0 --label p2check3 --out /tmp/p2c3/queue_p2check3.json
    python3 tools/night_runner.py --queue /tmp/p2c3/queue_p2check3.json --parallel 4 --night 20261027
      --label p2check3 --record-name 20261027_p2check3
  出力フォルダ   20261027_p2check3_cs30_fam_p2_r{0,1,2}_s0_passon
  記録          night/20261027_p2check3/（runner_log・runs.csv・queue.json・judge.md・judge.csv・logs/）
  runner        終了コード 0。completed 3・失敗 0。実時間 3.0 / 3.2 / 4.0 分
  judge.md      基準なし 3（④の基準データはないので判定していない）

  書き方：今回 Unity（cs:30）／ 前回 Unity（cs:29・p2check2）／ 試算（site_result）。単位は分。割合は 0〜1
                              0台                    1台                    2台
  最後まで回ったか            completed／completed    completed／completed    completed／completed
  全員帰ったか                はい／はい             はい／はい             はい／はい
  （参考）店の時間            192.6／192.8           198.1／189.2           239.8／216.3
  入れた組の数                48／48／55.95          48／48／54.30          48／48／55.30
  入店待ち                    6.41／6.61／10.39      8.79／6.65／2.93       20.74／16.34／3.46
   うち席は空いているのに待った 5.27／5.46／8.37      7.51／5.38／2.01       19.49／15.04／1.99
  料理の待ち                  1.26／1.32／0.88       2.65／1.67／1.28       4.02／2.93／0.47
  会計待ち                    1.48／1.59／4.20       3.26／2.35／4.91       3.22／2.81／5.25
  ロボットが運んだ皿の割合    0／0／0                0.825／0.900／0.956    0.817／0.925／1.000
  往復の数                    0／0                   66／80                 73／84
  30秒以上の止まり            0／0                   27／15                 85／87
   （1往復あたり）            0／0                   0.409／0.188           1.164／1.036
  動けなくなった（60秒）      0／0                   24／12                 66／65
  卓を空けた（逃がし弁）      0／0                   0／0                   1／1
  瞬間移動                    0／0                   30／15                 32／33
  打ち切り                    0／0                   2／0                   16／14
  （参考）あきらめた          0／0                   39／19                 80／77
  （参考）冷めた皿の割合      0.033／0.050／0.003    0.258／0.158／0.039    0.425／0.317／0
  （参考）卓が使えるまで      22.9／22.9／16.8       23.2／20.0／5.2        36.1／33.4／4.9

  試算の値は前回と同じ（params の site_result は変わっていない）。

  （参考）同じ版 cs:29・同じ種0の、④の夜（20261030_p2）の回
                              0台      1台      2台
    入店待ち                  6.61     7.78     15.30
    料理の待ち                1.29     1.90     3.87
    往復の数                  0        80       78
    30秒以上の止まり          0        18       87
    動けなくなった            0        13       67
    瞬間移動                  0        23       29
    打ち切り                  0        0        15
  → 前回の確かめと同じ版・同じ種でも数字がずれる。今回と前回の差（とくに1台の回）が
    ドリンクバーを動かしたせいかどうかは、1回ずつでは見分けられない。差の理由は調べていない。


====================================================================
5. 2台の回の 30 秒以上の止まり（理由ごと・場所ごと）
====================================================================

  数え方は前回と同じ（stops.csv の duration_s が 30 秒以上の行。場所は止まった点の座標）
    受け渡し口の前：x 9.8 m 以上
    下の列        ：x 9.8 m 未満で y 2.9 m 未満
    左の列        ：x 3.0 m 未満で y 2.9 m 以上
    上の列        ：y 8.5 m 以上
    その他        ：残り（真ん中の通路）
  この数え方で前回 p2check2 を数え直し、87 回・理由ごと・場所ごとが前回の報告と同じになることを確かめた。

  並びは 今回（p2check3）／ 前回（p2check2）／ ④の夜の種0（20261030_p2・r2_s0）
  往復の数                       73 ／ 84 ／ 78

  理由ごと
    もう1台のロボット           36 ／ 44 ／ 36
    人が立ち止まっていた        28 ／ 23 ／ 29
    スタッフとすれ違った        15 ／ 12 ／ 16
    お客さんとすれ違った         5 ／  4 ／  5
    椅子・荷物・ベビーカー       1 ／  4 ／  1
    分からない                   0 ／  0 ／  0
    合わせて                    85 ／ 87 ／ 87

  場所ごと
    受け渡し口の前              26 ／ 19 ／ 23
    下の列                      25 ／ 50 ／ 28
    左の列                      28 ／ 15 ／ 24
    その他（真ん中の通路）       5 ／  3 ／ 12
    上の列                       1 ／  0 ／  0

  理由×場所（多いもの）
    もう1台のロボット・受け渡し口の前     17 ／ 15 ／ 17
    もう1台のロボット・左の列             12 ／  9 ／ 14
    人が立ち止まっていた・下の列          12 ／ 19 ／ 17
    人が立ち止まっていた・左の列          10 ／  1 ／  5
    スタッフとすれ違った・下の列           6 ／  6 ／  4
    もう1台のロボット・下の列              5 ／ 20 ／  4
    スタッフとすれ違った・受け渡し口の前   5 ／  3 ／  6
    人が立ち止まっていた・受け渡し口の前   4 ／  1 ／  0
    スタッフとすれ違った・左の列           4 ／  3 ／  3
    お客さんとすれ違った・下の列           2 ／  2 ／  3
    人が立ち止まっていた・その他           1 ／  2 ／  7
    椅子など・下の列                       0 ／  3 ／  0

  受け渡し口の前の止まり 26 回は、すべて y 2.9 以上（受け渡し口の前のまわり x 9.8〜13.6・y 2.9〜5.0 の中は 23 回）。
  ドリンクバーのまわり（y 3.2 未満・x 10.0〜12.8）の止まりは 0。


====================================================================
6. 台帳
====================================================================

  行数：361 → 364（3 行足した。追記だけ。版 cs:30・店の形の版 39257d16b68a）
  先頭 361 行の md5：d019df2c3018fcb99b9e8bd4efde7e89（退避と同じ）
  鍵ファイルは残っていない


====================================================================
7. 何も指定しないときに③⑦の60回のままか（台帳には書いていない）
====================================================================

  python3 tools/make_queue.py --out /tmp/p2c3/q_default.json
    → 条件 6（fam_p1・fam_p5 × 0・1・2 台）× 種 0〜9 ＝ 60 回・すれ違い入 60
    → v4 の夜の night/20261029/queue.json と runs が並び順まで同じ
      （違うのは queue の layout_generation の字と stores の欄だけ）
  プロジェクトの queue.json（③⑦の60回）は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま）


====================================================================
8. 一時ファイル
====================================================================

  queue は作業フォルダの外（/tmp/p2c3/queue_p2check3.json）に作った。
  night/20261027_p2check3/queue.json と中身が同じ（cmp で一致）。作業フォルダに queue の一時ファイルはない。
  最後の保留：0（cs:30 head）


====================================================================
9. 決めてほしいこと
====================================================================

  1. ドリンクバーを動かしても、2台の回の「もう1台のロボット・受け渡し口の前」は減らなかった
     （今回 17・前回 15・夜の種0 17）。受け渡し口の前のまわりのロボットの地図のマスの種類も前と同じ。
     この先、受け渡し口の前の止まりをどう扱うか（ほかの直し方を考えるか、このまま④の夜を回すか）。
  2. 1台の回は今回のほうが悪かったが、同じ版・同じ種でも回ごとに数字がずれるため、1回では判断できない。
     ④の夜（種10個）を cs:30 で回し直して比べるかどうか。
  3. 入れた組の数は今回も3回とも 48 組で、試算（54〜56 組）より少ない（前回からの持ち越し）。
```

### 見立てが外れた：詰まっていたのはロボットどうしだった

2台の回の「もう1台のロボット・受け渡し口の前」は、今回17回・前回15回・④の夜の種0で17回で、減りませんでした。ドリンクバーのまわりの30秒以上の止まりは、前も今も0回です。並ぶお客さんは原因ではなく、受け渡し口のまわりで2台のロボットどうしがぶつかっていました。

同じ版・同じ種でも回ごとに数字がずれることも、ここで分かりました。前回の確かめと④の夜の種0は同じ作りですが、2台の入店待ちは16.34分と15.30分でした。


## 作業ログ ― 受け渡し口を1台ずつにしたら、逆に悪くなった

### 回し方の決まり（案B）は、試算には効かないので、サイトには決まりとして書いた

受け渡し口でのぶつかりを、回し方の決まりで防ぐことにしました。

1. 受け渡し口の前に入れるロボットは1台だけ。前の1台が出発点から1.5m離れるまで、次の1台は待機場所で待つ
2. その卓へ向かっているロボットがいる間は、その卓の料理を別のロボットに積まない。2分待っても来なければ、今までどおりスタッフが運ぶ

試算の作りを確かめると、試算の料理は卓までの距離だけを持っていて、どの卓の料理かを区別していません。受け渡し口で積む時間も0秒で、順番待ちが起きません。なので2つとも、試算の数字には効きません。受け渡し口でのぶつかりは通路で起きることなので、3Dの店が測る側です。サイトの params には決まりとして書くだけにし、試算の数字は変えませんでした（p2m-site commit 7484322）。

### 依頼文：受け渡し口は1台ずつ・同じ卓は1台（20261027_12）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 180
---
# 依頼：回し方の決まり（案B）を切り替えで入れ、④で3回確かめる（2026-10-27）

エイイチの決定（2026-10-27）：④でロボット2台の30秒以上の止まりが一番多いのは「もう1台のロボット・受け渡し口の前」（④の夜で256回／2台・種10個）。ドリンクバーを動かしても減らなかった（p2_drinkbar_check）。受け渡し口でのロボットどうしのぶつかりを、回し方の決まりで防ぐ。

サイト（正）に決まりを書いた（p2m-site commit 7484322）。params の schema が 0.3 になり、`unity_rules` が足された。試算の数字・条件・店の形の版（39257d16b68a）は変わっていない。
- `pass_one_robot`（true）：受け渡し口の前に入れるロボットは1台だけ。前の1台が出発点（FoodPass の点）から `pass_clear_m` 離れるまで、次の1台は待機場所で待つ
- `pass_clear_m`（1.5）：上の距離（仮の値）
- `same_table_one_robot`（true）：その卓へ向かっているロボットがいる間は、その卓の料理を別のロボットに積まない。`robot_first_wait_s`（120秒）待ってもロボットが来なければ、今までどおりスタッフが運ぶ

台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_pre_p2ruleB_20261027/unity_ledger_v1.csv`（364行・md5 4ca50edbd6a04dc41c66785b4b0c74af）

## 始める前に確かめること（違えば手を止めて報告）

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0（cs:30 head）
5. https://pixelstomotors.com/sim/serving-robot-params.json の meta.schema_version が serving-robot-params/0.3（まだ 0.2 なら、サイトへの反映待ちなので数分おきに取り直す。30分たっても 0.2 なら報告して終わる）

## やること

1. 公開版の params をプロジェクトに写す（手で値を写さない）。`unity_rules` 以外が cs:30 の写しと同じか確かめる
2. 2つの決まりを、params の `unity_rules` の値を読んで動く形で入れる。**切り替えにして、既定は「切」**（③⑦の基準データ v4 と④の夜 20261030_p2 は切の作り。切のときは今までと同じ動きになること）
   - 受け渡し口は1台ずつ：待機場所で待っているロボットは、受け渡し口の前に別のロボットがいる（出発点から pass_clear_m 以内）間は出ない。料理を積んで出たロボットが pass_clear_m 離れたら、次の1台が出てよい。戻ってきたロボットが受け渡し口の前を通る・下げ膳を返すときの扱いは、今の作りに合わせてよい（どう扱ったかを報告に書く）
   - 同じ卓は1台：料理を積むとき、その卓へ向かっている（その卓の料理を積んで走っている）ロボットがいれば、その料理は積まずに受け渡し口に残す。待つ時間の上限は今の robot_first_wait_s のまま（来なければスタッフが運ぶ）
   - 決まりで待った回数と秒数を数えて、各回の出力（summary.json か run_info.json）に残す。台帳の列は増やさない
   - キッチンのモニターに、決まりで待っているときの理由が出るようにする（例：「待機：受け渡し口に前のロボット」「積まない：同じ卓へ向かっている」）
3. 画面なしの実行ファイルと make_queue.py・night_runner.py で、この切り替えを選べるようにする（例：`-ssRuleB on`・`--rule-b on`）。切り替えが入のときは出力フォルダ名の末尾で分かるようにする（例：`_ruleb`）。何を回したかは run_info.json に書く
4. 何も指定しないとき、make_queue が③⑦の60回のまま（切）であることを確かめる（台帳に書かない）
5. 切のままで ④ × ロボット2台 × 種0 を1回回し、cs:30 の p2check3 の2台の回と同じ動きか（往復の数・30秒以上の止まり・入店待ち）を確かめる。ラベルは `p2ruleB_off`
6. check-in して、画面なしの実行ファイルを作り直す（保留 0）
7. 入で確かめの3回を回す：④ × ロボット0・1・2台 × 種0、すれ違い入。ラベルは `p2ruleB`。記録の置き場所は分ける（`--record-name 20261027_p2ruleB`）
   - 台帳には5と7で合わせて4行が足される（追記だけ）。終わったら行数と、先頭364行の md5 が退避と同じかを確かめる
8. 作業フォルダに queue の一時ファイルを残さない

## 変えないもの

- 店の形・人の動き・速さ・物理の設定・同時に回す本数（N=4）・すれ違いの作り
- 台帳の列（59列）と今までの行。③⑦の基準データ v4、④の夜 20261030_p2 の記録
- 本番の夜は回さない

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261027_HHMM_p2_ruleB_check.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ5つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル
- 2つの決まりをどう入れたか（戻ってきたロボットの扱いなど、決めたところ）
- 切のままの1回が前（p2check3 の2台）と同じ動きだったか
- 入の3回それぞれ、前回（p2check3）と同じ表で、入・切（p2check3）・試算を並べる
- 2台の回の30秒以上の止まりを、理由ごと・場所ごと（前回と同じ分け方）に、入と切（p2check3）で並べる
- 決まりで待った回数と秒数（受け渡し口・同じ卓）
- 台帳の行数と先頭364行の md5
- エイイチが画面で見る手順（どのメニューで、入の2台を流せるか）
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261027_2228_p2_ruleB_check.txt

```text
====================================================================
回し方の決まり（案B）を切り替えで入れ、④で確かめた
依頼：20261027_12_受け渡し口は1台ずつ_同じ卓は1台.md
2026-10-27 22:28　check-in：cs:31（決まりを入れた）→ cs:32（受け渡し口の決まりの直し）
build_id cs32_20261027_2227（保留 0）
====================================================================

結論

  ・2つの決まりを入れた。値は params の unity_rules から読む。既定は切。
  ・切のままの1回（p2ruleB_off）は、p2check3 の2台の回と数字が同じではなかった
    （往復 89／73、30秒以上の止まり 92／85、入店待ち 21.09／20.74 分）。切のときに通る処理は
    前と変えていないが、1回だけでは「回ごとの揺れ」と見分けられない（下の 4 章）。
  ★ 入の2台の回（cs:31）は、決まりの作りの誤りで正しく測れていない。
    往復を終えたロボットは待機場所まで下がらず、受け渡し口の点で止まっていることが多い
    （切の回でも同じ）。cs:31 では、そうして止まっているロボットを「受け渡し口の前にいる」と
    数えたので、2台とも受け渡し口で止まると互いを待ってどちらも出られなくなった。
    往復は 23 回だけ、受け渡し口の決まりで待った時間は 12,575 秒（台×秒。回は 206 分）。
    数字（止まり 24 回・入店待ち 10.49 分など）は「ロボットがほとんど走らなかった回」の数字で、
    決まりの効き目としては使えない。
  ・cs:32 で直した（往復していないロボットは数えない）。依頼で台帳に足す行は 4 行と決まっているので、
    直した版での回し直しはしていない（決めてほしいこと 1）。
  ・0台・1台の回は、決まりが効かない形（もう1台がいない）なので cs:31 のままで有効。
  ・台帳は 364 → 368 行（4行を追記）。先頭 364 行の md5 は退避と同じ。


====================================================================
1. 始める前の確かめ（5つとも合格。22:05 ごろ）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけが起動していた）
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳の md5：4ca50edbd6a04dc41c66785b4b0c74af（退避と同じ・どちらも 364 行）
  4. ServiceSim の保留：0（cs:30 head）
  5. サイトの params の meta.schema_version：serving-robot-params/0.3（はじめの取得で 0.3 だった）


====================================================================
2. 入れたもの（cs:31・cs:32）
====================================================================

  params：https://pixelstomotors.com/sim/serving-robot-params.json を curl でそのまま写した
          （md5 4f26ef40668b22d68eb170c2758b0576）。
          cs:30 の写しとの違いは meta.schema_version（0.2 → 0.3）と unity_rules が足されたことだけ。
          meta のほかの項目・common・stores・unity_conditions は同じ。

  変えたファイル
    cs:31
      Assets/ServiceSim/Experiment/serving-robot-params.json（公開版の写し）
      Assets/ServiceSim/Experiment/SimParams.cs        unity_rules を読む口（role=site_rule だけ）
      Assets/ServiceSim/Experiment/ExperimentRunner.cs 1回ごとの切り替え（Job.ruleB）・値を読む・記録・ログ
      Assets/ServiceSim/Service/ServiceOps.cs          2つの決まりと、待った回数・秒数
      Assets/ServiceSim/Experiment/TripLogger.cs       run_info.json と summary.json に rule_b
      Assets/ServiceSim/Store/KitchenMonitor.cs        待つ理由をモニターに出す
      Assets/ServiceSim/Experiment/HeadlessRun.cs      -ssRuleB on|off（既定 off）・フォルダ名に _ruleb
      Assets/ServiceSim/Editor/ServiceSimSiteRun.cs    メニュー「④ スタッフ2人・ロボット2台（回し方の決まり 入）」
      tools/make_queue.py                              --rule-b on|off（既定 off）
      tools/night_runner.py                            queue の rule_b を -ssRuleB で渡す・--rule-b・_ruleb
    cs:32
      Assets/ServiceSim/Service/ServiceOps.cs          受け渡し口の決まりの直し（3 章）

  画面なしの実行ファイル
    cs:31 で作った build（cs31_20261027_2218・保留なし）で 5 と 7 の4回を回した。
    そのあと cs:32 で作り直した：build_id cs32_20261027_2227 / unity_cs ServiceSim/cs:32 /
    pending_changes 空。Build Finished, Result: Success・error CS 0。作ったあとも保留 0。
    （入れる前に一度、保留ありのまま作って、組み立てが通るかだけを確かめた。それでは回していない）

  順番を依頼から変えたところ
    依頼は「5 切の1回 → 6 check-in して作り直す → 7 入の3回」だった。保留ありの実行ファイルで5を
    回すと、台帳の unity_cs が cs:30 のまま、中身は cs:30 と違う行になってしまう。そうならないよう、
    先に check-in して作り直し（cs:31）、5 と 7 をどちらも cs:31 で回した。

  切り替えの渡し方
    画面なし   -ssRuleB on|off（既定 off）
    make_queue --rule-b on|off（既定 off）。queue の各回と頭に rule_b を書く
    night_runner  queue の各回の rule_b を渡す（無ければ off）。--rule-b を付けると、queue に rule_b の
               無い回にはその値を使う。queue と食い違う回があれば始めない
    出力フォルダ名  …_s{種}[_passon][_ruleb][_try{n}]（入の回だけ _ruleb。C# と Python で同じ字）
    run_info.json  "rule_b": {enabled, pass_one_robot, pass_clear_m, same_table_one_robot, source}
    summary.json   "rule_b": {enabled, pass_waits, pass_wait_s, table_held_dishes, table_held_s,
                              table_held_to_staff}（切の回は 0）
    台帳の列は増やしていない（59 列のまま）。runs.csv の列も変えていない


====================================================================
3. 2つの決まりの入れ方（決めたところ）
====================================================================

  値は ExperimentRunner が params の unity_rules から読み、ServiceOps に渡す。入の回で読めなければ回さない。
  切の回は値を読まず、ServiceOps の処理も通らない（料理の選び方・コマの進め方は前と同じ）。

  受け渡し口は1台ずつ（pass_one_robot・pass_clear_m 1.5 m）
    ・出発点は store.PassPoint（FoodPass の点 11.05, 4.45）。
    ・料理を積めるロボット（Idle / Done）は、ほかのロボットが「受け渡し口の前にいる」間は積まずに待つ。
      「前にいる」とするのは次のどちらか
        a. 出たばかりで、まだ受け渡し口の前を抜けていない台
           抜けた＝出発点から 1.5 m 以内に入ってから 1.5 m より離れた。
           地図の道は今いる所から引くので、受け渡し口の前を通らずに出ることがある。その台は
           1.5 m より離れ、かつ出たときより出発点から遠くなったら抜けたとする。
           卓に着いた・戻り始めた台も外す
        b. 動いている台（卓へ・戻る・立ち往生）で、体が出発点から 1.5 m 以内にある台
           → 戻ってきて受け渡し口の前を通る台・戻りの線が使えず受け渡し口の前へ戻る台も入る
    ・往復していない台（Idle / Done）は、受け渡し口の前にいても数えない（cs:32 の直し）。
      cs:31 では「自分の待機場所に止まっている台だけを数えない」にしていた。
      ところが今の作りでは、往復を終えた台はたいてい受け渡し口の点（10.8〜10.9, 4.3〜4.5）で
      「往復おわり」のまま止まっていて、待機場所（12.4, 4.55）・（13.2, 4.55）まで下がらない
      （cs:31 の切の回でも、p2check3 でも同じ。robot_track.csv で確かめた）。
      そのため2台とも受け渡し口で止まると、互いを「前にいる」と数えてどちらも出られなかった。
      cs:32 では、止まっている台どうしなら先に積んだ1台が出て、もう1台はその台が抜けるまで待つ。
    ・戻ってきた台は待たせない（戻る道はそのまま）。下げ膳をロボットが返す作りはない
      （条件は上げ膳 mode=serve だけ）ので、扱いは入れていない。
    ・待った回数＝積める料理があるのに待ち始めた回数（台ごとに数えて足す）、秒数＝そのときの台×秒。

  同じ卓は1台（same_table_one_robot）
    ・料理を積むとき、ほかの台がその卓へ向かっている（その卓がまだ届けていない止まる所にある）なら、
      その皿は積まずに受け渡し口に残す。その卓で受け渡しをしている最中（25 秒）の台も入れた。
    ・待つ上限は今の robot_first_wait_s（120 秒）のまま。過ぎればスタッフの仕事板に出る（今までどおり）。
    ・「同じ通路に2台を集めない」より先に見る。細い通路の卓は、もともと同じ通路の決まりでも積まないので、
      この決まりが新しく効くのは、細い通路の中にない卓だけ。
    ・数え方：残した皿の数（1皿1回）、秒数＝空いた台が積めたのにこの決まりで積まなかったコマの皿×秒、
      そのうち結局スタッフが運んだ皿の数。

  キッチンのモニター
    ・決まりで待っている台は「1号機 待機 ／ 待機：受け渡し口に前のロボット」
    ・入の回だけ「回し方の決まり 入（受け渡し口で待った N 回・同じ卓で積まなかった N 皿）」の行と、
      そのとき積んでいない皿があれば「積まない：同じ卓へ向かっている 卓05・卓12」の行が出る
    ・画面なしの回ではモニターは作らない（今までどおり）


====================================================================
4. 切のままの1回（④・2台・種0・すれ違い入・ラベル p2ruleB_off・cs:31）
====================================================================

  python3 tools/make_queue.py --stores fam_p2 --conditions fam_p2_s2_r2_a28 --seeds 0
      --label p2ruleB_off --out /tmp/p2rb/queue_p2ruleB_off.json
  python3 tools/night_runner.py --queue /tmp/p2rb/queue_p2ruleB_off.json --parallel 4 --night 20261027
      --label p2ruleB_off --record-name 20261027_p2ruleB_off
  出力 20261027_p2ruleB_off_cs31_fam_p2_r2_s0_passon（completed・終了コード 0・3.2 分。同時 1 本）
  run_info.json の rule_b.enabled = false、summary.json の rule_b はすべて 0

                         今回（cs:31 切）   p2check3（cs:30）   参考：p2check2（cs:29）／④の夜の種0
  往復の数                89                 73                  84 ／ 78
  30秒以上の止まり        92                 85                  87 ／ 87
  入店待ち（分）          21.09              20.74               16.34 ／ 15.30
  動けなくなった          73                 66                  65 ／ 67
  打ち切り                15                 16                  14 ／ 15
  店の時間（分）          258.3              239.8
  → 同じ数字ではない。往復の数は前に見た幅（73〜84）より多い。
    切の回で通る処理は前と同じにしてある（足した処理はどれも「入のときだけ」の枝の中）ので、
    回ごとの揺れ（同じ版・同じ種でもずれる。前回の報告の 4 章）と見ているが、1回では言い切れない。
    違いとして、今回は1本だけで回した（p2check3 は同時 3 本）。


====================================================================
5. 入の3回（④・ロボット 0・1・2台・種0・すれ違い入・ラベル p2ruleB・cs:31）
====================================================================

  python3 tools/make_queue.py --stores fam_p2 --seeds 0 --label p2ruleB --rule-b on
      --out /tmp/p2rb/queue_p2ruleB.json
  python3 tools/night_runner.py --queue /tmp/p2rb/queue_p2ruleB.json --parallel 4 --night 20261027
      --label p2ruleB --record-name 20261027_p2ruleB --rule-b on
  出力 20261027_p2ruleB_cs31_fam_p2_r{0,1,2}_s0_passon_ruleb（3本とも completed・終了コード 0・
       2.8／3.0／3.3 分。同時 3 本）
  記録 night/20261027_p2ruleB/
  run_info.json の rule_b：enabled true・pass_one_robot true・pass_clear_m 1.5・same_table_one_robot true

  ★ 2台の回は 1 章・3 章の誤りで正しく測れていない（cs:31 の作り）。0台・1台の回は決まりが効かない

  書き方：入（cs:31）／ 切（p2check3・cs:30）／ 試算（site_result）。単位は分。割合は 0〜1
                              0台                    1台                    2台（★）
  最後まで回ったか            completed／completed    completed／completed    completed／completed
  全員帰ったか                はい／はい             はい／はい             はい／はい
  （参考）店の時間            192.3／192.6           196.0／198.1           205.8／239.8
  入れた組の数                48／48／55.95          48／48／54.30          48／48／55.30
  入店待ち                    6.46／6.41／10.39      8.00／8.79／2.93       10.49／20.74／3.46
   うち席は空いているのに待った 5.32／5.27／8.37      6.67／7.51／2.01       9.27／19.49／1.99
  料理の待ち                  1.30／1.26／0.88       2.72／2.65／1.28       3.86／4.02／0.47
  会計待ち                    1.56／1.48／4.20       3.17／3.26／4.91       1.83／3.22／5.25
  ロボットが運んだ皿の割合    0／0／0                0.842／0.825／0.956    0.258／0.817／1.000
  往復の数                    0／0                   68／66                 23／73
  30秒以上の止まり            0／0                   23／27                 24／85
   （1往復あたり）            0／0                   0.338／0.409           1.043／1.164
  動けなくなった（60秒）      0／0                   18／24                 19／66
  卓を空けた（逃がし弁）      0／0                   0／0                   0／1
  瞬間移動                    0／0                   23／30                 5／32
  打ち切り                    0／0                   1／2                   5／16
  （参考）あきらめた          0／0                   29／39                 25／80
  （参考）冷めた皿の割合      0.025／0.033／0.003    0.267／0.258／0.039    0.633／0.425／0
  （参考）卓が使えるまで      22.9／22.9／16.8       20.8／23.2／5.2        21.8／36.1／4.9

  2台の回でロボットが運んだ皿は 0.258 だけで、残りはスタッフが運んだ（料理の 120 秒待ちのあと）。
  入店待ちが短く見えるのは、ロボットがほとんど走らず店の中の邪魔が減ったためで、決まりの効き目ではない。
  冷めた皿の割合は 0.633 に上がった。


====================================================================
6. 2台の回の 30 秒以上の止まり（理由ごと・場所ごと。前回と同じ数え方）
====================================================================

  数え方は前回と同じ（stops.csv の duration_s が 30 秒以上。場所は x 9.8 以上＝受け渡し口の前、
  x 9.8 未満で y 2.9 未満＝下の列、x 3.0 未満で y 2.9 以上＝左の列、y 8.5 以上＝上の列、残り＝その他）。
  この数え方で p2check3 を数え直し、前回の報告と同じ数（85 回・理由・場所）になることを確かめた。

  並びは 入（cs:31★）／ 切（p2check3）／ 参考：切（cs:31・p2ruleB_off）
  往復の数                       23 ／ 73 ／ 89

  理由ごと
    もう1台のロボット            8 ／ 36 ／ 33
    人が立ち止まっていた         7 ／ 28 ／ 32
    スタッフとすれ違った         8 ／ 15 ／ 19
    お客さんとすれ違った         1 ／  5 ／  6
    椅子・荷物・ベビーカー       0 ／  1 ／  0
    分からない                   0 ／  0 ／  2
    合わせて                    24 ／ 85 ／ 92

  場所ごと
    受け渡し口の前               1 ／ 26 ／ 41
    下の列                      15 ／ 25 ／ 35
    左の列                       8 ／ 28 ／ 11
    その他（真ん中の通路）       0 ／  5 ／  4
    上の列                       0 ／  1 ／  1

  理由×場所（多いもの）
    もう1台のロボット・受け渡し口の前     0 ／ 17 ／ 18
    人が立ち止まっていた・下の列          6 ／ 12 ／ 15
    スタッフとすれ違った・下の列          5 ／  6 ／  6
    もう1台のロボット・下の列             4 ／  5 ／ 10
    もう1台のロボット・左の列             4 ／ 12 ／  4
    スタッフとすれ違った・左の列          2 ／  4 ／  3
    スタッフとすれ違った・受け渡し口の前  1 ／  5 ／ 10
    人が立ち止まっていた・左の列          1 ／ 10 ／  3
    お客さんとすれ違った・左の列          1 ／  1 ／  1
    人が立ち止まっていた・受け渡し口の前  0 ／  4 ／ 11

  受け渡し口の前のまわり（x 9.8〜13.6・y 2.9〜5.0）の止まり：1 ／ 23 ／ 32
  ★ 入の「もう1台のロボット・受け渡し口の前」は 0 だが、ロボットがほとんど走っていない回なので
    減ったとは言えない。


====================================================================
7. 決まりで待った回数と秒数（summary.json の rule_b）
====================================================================

                          受け渡し口（待った回・台×秒）   同じ卓（残した皿・皿×秒・うちスタッフ）
  0台（入）               0 回・0 秒                     0 皿・0 秒・0
  1台（入）               0 回・0 秒                     0 皿・0 秒・0
  2台（入・cs:31★）       33 回・12,574.8 秒             0 皿・0 秒・0
  切の回（p2ruleB_off）    0                              0

  2台の回の 12,575 秒は、2台が互いを待ち続けた時間（3 章の誤り）。
  同じ卓の決まりは1度も効かなかった。この回はロボットがほとんど同時に走っていないうえ、
  ④の卓の多くは細い通路の中で、もともと同じ通路の決まりで積まないため。


====================================================================
8. 台帳
====================================================================

  行数：364 → 368（4 行足した。追記だけ。4行とも unity_cs ServiceSim/cs:31）
    20261027_p2ruleB_off_cs31_fam_p2_r2_s0_passon
    20261027_p2ruleB_cs31_fam_p2_r{0,1,2}_s0_passon_ruleb
  先頭 364 行の md5：4ca50edbd6a04dc41c66785b4b0c74af（退避と同じ）
  列は 59 列のまま。鍵ファイルは残っていない


====================================================================
9. 何も指定しないときに③⑦の60回・切のままか（台帳には書いていない）
====================================================================

  python3 tools/make_queue.py --out /tmp/p2rb/q_default.json
    → 条件 6（fam_p1・fam_p5 × 0・1・2 台）× 種 0〜9 ＝ 60 回・すれ違い入 60・rule_b はすべて off
    → v4 の夜の night/20261029/queue.json と、条件・種・すれ違いの並びが同じ
      （違うのは queue の layout_generation の字・stores の欄・rule_b の欄が足されたことだけ）
  プロジェクトの queue.json（③⑦の60回）は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま）


====================================================================
10. 一時ファイル・気づいたこと
====================================================================

  queue は作業フォルダの外（/tmp/p2rb/）に作った。作業フォルダに queue の一時ファイルはない。最後の保留 0（cs:32 head）。
  判定（judge_night.py）は night_runner が「--runs {夜}_{ラベル}_*」で呼ぶので、
  ラベル p2ruleB の判定に p2ruleB_off の回も入った（night/20261027_p2ruleB/judge.md は 4 回。
  どれも「基準なし」）。また judge_night.py は決まりの入切を条件として分けない。
  今回は④に基準データがないので判定に効いていない。直していない（依頼の範囲の外）。


====================================================================
11. エイイチが画面で見る手順
====================================================================

  1. Unity で ServiceSim を開き、ServiceSim_Family シーンを開く
  2. メニュー ServiceSim → Site Run → 「④ スタッフ2人・ロボット2台（回し方の決まり 入）」
     （ほかの Site Run のメニューは切のまま。入にするのはこの1回だけで、.asset は書き換えない）
  3. Play に入る。Console の「回し始め」の行に「回し方の決まり（案B）: 入（受け渡し口は1台ずつ 入・
     離れる距離 1.5 m／同じ卓は1台 入。値は params の unity_rules）」と出る
  4. Scene ビューのキッチンのモニターに、待っている台は「待機：受け渡し口に前のロボット」、
     「回し方の決まり 入（…）」の行、積んでいない皿があれば「積まない：同じ卓へ向かっている 卓NN」が出る
  5. 出力は KIOXIA の {日付}_p2_efficient_narrow_fam_p2_s2_r2_a28_s{種}_ruleb_{時刻}/ に出る。
     台帳には書かない（台帳に書くのは段階Bのメニューと画面なしの実行だけ）
  ※ エディタは cs:32（直したあと）の作りで動く


====================================================================
12. 決めてほしいこと
====================================================================

  1. 入の2台の回（cs:31）は、作りの誤りで測れていなかった。cs:32 で直し、実行ファイルも作り直したが、
     依頼で台帳に足すのは 4 行と決まっていたので回し直していない。
     cs:32 で入の3回（またはせめて2台の1回）を回し直すか（台帳にさらに 3 行（または 1 行）足すことになる）。
     cs:31 の入の3行は台帳に残っている（追記だけなので消していない）。比べるときにこの3行をどう扱うかも。
  2. 往復を終えたロボットが待機場所まで下がらず、受け渡し口の点で止まっていることが多い（切の回でも同じ）。
     受け渡し口の前の止まりにも関わっていそうだが、今回は直していない（店の回し方が変わるので依頼の範囲の外）。
     調べて直すかどうか。
  3. 切のままの1回は p2check3 と数字が同じではなかった（往復 89／73 など）。処理は変えていないので
     回ごとの揺れと見ているが、確かめるなら同じ版・同じ種を何回か回す必要がある（台帳に行が増える）。
```

### 2台が互いを待ち続け、もう1つの誤りが見つかった

「入」の2台の回は、作りの誤りで2台が互いを待ち続け、往復が23回しかありませんでした（ふだんは70〜90回）。Claude Code はこれを直しました（cs:32）。

その調べの途中で、**往復を終えたロボットが待機場所まで下がらず、受け渡し口の点で止まったまま次の料理を待っていたこと**が分かりました。決まりを切った回でも、前の回でも同じでした。店の形では、待機場所を受け渡し口の横に決めてあります。サイトの決まりに3Dの店が合っていない作りの誤りです。③⑦の回も、同じ作りで回っていました。


## 作業ログ ― 待機場所へ戻るように直し、④を3つの作りで比べた

### 依頼文：待機場所へ戻る と④の比べ（20261027_13・夜の作業）

> 進めて、夜の間に作業できるようにしてください。

夜の間に2つの依頼が続けて回るように置きました。人に聞かないと進めない所に当たったら、その作業だけ止めて報告に書き、ほかの作業は続ける形にしています。2つ目は、1つ目がちゃんと終わったときだけ始まり、台帳の退避も Claude Code が自分で行います。

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 300
---
# 依頼：往復を終えたロボットが待機場所へ戻るように直し、④で3つの作りを種10個ずつ比べる（夜の作業・2026-10-27）

エイイチの決定（2026-10-27 22:52）：前の報告（20261027_2228_p2_ruleB_check.txt）の「決めてほしいこと 2」のとおり、往復を終えたロボットが待機場所まで下がらず、受け渡し口の点（10.8〜10.9, 4.3〜4.5）で止まっている。店の形では待機場所（RobotStandby）が受け渡し口の横に決まっているので、これはサイトの決まりに Unity が合っていない作りの誤りとして直す。そのうえで、案B（受け渡し口は1台ずつ・同じ卓は1台）の効き目を、種10個の中央値で測る。
**エイイチは寝ている。人に聞かないと進めない所に当たったら、その作業は止めて報告に書き、ほかの作業は続ける。**

台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_pre_standby_20261027/unity_ledger_v1.csv`（368行・md5 f15eb7e9f26c110388003506683978f0）

## 始める前に確かめること（違えば回さずに報告して終わる）

1. Unity エディタが起動していない（起動していたら閉じずに報告して終わる）
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0（cs:32 head）

## やること

1. **待機場所へ戻る**を切り替えで入れる（`-ssStandbyReturn on|off`・make_queue / night_runner の `--standby-return on|off`。**既定は切**＝今までの動き。入の回は出力フォルダ名の末尾に `_sbret`。run_info.json に書く。台帳の列は増やさない）
   - 入のとき：往復を終えたロボットは、受け渡し口の点で止まらず、自分の待機場所（params ではなく店の形の RobotStandby。1台に1つ）へ下がって待つ。次の料理を積むときは待機場所から受け渡し口の前へ出る
   - 待機場所への道が引けないときは、今までどおり受け渡し口の点で待つ（その回数を数えて summary.json に残す）
   - 案Bの「受け渡し口は1台ずつ」は、待機場所で止まっている台を数えない（cs:32 の直しと同じ考え）
   - キッチンのモニターに「待機場所へ戻る」が分かる表示を足す
2. 判定（judge_night.py）がラベルの頭が同じ別の回を拾う件（例：p2ruleB の判定に p2ruleB_off が入る）を直す。ラベルまで完全に一致する回だけを拾う。判定の決まりそのものは変えない
3. 切のまま（待機場所へ戻る 切・案B 切）で ④ × 2台 × 種0 を1回回し、cs:31 の p2ruleB_off と同じ動きかを見る（ラベル `sbcheck_off`）。同じでなくても止めずに続け、違いを報告に書く
4. check-in して、画面なしの実行ファイルを作り直す（保留 0）。3 は保留ありの実行ファイルで回さない（台帳の unity_cs と中身をそろえるため、先に check-in してよい）
5. 夜の名前 20261031 で、④（fam_p2）を次の 70 回回す。すれ違い入。同時に回す本数は 4 のまま。記録は night/20261031_p2/ に分ける
   - A：待機場所へ戻る 切・案B 切 … ロボット 0・1・2台 × 種0〜9（30回）
   - B：待機場所へ戻る 入・案B 切 … ロボット 1・2台 × 種0〜9（20回）
   - C：待機場所へ戻る 入・案B 入 … ロボット 1・2台 × 種0〜9（20回）
   （0台はロボットがいないので A だけ）
6. 回ごとの揺れの確かめ：④ × 2台 × 種0、A の作りで、同時1本で3回・同時4本で3回（ラベル `repeat1`・`repeat4`、記録は night/20261031_repeat/）。同じ版・同じ種で数字がどれだけずれるか、同時に回す本数で変わるかを見る
7. 回したあと：台帳の行数（368 → 368＋1＋70＋6＝445 のはず）と、先頭368行の md5 が退避と同じかを確かめる
8. 作業フォルダに queue の一時ファイルを残さない

## 変えないもの

- 店の形・人の動き・速さ・物理の設定・すれ違いの作り・案Bの決まりの中身（cs:32 のまま）
- 何も指定しないときの make_queue（③⑦の60回・すれ違い入・待機場所へ戻る 切・案B 切）
- 台帳の列（59列）と今までの行。③⑦の基準データ v4、④の夜 20261030_p2 の記録

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261031_night_p2_standby.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ4つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル・待機場所へ戻る作りで決めたところ
- 3 の切の1回と cs:31 の p2ruleB_off の比べ
- 5 の A・B・C × 台数ごとの種10個の中央値（最小〜最大）：入店待ち・そのうち席は空いているのに待った時間・料理の待ち・会計待ち・入れた組の数・ロボットが運んだ皿の割合・往復の数・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・瞬間移動・打ち切り・卓を空けた・冷めた皿の割合。試算の値（params の site_result）も並べる
- 2台の30秒以上の止まりを、A・B・C ごとに理由ごと・場所ごと（前回と同じ分け方）に種10個の合計で
- 案Bで待った回数と秒数・待機場所へ戻れなかった回数（B・C）
- 6 の揺れ：6回それぞれの往復の数・30秒以上の止まり・入店待ち、同時1本と4本の違い
- 台帳の行数と先頭368行の md5
- 全員が帰らなかった回・失敗した回があればその名前（原因の調べはしない）
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261031_night_p2_standby.txt

```text

====================================================================
待機場所へ戻るを切り替えで入れ、④で3つの作り（A・B・C）を種10個ずつ比べた
依頼：20261027_13_待機場所へ戻る_と④の比べ.md
2026-10-27 23:07 check-in：cs:33／build_id cs33_20261027_2307（保留 0）
夜：20261031（2026-10-27 23:11〜10-28 00:30）・揺れの確かめ 00:30〜00:43
====================================================================

結論

  ・待機場所へ戻るを入れた（既定は切）。入の回では、往復を終えた台は自分の待機場所で待つ
    （テストの回では「往復おわり」のコマの 97% が自分の待機場所から 0.4 m 以内。今までは 1%）。
    待機場所への道が引けなかったのは、B・C の 40 回で 0 回。
  ・今まで下がらなかった理由：仕事のない台を待機場所へ下げる処理（GoStandby）はあったが、
    ロボットの体は止まっている間（Idle/Done）は動かさない作りなので、効いていなかった。
  ・④2台の中央値（A 切・切 → B 待機場所 入 → C 待機場所 入・案B 入）
      30秒以上の止まり（1往復あたり）   1.092 → 0.806 → 1.427
      往復の数                           92 → 94 → 62
      入店待ち（分）                     24.74 → 24.79 → 21.35
      瞬間移動                           51 → 36 → 25
    B は受け渡し口の前の「もう1台のロボット」が 278 → 110 回（種10個の合計）に減った。
    C は案Bで受け渡し口で待った秒数が大きく（2台で回ごとの中央値 3,376 台秒）、往復が減り、
    受け渡し口の前の「もう1台のロボット」は 444 回に増えた。
  ・同じ版・同じ種・同時1本で3回回しても、数字はそろわなかった（往復 77〜84・止まり 88〜96）。
    1回どうしの比べは、回ごとの揺れより小さい差を見分けられない。
  ・台帳 368 → 445 行。先頭 368 行の md5 は退避と同じ。失敗した回・全員が帰らなかった回はない。


====================================================================
1. 始める前の確かめ（4つとも合格。22:50 ごろ）
====================================================================

  1. Unity エディタ：起動していない（Unity Hub だけ）
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳の md5：f15eb7e9f26c110388003506683978f0（退避と同じ・どちらも 368 行）
  4. ServiceSim の保留：0（cs:32 head）


====================================================================
2. 入れたもの（cs:33）
====================================================================

  画面なしの実行ファイル：build_id cs33_20261027_2307 / unity_cs ServiceSim/cs:33 / pending_changes 空。
    Build Finished, Result: Success・error CS 0。作ったあとも保留 0（cs:33 head）。
    3・5・6 の回はすべてこの実行ファイルで回した（台帳の 77 行とも unity_cs ServiceSim/cs:33）。

  変えたファイル（cs:33）
    Assets/ServiceSim/Robot/ServingRobotController.cs  戻りの行き先を待機場所に・待機場所から受け渡し口の前へ出る
    Assets/ServiceSim/Service/ServiceOps.cs            切り替え（standbyReturnEnabled）と回数
    Assets/ServiceSim/Experiment/ExperimentRunner.cs   1回ごとの切り替え（Job.standbyReturn）・記録・ログ
    Assets/ServiceSim/Experiment/TripLogger.cs         run_info.json と summary.json に standby_return
    Assets/ServiceSim/Experiment/HeadlessRun.cs        -ssStandbyReturn on|off（既定 off）・フォルダ名に _sbret
    Assets/ServiceSim/Store/KitchenMonitor.cs          モニターの表示
    Assets/ServiceSim/Editor/ServiceSimSiteRun.cs      メニュー「④ スタッフ2人・ロボット2台（待機場所へ戻る 入）」
    tools/make_queue.py                                --standby-return on|off（既定 off）
    tools/night_runner.py                              queue の standby_return を -ssStandbyReturn で渡す・
                                                       --standby-return・_sbret・回ごとの名札（下の 2-4）・
                                                       判定に --label-prefix を渡す
    tools/judge_night.py                               --label-prefix（2-3）

  2-1. 切り替えの渡し方
    画面なし        -ssStandbyReturn on|off（既定 off）
    make_queue      --standby-return on|off（既定 off）。queue の各回と頭に standby_return を書く
    night_runner    queue の各回の standby_return を渡す（無ければ off）。--standby-return を付けると、
                    queue に無い回にはその値を使い、食い違う回があれば始めない（--rule-b と同じ形）
    出力フォルダ名  …_s{種}[_passon][_ruleb][_sbret][_try{n}]（入の回だけ _sbret。_ruleb の後ろ・_try の前。
                    C# と Python で同じ字）
    run_info.json   "standby_return": {enabled, standby_points, source: "store layout RobotStandby"}
    summary.json    "standby_return": {enabled, returns, fallbacks, departures}（切の回は 0）
                    fallbacks＝待機場所への道が引けず、受け渡し口の点で待った回数
    台帳の列は増やしていない（59 列のまま）。runs.csv の列も変えていない
    何も指定しないときの make_queue は今までどおり（③⑦の60回・すれ違い入・待機場所へ戻る 切・案B 切）。
    プロジェクトの queue.json（③⑦の60回）は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま）

  2-2. 待機場所へ戻る作りで決めたところ
    ・待機場所は店の形の RobotStandby（store.RobotStandbyPoints）。1台めは1つめ、2台めは2つめ
      （④は (12.4, 4.55)・(13.2, 4.55)。今までの置き始めと同じ割り当て）。params は見ない。
    ・戻り：最後の卓から戻る区間の行き先を、受け渡し口の点ではなく自分の待機場所にする。
      受け渡し口の点で一度止まってから動き直すのではなく、そのまま待機場所まで走る。
      走り方・止まる決まり（前のセンサー・譲り合い・すれ違い・立ち往生）は今の戻りと同じ。
    ・道が引けるか：戻りを始めるときに、地図の上で今いる所から待機場所まで道を引いてみる。
      引けなければ今までどおり受け渡し口の点へ戻り、fallbacks に数える（この確かめは
      「引き直し」「引けなかった」の回数には入れない）。
      SiteRoutes の店では、もともとの戻りの線が使えればそれ、使えなければ道順の後ろに
      待機場所を足し、通れる床に乗らなければ受け渡し口の点へ戻る。
    ・出る：料理を積むとき、受け渡し口の点から arriveRadius（0.25 m）より離れていれば、
      まず受け渡し口の点まで出て、着いたらそこから卓へ向かう（積む時間は今までどおり 0）。
      この間は細い通路の譲り合いを見ない（卓への区間はまだ始まっていないため）。
    ★ 往復の記録（距離・時間・止まり・動けなくなった）には、待機場所までの戻りと、
      待機場所から受け渡し口の前へ出る分も入る。往復の数の数え方は変わらない。
    ・打ち切り（maxTripSec）で置き直すときは今までどおり（受け渡し口の点→待機場所の順に空いた所）。
      受け渡し口の点に置き直された台は、次の往復までそこで待つ（テストの回で、往復おわりのコマの
      3%（案Bも入は 21%）が受け渡し口の点だった。打ち切りのあとと見ている）。
    ・案Bの「受け渡し口は1台ずつ」は cs:32 のまま（往復していない台 Idle/Done は数えない）。
      待機場所で止まっている台は Done なので数えない。決まりの中身は変えていない。
    ・切の回では、足した処理はどれも通らない（行き先の決め方は前と同じ式になる）。
    ・キッチンのモニター（入の回だけ変わる）
        戻っている台      「1号機 戻る（待機場所へ）」
        出ている台        「1号機 受け渡し口へ出る（配膳 卓05）」
        入の回だけの行    「待機場所へ戻る 入（戻った N 回・道が引けず受け渡し口で待った N 回）」
      画面で見る手順：ServiceSim_Family シーン → メニュー ServiceSim → Site Run →
      「④ スタッフ2人・ロボット2台（待機場所へ戻る 入）」（ほかのメニューは切のまま）

  2-3. 判定（judge_night.py）の直し
    --label-prefix {夜}_{ラベル}（カンマ区切りで複数可）を足した。名前が「{夜}_{ラベル}_cs{N}_」で
    始まる回だけを拾う。night_runner はこれを必ず渡す。判定の決まりそのものは変えていない。
    確かめ：20261027_p2ruleB を判定し直すと 4 回 → 3 回（p2ruleB_off が外れた。/tmp に出した）。

  2-4. 回ごとの名札（6 のため）
    同じ条件・同じ種を3回回すと、出力フォルダ名が同じになり、2回めからは「もう回した回」として
    飛ばされる。そこで night_runner で、queue の回ごとに label を持てるようにした（無ければ --label）。
    6 の名札は repeat1a・repeat1b・repeat1c・repeat4a・repeat4b・repeat4c にした
    （依頼の repeat1・repeat4 の後ろに a/b/c を付けた）。

  2-5. 入れる前のテスト（台帳には書いていない）
    台帳に行を足さずに入の動きを確かめるため、出力先だけを一時的に
    /Volumes/KIOXIA/r2r2r-data/service_sim/unity_scratch_20261027_sbret/ に向けた実行ファイル
    （保留あり・cs32 の上）で、④2台・種0 を2回（待機場所へ戻る 入／入＋案B 入）回した。
    出力先は回したあと元に戻し（cm undo）、保留 0 で check-in・作り直した。
    テストの結果：どちらも completed・全員帰った・fallbacks 0。往復おわりのコマの位置は
      入            自分の待機場所 1920 コマ（97%）・受け渡し口の点 56
      入＋案B 入    自分の待機場所 1495 コマ（79%）・受け渡し口の点 386
      （参考）cs:31 の p2ruleB_off（切）  自分の待機場所 21・受け渡し口の点 1340・そのほか 579
    このフォルダ（2回ぶんと、その中だけの台帳）は KIOXIA に残してある（決めてほしいこと 4）。


====================================================================
3. 切の1回（④・2台・種0・待機場所へ戻る 切・案B 切・ラベル sbcheck_off・cs:33）
====================================================================

  出力 20261027_sbcheck_off_cs33_fam_p2_r2_s0_passon（completed・2.6 分・同時 1 本）
  記録 night/20261027_sbcheck_off/

                         sbcheck_off（cs:33）   p2ruleB_off（cs:31）
  往復の数                89                     89
  30秒以上の止まり        78                     92
   （1往復あたり）        0.876                  1.034
  入店待ち（分）          14.99                  21.09
   うち席は空いているのに  13.65                  19.76
  料理の待ち（分）        3.01                   4.00
  動けなくなった          54                     73
  瞬間移動                34                     35
  打ち切り                12                     15
  店の時間（分）          218.8                  258.3
  冷めた皿の割合          0.275                  0.400
  → 同じではない。どちらも同時1本。下の 6 の揺れ（同時1本の3回で入店待ち 18.41〜19.85、
    止まり 88〜96）と比べると、sbcheck_off の止まり 78・入店待ち 14.99 はその幅の外。
    同じ版・同じ種・同時1本でも回ごとにずれるので、切の処理が変わったかどうかはこの比べでは言えない。
    （切の回で足した処理が通らないことはコードで確かめた）


====================================================================
4. 夜 20261031（④ fam_p2・すれ違い入・同時 4 本・70 回・cs:33）
====================================================================

  queue：make_queue の3つ（A／B --standby-return on／C --standby-return on --rule-b on）を、
         種ごとに A→B→C の順に混ぜて1つにした（種0 の7回 → 種1 の7回 → …）。
         ラベルはどれも p2（作りはフォルダ名の _sbret・_ruleb で分かれる）。
  記録 night/20261031_p2/（runner_log.txt・runs.csv・queue.json・judge.md）
  70 回とも completed・終了コード 0。全員帰った。やり直し（_try2）はなし。実時間 平均 4.4 分・最長 6.3 分。
  判定（judge.md）は 70 回とも「基準なし」（④の基準データがないため）。
  同時本数（起動したときの本数）は、並びの頭の3回（A 種0）だけ 1・2・3、ほかは 4。

  書き方：種10個の中央値（最小〜最大）。単位は分。割合は 0〜1。試算は params の site_result。
  入れた組の数は来客の数で決まるので、種が同じなら A・B・C で同じになる。

  ロボット 0台（A だけ）                    A                        試算
    入店待ち                                12.74（4.72〜30.05）     10.39
     うち席は空いているのに待った           11.26（3.57〜22.89）     8.37
    料理の待ち                              1.28（1.17〜1.45）       0.88
    会計待ち                                1.87（1.41〜2.76）       4.20
    入れた組の数                            53.5（44〜70）           55.95
    ロボットが運んだ皿の割合                0                        0
    往復・止まり・動けなくなった・瞬間移動・打ち切り・卓を空けた   すべて 0
    冷めた皿の割合                          0.026（0.007〜0.040）    0.003

  ロボット 1台            A 切・切               B 入・切               C 入・入               試算
    入店待ち              14.67（4.18〜36.90）   14.40（5.47〜31.91）   11.42（4.50〜32.78）   2.93
     うち席は空いているのに 12.53（2.86〜24.37）   12.80（4.21〜23.47）   9.80（3.12〜23.80）    2.01
    料理の待ち            2.21（1.66〜3.71）     2.28（1.85〜3.79）     2.12（1.70〜2.90）     1.28
    会計待ち              2.63（1.44〜3.97）     2.98（1.80〜4.11）     2.39（1.97〜3.77）     4.91
    入れた組の数          53.5（44〜70）         53.5（44〜70）         53.5（44〜70）         54.30
    ロボットが運んだ皿    0.832（0.753〜0.933）  0.843（0.787〜0.917）  0.858（0.811〜0.917）  0.956
    往復の数              76（67〜100）          74（67〜96）           76（66〜103）
    30秒以上の止まり      24（12〜43）           23（19〜36）           18（14〜35）
     （1往復あたり）      0.344（0.158〜0.583）  0.293（0.253〜0.507）  0.261（0.182〜0.436）
    動けなくなった（60秒） 14（8〜34）            18（9〜27）            14（6〜27）
    瞬間移動              20（9〜30）            26（17〜30）           21（13〜37）
    打ち切り              0（0〜3）              1（0〜3）              0（0〜2）
    卓を空けた            0（0〜0）              0（0〜0）              0（0〜0）
    冷めた皿の割合        0.253（0.134〜0.385）  0.277（0.192〜0.324）  0.212（0.115〜0.342）  0.039

  ロボット 2台            A 切・切               B 入・切               C 入・入               試算
    入店待ち              24.74（13.73〜47.06）  24.79（12.91〜39.06）  21.35（8.79〜40.71）   3.46
     うち席は空いているのに 21.51（12.41〜34.21）  21.84（11.18〜25.68）  18.81（7.53〜27.60）   1.99
    料理の待ち            3.56（1.98〜6.07）     3.57（2.50〜3.88）     3.39（2.56〜6.74）     0.47
    会計待ち              3.74（2.77〜8.55）     3.86（3.26〜7.39）     3.58（1.87〜6.31）     5.25
    入れた組の数          53.5（44〜70）         53.5（44〜70）         53.5（44〜70）         55.30
    ロボットが運んだ皿    0.862（0.767〜0.951）  0.877（0.845〜0.939）  0.660（0.299〜0.840）  1.000
    往復の数              92（80〜122）          94（74〜126）          62（52〜92）
    30秒以上の止まり      105（63〜156）         78（48〜104）          90（60〜159）
     （1往復あたり）      1.092（0.724〜1.733）  0.806（0.516〜1.118）  1.427（0.696〜3.058）
    動けなくなった（60秒） 76（52〜127）          63（37〜91）           79（49〜147）
    瞬間移動              51（28〜79）           36（18〜51）           25（14〜35）
    打ち切り              15（7〜22）            10（3〜17）            16（7〜25）
    卓を空けた            2（0〜3）              0（0〜2）              0（0〜1）
    冷めた皿の割合        0.349（0.202〜0.569）  0.355（0.271〜0.450）  0.427（0.333〜0.644）  0

  入店待ちの中央値は、2台でも1台でも A と B でほとんど同じ。C は少し短いが、最小〜最大の幅は
  どれも大きく重なっている。2台の C は往復が減り、スタッフが運んだ皿が増えた（ロボットの割合 0.660）。


====================================================================
5. 2台の 30 秒以上の止まり（理由ごと・場所ごと。種10個の合計）
====================================================================

  数え方は前回と同じ（stops.csv の duration_s が 30 秒以上。場所は x 9.8 以上＝受け渡し口の前、
  x 9.8 未満で y 2.9 未満＝下の列、x 3.0 未満で y 2.9 以上＝左の列、y 8.5 以上＝上の列、残り＝その他）。
  この数え方で cs:31 の p2ruleB_off を数え直し、前回の報告と同じ 92 回になることを確かめた。

                                  A            B            C
  往復の数（10回の合計）           945          967          643
  30秒以上の止まり                1059          759          999

  理由ごと
    もう1台のロボット              527          354          583
    人が立ち止まっていた           265          199          159
    スタッフとすれ違った           156           96          200
    お客さんとすれ違った            63           66           41
    椅子・荷物・ベビーカー          40           28            6
    分からない                       8           16           10

  場所ごと
    受け渡し口の前                 364          123          623
    下の列                         324          317          212
    左の列                         107          130           55
    その他（真ん中の通路）         232          151          106
    上の列                          32           38            3

  理由×場所（多いもの）
    もう1台のロボット・受け渡し口の前     278 ／ 110 ／ 444
    スタッフとすれ違った・受け渡し口の前   40 ／ ― ／ 142（B は上位10に入らず）
    もう1台のロボット・下の列             112 ／ 102 ／  85
    人が立ち止まっていた・下の列          106 ／ 102 ／  65
    もう1台のロボット・その他              90 ／  60 ／  31
    人が立ち止まっていた・その他           94 ／  58 ／  46
    もう1台のロボット・左の列              34 ／  67 ／  22
    スタッフとすれ違った・下の列           54 ／  50 ／  33
    人が立ち止まっていた・受け渡し口の前   31 ／ ― ／  34

  B では受け渡し口の前の止まりが 364 → 123 に減った。C では受け渡し口の前が 623 に増え、
  その多くが「もう1台のロボット」（444）と「スタッフとすれ違った」（142）。原因は調べていない。
  気づいたこと（確かめていない）：④の1つめの待機場所 (12.4, 4.55) は受け渡し口の点 (11.05, 4.45) から
  約 1.35 m で、案Bの pass_clear_m 1.5 m の内側にある。待機場所へ出入りする台は、
  受け渡し口の前にいる台として数えられる位置を通る。


====================================================================
6. 案Bで待った回数と秒数・待機場所へ戻れなかった回数（B・C）
====================================================================

                 受け渡し口で待った          同じ卓で積まなかった        待機場所へ  戻れ   待機場所
                 （回・台×秒）               （皿・皿×秒・うちスタッフ）  戻った      なかった から出た
  B 1台          ―（案B 切）                 ―                           748         0      746
  B 2台          ―（案B 切）                 ―                           911         0      866
  C 1台          0 回・0 秒                  0 皿・0 秒・0                773         0      770
  C 2台          160 回・37,223 秒           73 皿・4,942 秒・42           570         0      530
                 （回ごとの中央値 16 回・3,376 秒、最大 26 回・7,306 秒）
  A の回はすべて 0（切）。数は種10個の合計。
  C 2台の 3,376 台秒は、回の長さ（約 230 分）のうちの約 56 分ぶん。


====================================================================
7. 回ごとの揺れ（④・2台・種0・A の作り・cs:33）
====================================================================

  記録 night/20261031_repeat/（runner_log.txt・runs.csv・queue.json＝repeat1 の queue・
       queue_repeat4.json＝repeat4 の queue を手で写した・judge.md＝6回をまとめて判定し直したもの）
  6回とも completed・全員帰った。

                     実際の同時本数  往復  30秒以上の止まり（1往復あたり）  入店待ち（分）  動けなくなった  打ち切り
  repeat1a           1               81    96（1.185）                       18.51           73              17
  repeat1b           1               84    88（1.048）                       19.85           63              13
  repeat1c           1               77    95（1.234）                       18.41           76              14
  repeat4a           1→3             85    93（1.094）                       19.22           73              13
  repeat4b           2→3             75   117（1.560）                       21.39           92              16
  repeat4c           3               81    97（1.198）                       14.59           74              17
  （参考）夜の A 2台 種0（同時 3）    80    94（1.175）                       20.49           69              14
  （参考）sbcheck_off（同時 1）       89    78（0.876）                       14.99           54              12

  ・同時1本の3回でも同じにならない：往復 77〜84・止まり 88〜96・入店待ち 18.41〜19.85。
    同じ実行ファイル・同じ種・ほかに何も走っていない状態でもずれる。
  ・同時3本の3回は幅が広かった：往復 75〜85・止まり 93〜117・入店待ち 14.59〜21.39。
    3回ずつなので、同時本数で幅が広がると言い切れるほどの数ではない。
  ・sbcheck_off（同時1本・同じ cs:33・同じ作り）も、同時1本の3回の幅の外（止まり 78・入店待ち 14.99）。
  ・「同時4本で3回」は、並べたのが3回なので実際の同時は 3 本（-ssParallel は 4、
    run_info の parallel_actual は起動したときの本数で 1・2・3）。


====================================================================
8. 台帳
====================================================================

  行数：368 → 445（77 行足した＝3 の 1 ＋ 5 の 70 ＋ 6 の 6。追記だけ。77 行とも completed・
        unity_cs ServiceSim/cs:33）
  先頭 368 行の md5：f15eb7e9f26c110388003506683978f0（退避と同じ）
  列は 59 列のまま。鍵ファイルは残っていない。
  全員が帰らなかった回・失敗した回・止まった回：なし


====================================================================
9. 一時ファイル
====================================================================

  queue はすべて作業フォルダの外（/tmp/sb13/）に作った。作業フォルダに queue の一時ファイルはない。
  プロジェクトの queue.json は前からあったもの（③⑦の60回）で、触っていない。
  最後の保留 0（cs:33 head）。テスト用の出力（2-5）は KIOXIA の unity_scratch_20261027_sbret/ に残してある。
  集計に使ったスクリプトは /tmp/sb13/agg.py・report_tables.py（読むだけ）。


====================================================================
10. 決めてほしいこと
====================================================================

  1. C（案B 入）の2台は、往復 62・受け渡し口で待った 3,376 台秒（中央値）・受け渡し口の前の
     「もう1台のロボット」444 で、B より悪かった。④の1つめの待機場所が受け渡し口の点から
     約 1.35 m で pass_clear_m 1.5 m の内側にあることが関わっていそうだが、調べていない。
     案Bの決まり（離れる距離など）や待機場所の位置を見直すか、調べるか。
  2. 同じ版・同じ種・同時1本でも、回ごとに数字がずれる（往復 77〜84・止まり 88〜96）。
     1回どうしの比べ（3 の sbcheck_off と p2ruleB_off など）は揺れと見分けられない。
     ずれの元（毎回同じにならない所）を調べるか、このまま種の中央値で比べることにするか。
  3. 待機場所へ戻るの作りで次のように決めた。このままでよいか。
     (a) 往復の記録（距離・時間・止まり）に、待機場所までの戻りと、待機場所から受け渡し口の前へ
         出る分も入れた
     (b) 打ち切りで受け渡し口の点に置き直された台は、次の往復までそこで待つ（待機場所へは下がらない）
     (c) 料理を積む時間は今までどおり 0（受け渡し口の点に着いたらすぐ卓へ向かう）
  4. 入れる前のテストの出力（unity_scratch_20261027_sbret/・2回ぶんと、その中だけの台帳）を
     消すか残すか（本番の台帳には入っていない）。
  5. 判定（judge_night.py）は、待機場所へ戻る・案Bの入切を条件として分けない。夜 20261031 の
     judge.md では A・B・C が同じ条件にまとめられている（④は基準なしなので判定には効いていない）。
     分けるようにするか（判定の決まりを変えることになるので今回は直していない）。
  6. 待機場所へ戻るを、これからの ④（や③⑦）の回の既定にするか（今は既定 切）。
```

### 待機場所へ戻ると、受け渡し口の前の止まりは半分以下になった

待機場所へ下げる処理はもともとありましたが、止まっている間のロボットは動かさない作りだったので、効いていませんでした。往復を終えたコマのうち、自分の待機場所にいた割合は、直す前1%、直したあと97%です。

④・ロボット2台（種10個の中央値。止まりの数は10回の合計）:

| | A 今まで | B 待機場所へ戻る | C 戻る＋案B | 試算 |
|---|---|---|---|---|
| 30秒以上の止まり（1往復あたり） | 1.092 | 0.806 | 1.427 | ― |
| 受け渡し口の前の「もう1台のロボット」 | 278 | 110 | 444 | ― |
| 往復の数 | 92 | 94 | 62 | ― |
| 入店待ち | 24.74分 | 24.79分 | 21.35分 | 3.46分 |
| ロボットが運んだ皿 | 0.862 | 0.877 | 0.660 | 1.000 |

- ねらい：往復を終えたロボットを、店の形で決めた待機場所へ下げ、受け渡し口の前を空ける
- 変わったこと：④の2台で、受け渡し口の前のロボットどうしの止まりが278回→110回、30秒以上の止まりが1往復あたり1.092→0.806。入店待ちは24.74分→24.79分で変わらない
- 見込める効果：受け渡し口の前で2台がふさぎ合う形がなくなり、ロボットの往復が安定する。入店待ちのずれは、受け渡し口ではない所（スタッフの手）に残っている

案B（C）は、受け渡し口で待った時間が1回あたり約56分になり、往復が減りました。④の1つ目の待機場所は受け渡し口の点から約1.35mで、案Bの「受け渡し口の前（1.5m以内）」の中にあります。待機場所へ出入りするたびに、互いを「受け渡し口の前にいる」と数えて待っていたと見ています。

### 同じ種・同じ版・1本ずつでも、数字はそろわなかった

④・2台・種0を、同じ実行ファイルで6回回しました。

| 回 | 同時に回した本数 | 往復 | 30秒以上の止まり | 入店待ち |
|---|---|---|---|---|
| repeat1a | 1 | 81 | 96 | 18.51分 |
| repeat1b | 1 | 84 | 88 | 19.85分 |
| repeat1c | 1 | 77 | 95 | 18.41分 |
| repeat4a | 1→3 | 85 | 93 | 19.22分 |
| repeat4b | 2→3 | 75 | 117 | 21.39分 |
| repeat4c | 3 | 81 | 97 | 14.59分 |

ほかに何も走っていない状態で1本ずつ回しても、ずれます。比べるときは種10個の中央値で比べ、ずれの元は別に調べることにしました。他の人が同じ手順で同じ結果に届くかどうかに関わる所です。

### 依頼文：③⑦を待機場所へ戻る・案B入で回す（20261027_14・夜の作業）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 180
---
# 依頼：③⑦を「待機場所へ戻る 入・案B 入」で60回回す（夜の作業・2026-10-27）

エイイチの決定（2026-10-27 22:52）：夜の間に作業を進める。ひとつ前の依頼（20261027_13_待機場所へ戻る_と④の比べ.md）で入れた2つの切り替えを、③⑦でも回しておく。基準データ v4（すれ違い入・両方 切）と比べ、v5 の候補にするかは朝にエイイチと Claude が決める。
**エイイチは寝ている。人に聞かないと進めない所に当たったら、回さずに報告に書いて終わる。**

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

1. ひとつ前の依頼 20261027_13 が「完了」で終わっている（依頼箱の 記録.log と 結果/）。報告 claude_code_reports/20261031_night_p2_standby.txt がある
2. 画面なしの実行ファイルが `-ssStandbyReturn` と `-ssRuleB` を受け付ける版で、build_info の保留なし。ServiceSim の保留が 0
3. Unity エディタが起動していない。/Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
4. ひとつ前の依頼の 7（台帳の行数と md5）が合っていた

## 台帳の退避（回す前に自分で行う）

`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/unity_ledger_v1.csv` を
`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_prenight_20261101/unity_ledger_v1.csv` にコピーする（コピーだけ。移動・上書きしない。フォルダが既にあれば止めて報告）。行数と md5 を控え、元と同じかを確かめる。

## 回す

夜の名前 20261101。③（fam_p1）・⑦（fam_p5）× ロボット 0・1・2台 × 種0〜9 ＝ 60回。すれ違い入・待機場所へ戻る 入・案B 入。同時に回す本数は 4。記録は night/20261101/。

- 0台はロボットがいないが、条件をそろえるため同じ指定で回してよい（出力フォルダ名に付く字は作りのとおりでよい）
- 判定（judge_night.py）は基準データ v4（20261029_night_cs26_*）と比べる今の既定のまま。切り替えの違いで「Unity の作り」「試算を見直す候補」に振り分けられても、そのまま報告する
- 回している間はほかの作業をしない。Ctrl+C で止めない。途中で止まっても回し直さない
- 作業フォルダに queue の一時ファイルを残さない

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261101_night_37_standby_ruleB.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ4つと、台帳の退避（行数・md5）
- runner_log のまとめ（completed・失敗・止まった回・最長の実時間）
- 台帳の行数（退避＋60 になるはず）と、先頭の行の md5 が退避と同じか
- 店 × 台数ごとの種10個の中央値（最小〜最大）を、基準データ v4（20261029_night_cs26_*）と並べる：入店待ち・料理の待ち・ロボットが運んだ皿の割合・往復の数・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・瞬間移動・打ち切り・冷めた皿の割合
- 2台の30秒以上の止まりの、受け渡し口の前（③⑦それぞれの受け渡し口の点から 2.5 m 以内）での数を、v4 と並べる
- judge.md の振り分けの数
- 全員が帰らなかった回・失敗した回があればその名前（原因の調べはしない）
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261101_night_37_standby_ruleB.txt

```text
====================================================================
③⑦を「すれ違い入・待機場所へ戻る 入・案B 入」で60回回した（夜 20261101）
依頼：20261027_14_③⑦を待機場所へ戻る_案B入で回す.md
実行ファイル：build_id cs33_20261027_2307（ServiceSim/cs:33・保留なし）
回した時刻：2026-10-28 00:48〜01:47
====================================================================

結論

  ・60回とも completed・終了コード 0・全員が帰った。失敗・止まった回・やり直しはない。
  ・0台・1台は v4 とほぼ同じ。2台は③⑦とも往復が減り（130→85／136→85）、
    ロボットが運んだ皿の割合が下がり（0.920→0.560／0.919→0.663）、打ち切りが増えた（3→10／3→10）。
    種ごとの幅がとても大きい（往復 30〜122・26〜128、30秒以上の止まり（1往復あたり）最大 2.5・4.3）。
  ・judge.md：正常 40・Unity の作り 20（③⑦の2台の20回）・試算を見直す候補 0・回の失敗 0。
  ・この夜の数字の読み取り・原因の調べはしていない。


====================================================================
1. 始める前の確かめ（4つとも合格。00:40 ごろ）
====================================================================

  1. ひとつ前の依頼 20261027_13：記録.log に「2026-10-28T00:46:04 完了」。
     結果/20261027_13_待機場所へ戻る_と④の比べ_20261027_2255.md あり。
     報告 claude_code_reports/20261031_night_p2_standby.txt あり。
  2. 実行ファイル：Builds/headless/build_info.json は build_id cs33_20261027_2307・unity_cs ServiceSim/cs:33・
     pending_changes 空。HeadlessRun.cs が -ssStandbyReturn と -ssRuleB を読み、実行ファイルの
     Assembly-CSharp.dll にも両方の字がある。ServiceSim の保留 0（cm status：cs:33 head・変更なし）。
  3. Unity エディタ：起動していない（Unity Hub だけ）。/Volumes/KIOXIA：マウントされている。
     unity_ledger_v1.lock：なし。
  4. ひとつ前の依頼の 7：台帳 368 → 445 行、先頭 368 行の md5 は退避と同じ（前の報告のとおり）。

  （参考）queue の店の形の版は 39257d16b68a で、v4（20261029）は 8a5b2f6a016a。
     ③⑦の形（p1_efficient_corner・p5_crammed と各 _map）は、generation の字のほかは同じだった
     （地図の中身もほどいて比べて同じ）。


====================================================================
2. 台帳の退避
====================================================================

  コピー先：archive/unity_ledger_v1_prenight_20261101/unity_ledger_v1.csv（フォルダは無かったので作った）
  元・退避とも 445 行、md5 b05626b2f5e140386f5074a9e558e204（同じ）


====================================================================
3. 回した内容
====================================================================

  make_queue.py --seeds 0-9 --rule-b on --standby-return on（出力は /tmp。作業フォルダには置いていない）
    条件 6（fam_p1・fam_p5 × ロボット 0・1・2 台、スタッフ4・来客 42/時）× 種 0〜9 ＝ 60 回、
    すれ違い入 60・案B 入 60・待機場所へ戻る 入 60。試算の版 v2.8。
  night_runner.py --night 20261101 --parallel 4 --no-retry（判定の基準は既定の 20261029_night_cs26_*）
  出力フォルダ：20261101_night_cs33_fam_{p1|p5}_r{0|1|2}_s{0〜9}_passon_ruleb_sbret（0台にも同じ字が付く）
  記録：night/20261101/（runner_log.txt・runs.csv・queue.json・judge.md・judge.csv・logs/）
  プロジェクトの queue.json は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま）。
  始める前に打つコマンドを見るための「から回し」を1度した。そのとき night/20261101/ にできた
  runner_log.txt は /tmp に移し、空のフォルダを消してから本番を回した。


====================================================================
4. runner_log のまとめ
====================================================================

  completed 60 回／失敗 0／止まった回 0／終了コード 0 が 60 回
  実時間 平均 3.9 分・最長 5.0 分（20261101_night_cs33_fam_p5_r2_s6_passon_ruleb_sbret）
  同時本数は頭の3回だけ 1・2・3、ほかは 4。


====================================================================
5. 台帳
====================================================================

  445 → 505 行（退避＋60）。先頭 445 行の md5 b05626b2f5e140386f5074a9e558e204（退避と同じ）。
  新しい 60 行：status すべて completed・everyone_left すべて 1・unity_cs すべて ServiceSim/cs:33。
  鍵ファイルは残っていない。


====================================================================
6. 店 × 台数ごとの種10個（中央値（最小〜最大））
====================================================================

  書き方：単位は分。割合は 0〜1。台帳の列から：入店待ち＝entry_wait_mean／料理の待ち＝dish_wait_mean／
  ロボットが運んだ皿＝robot_share／往復＝trips／動けなくなった＝stuck_count／瞬間移動＝warped／
  打ち切り＝timeouts／冷めた皿＝cold_share。30秒以上の止まり＝stops.csv の duration_s が 30 秒以上の行の数、
  1往復あたりは それ÷trips（往復 0 の回は 0）。
  v4＝20261029_night_cs26_*（すれ違い入・待機場所 切・案B 切）。今回＝20261101（すれ違い入・待機場所 入・案B 入）。

  ③ fam_p1・0台             v4                       今回
    入店待ち                4.21（1.50〜15.25）      4.22（1.56〜15.12）
    料理の待ち              0.94（0.80〜1.08）       0.97（0.80〜1.06）
    ロボットが運んだ皿      0                        0
    往復・30秒以上の止まり・動けなくなった・打ち切り  すべて 0（両方）
    瞬間移動                12（9〜19）              10.5（6〜15）
    冷めた皿の割合          0.000（0.000〜0.008）    0.000（0.000〜0.010）

  ③ fam_p1・1台             v4                       今回
    入店待ち                3.01（1.44〜11.46）      4.10（1.37〜14.56）
    料理の待ち              2.40（2.01〜2.64）       2.44（1.97〜2.80）
    ロボットが運んだ皿      0.710（0.648〜0.762）    0.676（0.610〜0.806）
    往復の数                69.5（60〜90）           67.5（60〜80）
    30秒以上の止まり        7.5（2〜16）             9（1〜17）
     （1往復あたり）        0.107（0.029〜0.262）    0.141（0.015〜0.221）
    動けなくなった（60秒）  4（0〜12）               5.5（0〜15）
    瞬間移動                50（24〜61）             45（39〜61）
    打ち切り                0（0〜1）                0（0〜2）
    冷めた皿の割合          0.300（0.164〜0.358）    0.265（0.138〜0.360）

  ③ fam_p1・2台             v4                       今回
    入店待ち                4.17（1.45〜12.78）      4.13（1.50〜16.42）
    料理の待ち              1.62（1.12〜3.40）       2.54（1.73〜5.23）
    ロボットが運んだ皿      0.920（0.709〜0.975）    0.560（0.079〜0.888）
    往復の数                130（95〜164）           85（30〜122）
    30秒以上の止まり        38（11〜55）             49.5（9〜111）
     （1往復あたり）        0.255（0.116〜0.335）    0.470（0.164〜2.523）
    動けなくなった（60秒）  25（6〜43）              40.5（7〜105）
    瞬間移動                66（43〜86）             45.5（19〜66）
    打ち切り                3（1〜15）               10（1〜19）
    冷めた皿の割合          0.132（0.050〜0.209）    0.235（0.086〜0.518）

  ⑦ fam_p5・0台             v4                       今回
    入店待ち                4.48（1.58〜15.36）      4.41（1.56〜15.24）
    料理の待ち              0.98（0.84〜1.01）       0.99（0.85〜1.10）
    ロボットが運んだ皿      0                        0
    往復・30秒以上の止まり・動けなくなった・打ち切り  すべて 0（両方）
    瞬間移動                14（11〜18）             16（12〜20）
    冷めた皿の割合          0.000（0.000〜0.012）    0.002（0.000〜0.029）

  ⑦ fam_p5・1台             v4                       今回
    入店待ち                3.84（1.53〜13.54）      3.00（1.36〜14.01）
    料理の待ち              2.44（1.76〜3.15）       2.46（2.04〜2.70）
    ロボットが運んだ皿      0.666（0.544〜0.825）    0.686（0.628〜0.744）
    往復の数                69（55〜87）             66（57〜82）
    30秒以上の止まり        10（2〜26）              7（2〜15）
     （1往復あたり）        0.124（0.029〜0.473）    0.106（0.027〜0.197）
    動けなくなった（60秒）  6（1〜22）               3.5（1〜12）
    瞬間移動                48（29〜66）             46.5（32〜62）
    打ち切り                0（0〜2）                0（0〜2）
    冷めた皿の割合          0.304（0.106〜0.461）    0.301（0.169〜0.342）

  ⑦ fam_p5・2台             v4                       今回
    入店待ち                4.81（1.43〜10.86）      4.02（1.48〜16.05）
    料理の待ち              1.52（1.02〜2.57）       2.86（1.56〜5.35）
    ロボットが運んだ皿      0.919（0.768〜0.979）    0.663（0.074〜0.800）
    往復の数                136（116〜174）          85（26〜128）
    30秒以上の止まり        27（10〜39）             31.5（1〜113）
     （1往復あたり）        0.200（0.074〜0.311）    0.323（0.027〜4.346）
    動けなくなった（60秒）  17（2〜28）              24.5（0〜107）
    瞬間移動                61（35〜82）             39.5（13〜71）
    打ち切り                3（1〜10）               10（2〜19）
    冷めた皿の割合          0.101（0.031〜0.191）    0.274（0.087〜0.616）

  0台の瞬間移動は台帳の warped の値そのまま（ロボット以外も数えている列と思われるが、確かめていない）。


====================================================================
7. 2台の 30 秒以上の止まり・受け渡し口の前
====================================================================

  受け渡し口の点：③⑦とも (15.3, 5.95)（店の形の FoodPass の point）。stops.csv の (x, z) がこの点から
  2.5 m 以内の行を数えた。

                      v4                                今回
    ③ 種10個の合計    156（30秒以上の止まり 344 のうち）   431（同 508 のうち）
       中央値          18.5（1〜27）                       37.5（7〜109）
       種0〜9          19,1,27,15,20,19,21,15,1,18          59,18,109,41,86,9,44,34,7,24
    ⑦ 種10個の合計    133（同 248 のうち）                 323（同 423 のうち）
       中央値          13（3〜27）                         16（1〜110）
       種0〜9          5,14,3,14,7,27,12,23,7,21            13,28,97,18,1,110,8,13,21,14

  注意：③⑦の待機場所 1・2 は (16.9, 6.05)・(17.7, 6.05) で、受け渡し口の点から 1.6 m・2.4 m。
  どちらも 2.5 m の内側なので、待機場所で記録された止まりもこの数に入る。


====================================================================
8. judge.md の振り分け（night/20261101/judge.md）
====================================================================

  正常 40（③⑦の 0台・1台）／Unity の作り 20（③⑦の 2台）／試算を見直す候補 0／回の失敗 0／基準なし 0
  Unity の作りの理由（種の中央値が基準の同じ条件の最大を超えた）
    fam_p1 2台：30秒以上の止まり（1往復あたり）0.47（基準 0.116〜0.335）
    fam_p1 2台：30秒以上の止まりのうちもう1台のロボットが原因 29.5（基準 1〜28）
    fam_p5 2台：30秒以上の止まり（1往復あたり）0.323（基準 0.074〜0.311）
  「試算を見直す候補」の欄に次の1つが書かれているが、その20回は「Unity の作り」に数えられている
    fam_p5 2台：料理の待ち（Unity÷試算）2.91倍（基準 1.04〜2.61倍）
  判定は待機場所へ戻る・案B の入切を条件として分けないので、今回の20回も「すれ違い入」として
  基準 v4 と比べられている（前の依頼の決めてほしいこと 5 と同じ件）。


====================================================================
9. 全員が帰らなかった回・失敗した回
====================================================================

  なし


====================================================================
10. 決めてほしいこと
====================================================================

  なし（この依頼の範囲では）。
  v5 の候補にするかは依頼文のとおり朝に決める。読むときの材料として：2台は③⑦とも往復が減り、
  打ち切りと受け渡し口の前の止まりが増えた。往復とロボットが運んだ皿の割合が減ったのは④の C（案B 入）と
  同じ向き（④の打ち切りは 15→16 でほぼ同じだった）。種ごとの幅がとても大きい。
```

③⑦でも、案Bを入れると2台の往復が減り（③は130回→85回）、ロボットが運ぶ皿も減りました（92%→56%）。判定では③⑦の2台の20回が「Unity の作り」に振り分けられました。案Bは切に戻し、作りは残して、待機場所との距離の決め方を考え直すまで使わないことにしました。


## 作業ログ ― 待機場所へ戻るを標準にし、③⑦を回し直した

### サイトの params：待機場所へ戻るを入、案Bを切にした

> それでいいですので進めてください。

params の unity_rules に standby_return（入）を足し、案Bの2つを切にしました（schema 0.4、p2m-site commit eb03d73）。試算の数字は変えていません。あわせて、判定のスクリプトが、すれ違い・待機場所へ戻る・案Bの入切を条件の一部として扱い、同じ入切の回とだけ比べるようにしました。今までは入切の違う回を混ぜて比べていました。

### 依頼文：待機場所へ戻るを標準に、③⑦を v5 候補で回す（20261028_15）

```markdown
---
作業フォルダ: /Users/shimazueiichi/Robotics_UX/ServiceSim
上限時間: 240
---
# 依頼：待機場所へ戻るを標準にし、判定を切り替えごとに分け、③⑦を60回回す（基準データ v5 の候補・2026-10-28）

エイイチの決定（2026-10-28 06:33）：前の2つの報告（20261031_night_p2_standby.txt・20261101_night_37_standby_ruleB.txt）を受けて
1. 待機場所へ戻るを標準（既定 入）にする
2. 案B（受け渡し口は1台ずつ・同じ卓は1台）は切のまま。作りは消さない
3. 判定（judge_night.py）を、切り替え（すれ違い・待機場所へ戻る・案B）の入切ごとに分けて比べる形にする
4. ③⑦を「すれ違い入・待機場所へ戻る 入・案B 切」で60回回し、基準データ v5 の候補にする（v5 にするかはエイイチが決める）

サイト（正）を直した（p2m-site commit eb03d73）：params の schema 0.4。`unity_rules` に `standby_return`（true）を足し、`pass_one_robot`・`same_table_one_robot` を false にした。試算の数字・条件・店の形の版（39257d16b68a）は変わっていない。

台帳の退避は Claude が済ませた：`/Volumes/KIOXIA/r2r2r-data/service_sim/unity/archive/unity_ledger_v1_prenight_20261102/unity_ledger_v1.csv`（505行・md5 c7031e3824b9aa6b137668d44e87db64）

## 始める前に確かめること（違えば回さずに報告して終わる）

1. Unity エディタが起動していない
2. /Volumes/KIOXIA がマウントされている。鍵ファイル unity_ledger_v1.lock がない
3. 台帳の md5 が上の退避と同じ
4. ServiceSim の保留が 0（cs:33 head）
5. https://pixelstomotors.com/sim/serving-robot-params.json の meta.schema_version が serving-robot-params/0.4（まだ 0.3 なら数分おきに取り直す。30分たっても 0.3 なら報告して終わる）

## やること

1. 公開版の params をプロジェクトに写す。`unity_rules` 以外が今の写しと同じか確かめる
2. 待機場所へ戻る・案Bの既定を、params の `unity_rules` の値から決める形にする（standby_return 入・案B 切）。`-ssStandbyReturn`・`-ssRuleB`・make_queue / night_runner の `--standby-return`・`--rule-b` で、回ごとに入切を上書きできるのは今のまま。エディタのメニュー（Site Run など）も同じ既定にする
   - 出力フォルダ名の字：今は入のとき `_sbret` が付く。既定が入になっても、入のときは今までどおり `_sbret` を付ける（名前から作りが分かるように）
3. judge_night.py：回ごとの run_info.json（または queue）にある切り替え（すれ違い・待機場所へ戻る・案B）の入切を条件の一部として扱い、基準データの中で**同じ条件・同じ入切の回とだけ**比べる。同じ入切の回が基準に無ければ「基準なし」。判定の決まり（何を超えたら何に振り分けるか）は変えない。基準データの既定（v4・20261029_night_cs26_*）も変えない
   - 確かめ：夜 20261101（待機場所 入・案B 入）を判定し直すと、v4 と入切が違うので60回とも「基準なし」になること。夜 20261029（v4）を自分自身に当てると今までどおり「正常」60になること（/tmp に出す。night/ の記録は上書きしない）
4. 何も指定しないときの make_queue が、③⑦の60回・すれ違い入・待機場所へ戻る 入・案B 切になることを確かめる
5. check-in して、画面なしの実行ファイルを作り直す（保留 0）
6. 夜の名前 20261102 で、何も指定しない make_queue の60回を回す（同時4本・記録は night/20261102/）。回している間はほかの作業をしない
7. 台帳の行数（505 → 565 のはず）と先頭505行の md5 が退避と同じかを確かめる
8. 作業フォルダに queue の一時ファイルを残さない

## 変えないもの

- 店の形・人の動き・速さ・物理の設定・すれ違いの作り・待機場所へ戻る作りの中身（cs:33）・案Bの作り
- 台帳の列（59列）と今までの行。今までの night/ の記録

## 報告

依頼箱の結果に加えて、claude_code_reports に 20261102_night_37_v5candidate.txt として書く（場所：~/Library/Mobile Documents/com~apple~CloudDocs/デスクトップ/ADAPT DESIGN/じぶんの/PixelstoMotors/デジタルツイン学習R2R2R/サービスロボット導入シミュレーション/unity/claude_code_reports/）。

- 始める前の確かめ5つの結果
- 入れた cs 番号・build_id と保留の有無・変えたファイル
- 判定の直しと、3 の確かめ2つの結果
- runner_log のまとめ・台帳の行数と md5
- 店 × 台数ごとの種10個の中央値（最小〜最大）を、v4（20261029・待機場所 切）と、夜 20261101（待機場所 入・案B 入）と並べる：入店待ち・料理の待ち・ロボットが運んだ皿の割合・往復の数・30秒以上の止まり（1往復あたり）・動けなくなった（60秒）・瞬間移動・打ち切り・冷めた皿の割合。試算の値も並べる
- 2台の30秒以上の止まりの、受け渡し口の点から 2.5 m 以内の数（待機場所での止まりを除いた数も）を、v4・20261101 と並べる
- ロボットを1台増やしたときの向き（入店待ち・料理の待ち）が、種の過半数で試算と同じか逆か
- 全員が帰らなかった回・失敗した回があればその名前
- 決めてほしいこと（なければ「なし」）
```

### 報告：20261102_night_37_v5candidate.txt

```text
====================================================================
待機場所へ戻るを標準にし、判定を入切ごとに分け、③⑦を60回回した（夜 20261102・基準データ v5 の候補）
依頼：20261028_15_待機場所へ戻るを標準に_③⑦をv5候補で回す.md
実行ファイル：build_id cs34_20261028_0642（ServiceSim/cs:34・保留なし）
回した時刻：2026-10-28 06:42〜07:43
====================================================================

結論

  ・案B と待機場所へ戻るの既定を params の unity_rules で決めるようにした（schema 0.4 では 待機場所へ戻る 入・案B 切）。
    回ごとに上書きする仕組み（-ssStandbyReturn・-ssRuleB・--standby-return・--rule-b）は今のまま使える。
  ・judge_night.py は、すれ違い・待機場所へ戻る・案B の入切を条件の一部として扱うようにした。
    確かめは2つとも思ったとおりだった（20261101 は60回とも「基準なし」、20261029 を自分自身に当てると「正常」60回）。
  ・60回とも completed・終了コード 0・全員が帰った。失敗した回・止まった回はない。
  ・2台の回は、v4 とほぼ同じか少し良い。20261101（案B 入）で増えた打ち切りや止まりは出なかった。
    受け渡し口の近くでの30秒以上の止まりは、v4 よりはっきり少ない。
  ・judge.md の結果は「基準なし」60回。基準 v4 は待機場所へ戻るが切なので、比べる相手がいない。
    これは決めた形のとおり。


====================================================================
1. 始める前の確かめ（5つとも合格。06:3x ごろ）
====================================================================

  1. Unity エディタ：起動していない
  2. /Volumes/KIOXIA：マウントされている。unity_ledger_v1.lock：なし
  3. 台帳：505 行、md5 c7031e3824b9aa6b137668d44e87db64（退避
     archive/unity_ledger_v1_prenight_20261102/unity_ledger_v1.csv と同じ）
  4. ServiceSim の保留：0（cm status：cs:33 head・変更なし）
  5. 公開版 params の meta.schema_version：serving-robot-params/0.4（1回目で 0.4 だった）
     unity_rules：standby_return true・pass_one_robot false・pass_clear_m 1.5・same_table_one_robot false


====================================================================
2. 入れた cs・実行ファイル・変えたファイル
====================================================================

  check-in：cs:34（保留 0）
  実行ファイル：Builds/headless/build_info.json は build_id cs34_20261028_0642・unity_cs ServiceSim/cs:34・
    pending_changes 空。実行ファイルの中の params は 0.4（0.3 の字は入っていない）。
  check-in の前に、画面なしで Unity を開いてコンパイルを確かめた（エラーなし）。

  params の写し：公開版をそのまま Assets/ServiceSim/Experiment/serving-robot-params.json に写した。
    前の写しと違うのは meta.schema_version（0.3 → 0.4）と unity_rules だけで、ほかは同じだった
    （試算の版 v2.8・店の形の版 39257d16b68a は変わらない）。

  変えたファイル（9つ）
    Assets/ServiceSim/Experiment/serving-robot-params.json … 公開版 0.4 の写し
    Assets/ServiceSim/Experiment/SimParams.cs … 既定を読む関数を2つ足した（StandbyReturnDefault・RuleBDefault）
    Assets/ServiceSim/Experiment/ExperimentRunner.cs … Job.ruleB・Job.standbyReturn を「指定なし（null）＝ params の既定」
        にした。サイトの条件でない回は、指定がなければ今までどおり切
    Assets/ServiceSim/Experiment/HeadlessRun.cs … -ssRuleB・-ssStandbyReturn が無いときは params の既定で決める
        （フォルダ名の _ruleb・_sbret もその値で付ける）
    Assets/ServiceSim/Editor/ServiceSimSiteRun.cs … Site Run のメニューも params の既定で回す。入の回はフォルダ名に _sbret
    Assets/ServiceSim/Editor/ServiceSimStageB.cs … Stage B のまとめて回すメニューも params の既定で回す。
        入の回はフォルダ名の末尾に _ruleb・_sbret を付ける
    tools/make_queue.py … --rule-b・--standby-return を付けないときは params の unity_rules で決める。
        queue に rules_from（arg / params）と params_schema を書く
    tools/night_runner.py … queue に入切が無い回は params の既定で決める（前は切）
    tools/judge_night.py … 下の 3 章

  案B の入切の決め方（作りの説明）
    ・指定なし：pass_one_robot・same_table_one_robot の値をそのまま使う。どちらかが true なら案B 入（今は両方 false なので切）
    ・入と指定した回：受け渡し口は1台ずつ・同じ卓は1台 の両方を入れる。離れる距離 pass_clear_m は params の 1.5 m を使う。
      params が 0.3 のころは両方 true だったので、20261101 と同じ動きになる。
      0.4 で両方 false になったので、params の値をそのまま読むと「入と指定しても何も効かない」ことになる。
      それを避けるためにこの形にした（決めてほしいこと 1）
    ・切と指定した回：両方切


====================================================================
3. 判定の直しと確かめ
====================================================================

  直したこと
    ・条件の名前に standby_return・rule_b を足した（店・スタッフ・来客・mode・trays・すれ違い・待機場所へ戻る・案B・台数）
    ・入切は、回ごとの run_info.json にある pass_by.enabled・standby_return.enabled・rule_b.enabled から取る
      （項目が無い回は切とする。その作りがまだ無かった版の回）
    ・基準データの中で、条件も入切も同じ回とだけ比べる。同じ入切の回が無ければ「基準なし」
    ・judge.md の頭に、今回の回の入切と基準の回の入切を1行で出す。条件の名前にも3つの入切を出す
    ・変えていないもの：振り分けの決まり（線・何を超えたら何に振り分けるか）、基準の既定 20261029_night_cs26_*

  確かめ（どちらも /tmp に出した。night/ の記録は書き換えていない）
    ・夜 20261101（待機場所 入・案B 入）を判定し直した → /tmp/judge_check_20261101
      基準なし 60（正常 0・試算を見直す候補 0・Unity の作り 0・回の失敗 0）　… 思ったとおり
    ・夜 20261029（v4）を自分自身に当てた → /tmp/judge_check_20261029_self
      正常 60（ほかは 0）　… 思ったとおり

  make_queue を何も指定せずに作った queue（4 の確かめ）
    60回＝6条件（fam_p1・fam_p5 × 0・1・2台）× 種 0〜9、60回とも すれ違い入・案B 切・待機場所へ戻る 入。
    rules_from は rule_b・standby_return とも params、params_schema は serving-robot-params/0.4。


====================================================================
4. 回した内容と runner_log のまとめ
====================================================================

  make_queue.py --out /tmp/queue_20261102.json（何も指定しない）
  night_runner.py --queue /tmp/queue_20261102.json --night 20261102 --parallel 4 --no-retry
    （--no-retry は前の夜 20261101 にそろえた）
  出力フォルダ：20261102_night_cs34_fam_{p1|p5}_r{0|1|2}_s{0〜9}_passon_sbret
  記録：night/20261102/（runner_log.txt・runs.csv・queue.json・judge.md・judge.csv・logs/）

  completed 60 回／失敗 0／止まった回 0／終了コード 0 が 60 回
  実時間は平均 3.9 分、いちばん長い回は 4.9 分（20261102_night_cs34_fam_p5_r2_s4_passon_sbret）
  起動したときの同時本数は、4本が56回、3本が2回、2本と1本が1回ずつ
  judge.md の結果：基準なし 60（v4 は待機場所へ戻るが切なので、同じ入切の基準がない）

  プロジェクトの queue.json は触っていない（md5 07f2acccf5b13abbf1a96148fbc70e9f のまま。
  2026-10-27 からある古いファイル）。作業フォルダには新しい queue を置いていない。


====================================================================
5. 台帳
====================================================================

  505 → 565 行（退避の行数＋60）。先頭 505 行の md5 c7031e3824b9aa6b137668d44e87db64（退避と同じ）
  新しい 60 行：status はすべて completed、everyone_left はすべて 1、unity_cs はすべて ServiceSim/cs:34。
  鍵ファイルは残っていない。


====================================================================
6. 店 × 台数ごとの種10個（中央値（最小〜最大））
====================================================================

  書き方：単位は分。割合は 0〜1。列の取り方は前の報告（20261101_night_37_standby_ruleB.txt）と同じ。
  30秒以上の止まり＝stops.csv の duration_s が 30 秒以上の行の数。1往復あたり＝それ÷trips。
  並び：v4（20261029・待機場所 切・案B 切）／ 20261101（待機場所 入・案B 入）／ 今回 20261102（待機場所 入・案B 切）／ 試算
  試算の値は台帳の site_entry_wait_mean・site_dish_wait_mean・site_robot_share（どの種でも同じ値）

  ③ fam_p1・0台
    入店待ち            4.21（1.50〜15.25）／ 4.22（1.56〜15.12）／ 4.09（1.51〜14.80）／ 3.30
    料理の待ち          0.94（0.80〜1.08） ／ 0.97（0.80〜1.06） ／ 0.98（0.77〜1.05） ／ 0.46
    ロボットが運んだ皿  0 ／ 0 ／ 0 ／ 0
    往復・30秒以上の止まり・動けなくなった・打ち切り  3つの夜とも、すべて 0
    瞬間移動            12（9〜19）／ 10.5（6〜15）／ 10.5（7〜15）
    冷めた皿の割合      0.000（0.000〜0.008）／ 0.000（0.000〜0.010）／ 0.000（0.000〜0.015）

  ③ fam_p1・1台
    入店待ち            3.01（1.44〜11.46）／ 4.10（1.37〜14.56）／ 5.00（1.42〜13.24）／ 2.60
    料理の待ち          2.40（2.01〜2.64） ／ 2.44（1.97〜2.80） ／ 2.48（2.11〜3.24） ／ 1.95
    ロボットが運んだ皿  0.710（0.648〜0.762）／ 0.676（0.610〜0.806）／ 0.706（0.589〜0.738）／ 0.720
    往復の数            69.5（60〜90）／ 67.5（60〜80）／ 65.5（59〜84）
    30秒以上の止まり    7.5（2〜16）／ 9（1〜17）／ 6（2〜22）
     （1往復あたり）    0.107（0.029〜0.262）／ 0.141（0.015〜0.221）／ 0.083（0.027〜0.361）
    動けなくなった      4（0〜12）／ 5.5（0〜15）／ 3.5（1〜14）
    瞬間移動            50（24〜61）／ 45（39〜61）／ 49（43〜61）
    打ち切り            0（0〜1）／ 0（0〜2）／ 0（0〜1）
    冷めた皿の割合      0.300（0.164〜0.358）／ 0.265（0.138〜0.360）／ 0.286（0.150〜0.417）

  ③ fam_p1・2台
    入店待ち            4.17（1.45〜12.78）／ 4.13（1.50〜16.42）／ 3.99（1.40〜13.93）／ 1.18
    料理の待ち          1.62（1.12〜3.40） ／ 2.54（1.73〜5.23） ／ 1.95（1.09〜3.24） ／ 0.95
    ロボットが運んだ皿  0.920（0.709〜0.975）／ 0.560（0.079〜0.888）／ 0.832（0.694〜0.988）／ 0.991
    往復の数            130（95〜164）／ 85（30〜122）／ 119.5（98〜151）
    30秒以上の止まり    38（11〜55）／ 49.5（9〜111）／ 24.5（10〜44）
     （1往復あたり）    0.255（0.116〜0.335）／ 0.470（0.164〜2.523）／ 0.173（0.086〜0.411）
    動けなくなった      25（6〜43）／ 40.5（7〜105）／ 18（5〜31）
    瞬間移動            66（43〜86）／ 45.5（19〜66）／ 60（24〜76）
    打ち切り            3（1〜15）／ 10（1〜19）／ 4.5（0〜10）
    冷めた皿の割合      0.132（0.050〜0.209）／ 0.235（0.086〜0.518）／ 0.163（0.031〜0.228）

  ⑦ fam_p5・0台
    入店待ち            4.48（1.58〜15.36）／ 4.41（1.56〜15.24）／ 4.49（1.55〜15.25）／ 2.76
    料理の待ち          0.98（0.84〜1.01） ／ 0.99（0.85〜1.10） ／ 0.96（0.81〜1.08） ／ 0.45
    ロボットが運んだ皿  0 ／ 0 ／ 0 ／ 0
    往復・30秒以上の止まり・動けなくなった・打ち切り  3つの夜とも、すべて 0
    瞬間移動            14（11〜18）／ 16（12〜20）／ 13（10〜21）
    冷めた皿の割合      0.000（0.000〜0.012）／ 0.002（0.000〜0.029）／ 0.000（0.000〜0.012）

  ⑦ fam_p5・1台
    入店待ち            3.84（1.53〜13.54）／ 3.00（1.36〜14.01）／ 3.22（1.56〜14.63）／ 1.81
    料理の待ち          2.44（1.76〜3.15） ／ 2.46（2.04〜2.70） ／ 2.51（2.19〜2.86） ／ 1.97
    ロボットが運んだ皿  0.666（0.544〜0.825）／ 0.686（0.628〜0.744）／ 0.669（0.625〜0.746）／ 0.721
    往復の数            69（55〜87）／ 66（57〜82）／ 67.5（58〜78）
    30秒以上の止まり    10（2〜26）／ 7（2〜15）／ 8（4〜17）
     （1往復あたり）    0.124（0.029〜0.473）／ 0.106（0.027〜0.197）／ 0.127（0.055〜0.293）
    動けなくなった      6（1〜22）／ 3.5（1〜12）／ 5.5（1〜9）
    瞬間移動            48（29〜66）／ 46.5（32〜62）／ 48.5（31〜58）
    打ち切り            0（0〜2）／ 0（0〜2）／ 0（0〜1）
    冷めた皿の割合      0.304（0.106〜0.461）／ 0.301（0.169〜0.342）／ 0.328（0.244〜0.418）

  ⑦ fam_p5・2台
    入店待ち            4.81（1.43〜10.86）／ 4.02（1.48〜16.05）／ 3.56（1.49〜14.76）／ 1.97
    料理の待ち          1.52（1.02〜2.57） ／ 2.86（1.56〜5.35） ／ 1.61（1.18〜2.41） ／ 0.98
    ロボットが運んだ皿  0.919（0.768〜0.979）／ 0.663（0.074〜0.800）／ 0.916（0.799〜0.969）／ 0.991
    往復の数            136（116〜174）／ 85（26〜128）／ 124（111〜164）
    30秒以上の止まり    27（10〜39）／ 31.5（1〜113）／ 26.5（11〜39）
     （1往復あたり）    0.200（0.074〜0.311）／ 0.323（0.027〜4.346）／ 0.197（0.097〜0.351）
    動けなくなった      17（2〜28）／ 24.5（0〜107）／ 16.5（3〜28）
    瞬間移動            61（35〜82）／ 39.5（13〜71）／ 62.5（33〜85）
    打ち切り            3（1〜10）／ 10（2〜19）／ 3.5（0〜6）
    冷めた皿の割合      0.101（0.031〜0.191）／ 0.274（0.087〜0.616）／ 0.117（0.044〜0.234）

  0台の瞬間移動は、台帳の warped の値をそのまま出した（前の報告と同じく、どこまで数えている列かは確かめていない）。


====================================================================
7. 2台の30秒以上の止まりのうち、受け渡し口の点から 2.5 m 以内のもの
====================================================================

  受け渡し口の点は (15.3, 5.95)。「待機場所での止まり」は、店の形の RobotStandby の四角の中で記録された止まりとした
  （③⑦とも 3つ：x 16.5〜17.3・17.3〜18.1・18.1〜18.9、z 5.65〜6.45）。待機場所を除いた数は、それを引いた数。
  v4 は待機場所へ戻るが切なので、待機場所の四角の中での止まりは 0 だった（除いても数は同じ）。

                       v4                  20261101            今回 20261102
  ③ 2.5 m 以内 計      156（344 のうち）   431（508 のうち）   86（230 のうち）
     中央値            18.5（1〜27）        37.5（7〜109）       6.5（1〜19）
     種0〜9            19,1,27,15,20,19,21,15,1,18
                                           59,18,109,41,86,9,44,34,7,24
                                                               2,5,15,17,1,19,2,8,16,1
    待機場所を除く 計  156                 244                 46
     中央値            18.5（1〜27）        2（0〜102）          3（0〜15）
     種0〜9            （上と同じ）         59,5,102,0,73,2,0,0,1,2
                                                               1,3,4,15,1,9,0,3,10,0

  ⑦ 2.5 m 以内 計      133（248 のうち）   323（423 のうち）   76（247 のうち）
     中央値            13（3〜27）          16（1〜110）         4（1〜24）
     種0〜9            5,14,3,14,7,27,12,23,7,21
                                           13,28,97,18,1,110,8,13,21,14
                                                               5,3,1,24,17,13,4,4,1,4
    待機場所を除く 計  133                 203                 45
     中央値            13（3〜27）          0.5（0〜103）        1.5（0〜23）
     種0〜9            （上と同じ）         1,0,97,0,1,103,1,0,0,0
                                                               0,2,0,23,8,8,2,0,1,1


====================================================================
8. ロボットを1台増やしたときの向き（種10個。今回 20261102）
====================================================================

  向きの決め方は judge_night.py と同じ（5% と 0.2 分より小さい変化は「変わらない」）。
  書き方：試算と同じ向きだった種の数／逆の向きだった種の数／変わらなかった種の数

  ③ 0→1台  入店待ち（試算は短くなる）  同じ 4／逆 2／変わらない 4 … 過半数（6）に届かないが、同じ向きが多い
            料理の待ち（試算は長くなる）同じ 10／逆 0          … 過半数が試算と同じ
  ③ 1→2台  入店待ち（試算は短くなる）  同じ 5／逆 1／変わらない 4 … 過半数（6）に届かないが、同じ向きが多い
            料理の待ち（試算は短くなる）同じ 7／逆 0／変わらない 3 … 過半数が試算と同じ
  ⑦ 0→1台  入店待ち（試算は短くなる）  同じ 6／逆 2／変わらない 2 … 過半数が試算と同じ
            料理の待ち（試算は長くなる）同じ 10／逆 0          … 過半数が試算と同じ
  ⑦ 1→2台  入店待ち：試算は 1.81→1.97 分（差 0.16 分が線の 0.2 分より小さい）ので「変わらない」扱い。
            judge と同じく向きは比べない。Unity は 短くなる 5・長くなる 4・変わらない 1
            料理の待ち（試算は短くなる）同じ 8／逆 0／変わらない 2 … 過半数が試算と同じ
  → 種の過半数で試算と逆になったところはない（judge.md の「向きが逆」も なし）。

  参考：同じ数え方で、前の2つの夜
    v4      ③1→2台 入店待ち 同じ 1／逆 6／変わらない 3（過半数が逆）。
            ③1→2台 料理の待ち 同じ 8／逆 2。ほかは今回と同じ形
    20261101 ③1→2台 料理の待ち 同じ 5／逆 5、⑦1→2台 料理の待ち 同じ 3／逆 5（逆が多い）


====================================================================
9. 全員が帰らなかった回・失敗した回
====================================================================

  なし


====================================================================
10. 決めてほしいこと
====================================================================

  1. 案B を「入」と指定したときの中身。いまは、params の pass_one_robot・same_table_one_robot が false でも、
     指定で入れた回は両方を入れる形にした。0.3 のころの 20261101 と同じ動きになる。
     params の値をそのまま使う形だと、0.4 では入と指定しても何も効かないため、この形にした。この形でよいか。
  2. 夜 20261102 を基準データ v5 にするか（依頼文のとおりエイイチが決める）。
     v5 にする場合は、judge_night.py の BASELINE_DEFAULT（今は 20261029_night_cs26_*）を変えるかも決めてほしい。
     今のままだと、これからの夜（待機場所 入）は毎回「基準なし」になる。
  3. プロジェクトの作業フォルダに、2026-10-27 からある古い queue.json（md5 07f2acccf5b13abbf1a96148fbc70e9f。
     待機場所・案B の項目が無い）が残っている。今回は触っていない。消すかどうか。
```

### ③⑦の2台は、v4 より止まりが減り、向きが試算とそろった

③・2台（種10個の中央値）:

| | v4（今まで） | 案B入 | 今回（待機場所へ戻る） | 試算 |
|---|---|---|---|---|
| 入店待ち | 4.17分 | 4.13分 | 3.99分 | 1.18分 |
| 30秒以上の止まり（1往復あたり） | 0.255 | 0.470 | 0.173 | ― |
| 受け渡し口のまわりの止まり（10回の合計） | 156 | 431 | 86 | ― |
| ロボットが運んだ皿 | 0.920 | 0.560 | 0.832 | 0.991 |

⑦の2台も同じ傾向で、受け渡し口のまわりの止まりは133回→76回でした。0台と1台は v4 とほぼ同じです。v4 では、③でロボットを1台から2台にしたとき、入店待ちが種10個中6個で試算と逆の向き（延びる）でした。今回は逆が1個だけで、残りは試算と同じ向きか、変わらないでした。

- ねらい：待機場所へ戻る作りを、③⑦にも当てる
- 変わったこと：③の2台で、30秒以上の止まりが1往復あたり0.255→0.173、受け渡し口のまわりの止まりが156回→86回。1台→2台で入店待ちが試算と逆になる種が6個→1個
- 見込める効果：③⑦の基準データを v5 に替えれば、これからの店の回は「待機場所へ戻る」作りどうしで比べられる


## 作業ログ ― ④はここで区切り、⑤⑥へ進む

### ④のずれは、直し続けず、調べる対象として残す

> まず全体の流れを確認させてください。
> 今は全体のどのパートをおこなっていますか？

最初に決めた流れは、④の条件をサイトに書き出す → 3Dの店に④を建てて1回ずつ回し、画面で確かめる → ④の夜を回し、問題なければ⑤⑥、そのあと②、でした。今は3つ目の途中で、④の夜で見つかった詰まりを直していました。直しを続けると、⑤⑥②へ進めないまま延々と続くおそれがあります。前に「ずれは直し続けず、調べる対象にする」「ゴールを決めずに作業が続くのは避けたい」と決めていたので、④はここで区切りました。

> ここで区切って記事化進めてください。

区切った時点で決まっていること:

| 項目 | 状態 |
|---|---|
| 3Dの店の標準 | すれ違い入・待機場所へ戻る 入・案B 切（ServiceSim cs:34） |
| ③⑦の基準データ | v4（20261029）のまま。今回の夜（20261102）が v5 の候補 |
| ④の店の形 | 左の2人席を上へ1.0m・ドリンクバーは下の壁ぎわ（店の形の版 39257d16b68a） |
| ④の基準 | 20261031 の B（待機場所へ戻る 入・案B 切）の30回にあたる作り |
| 残るずれ | ④でロボットを足すほど入店待ちが延びる（2台で24.8分、試算3.5分）。待ちのほとんどは「席は空いているのに待った」時間 |
| 揺れ | 同じ種・同じ版でも回ごとにずれる。比べるのは種10個の中央値 |

次は、⑤⑥の店を3Dの店に建てて回します。その間に、④の夜の記録を読み、2台のときにスタッフの時間が何に取られているか（ロボットをよけた時間・案内・片付け・下の列での止まり）を分けて数えます。
