cs:114 で Check-in しました(v5b の道順・v5 の0章の直し2つ・NavMesh の焼き直し・hardToPass 削除)。 そのあと v5 の 3 章(回し方をサイトにそろえる)を入れました。Unity は押していません(Editor が開いたまま)。 ──────────────────────────────────────────────────────── 0. cs:114 の中身(21 項目) ──────────────────────────────────────────────────────── 新規 Store/RouteBook.cs(+.meta) Experiment/serving-robot-params.json(+.meta) Experiment/SimParams.cs(+.meta)・SimParams.asset(+.meta) 変更 Store/JsonStoreLayout.cs・StorePlan.cs・StoreBuilder.cs・NavMeshBaker.cs Robot/RobotSpec.cs・Robot/ServingRobotController.cs Editor/ServiceSimJsonStore.cs・Editor/ServiceSimMenu.cs Store/Layouts/*.json(3つ)・StoreLayout_p1_efficient_corner.asset・p5_crammed.asset .git は入っていません(ignore.conf に足す案は、まだご相談のままです)。 ──────────────────────────────────────────────────────── 1. そろえたこと(v5 3章の表のとおり) ──────────────────────────────────────────────────────── (a) 条件:unity_conditions の6つを選べるようにした 新しいメニュー **ServiceSim/Site Run/** 条件を一覧する(回さない) ③ スタッフ4人・ロボット0台 / 1台 / 2台 ⑦ スタッフ4人・ロボット0台 / 1台 / 2台 出力フォルダを開く 選ぶのは条件だけです。数字は ExperimentRunner が JSON から読みます。 ロボット0台とスタッフ4人は、そのまま回せます(0台のときは走りが0なので、 「走りがあるのに記録が0」の見張りは働きません)。 置き場所は KIOXIA(v5 の5章) /Volumes/KIOXIA/r2r2r-data/service_sim/unity/{日付}_{店}_{条件}_s{種}_{時刻}/ KIOXIA がつながっていないときは、回さずに止めます。 (b) 始め方:空の店から、来客 120 分 + 全員が帰るまで これまで これから(サイトの条件のとき) 8割埋まった店で始める → 空の店から始める(慣らしの組を置かない) 慣らし 15 分 + 計測 120 分 → 来客 peak_min(120 分)→ そのあと新しい組は来ない → 全員が帰ったら終わり → 帰らないまま max_extra_min(600 分)を過ぎたら打ち切り 打ち切りだったかは summary.json の site_run.everyone_left で分かります(true なら全員帰った)。 これまでの回し方(慣らし+計測)は、そのまま残してあります(Run One・Stage 3 は前のまま)。 (c) 立ち往生:受け渡し口へ移す(warp)をやめ、スタッフを呼ぶ形にした これまで:60 秒動けない → 15 秒待つ → **受け渡し口へ移して往復を終える**(stuck=1) これから:60 秒動けない → **スタッフを呼ぶ**(仕事板に優先度 0 で出す。ほかの仕事より先) → スタッフが歩いて来て rescue_s(15 秒)動かす → **止まっていた所から、同じ道順の続きを走る**(道順は変えない) ・「動けなくなった」の判定は今のまま(stuckAfterStoppedSec = 60 秒) ・1往復で何度でも起こりえます(動かしてもらった先でまた動けなくなる)。 回数は trips.csv の stuck_count、待った秒数は stuck_wait_s に出ます ・「ほかの仕事より先」は、**次に取る仕事として先**という意味です (いま案内や片付けをしている人を、途中で引き離すことはしません) ・いつまでも来ないときの最後の保険は、今までどおり1往復 600 秒の打ち切り(timeout=1)です ・スタッフがロボットのところへ着けないときは、今までどおり B1 の 「あきらめた → 3回で移した」が働きます(回数は give_ups.csv に残ります) (d) 逃がし弁:回数を記録した(仕組みは消していません) summary.json の site_run に、あきらめた(gave_up)・移した(warped)・卓を空けた(table_freed)を 並べて出します。立ち往生で呼んだ回数(rescues)・動かした回数(rescues_done)・ 呼んでから動き出すまでの秒数(rescue_wait_s。歩いた時間+15 秒)も同じ欄です。 (e) 出す数字:meta.metrics と同じ名前で出した summary.json に **site_metrics** という欄を足しました。名前はサイトのままです。 entry_wait_mean / full_wait_mean / staff_wait_mean / dish_wait_mean / dish_wait_p90 / cold_share / turn_mean / walk_km_per_staff / staff_util / robot_util / robot_share / rescues / pauses / groups 同じ summary.json に **site_result**(その条件のサイトの答え)も写すので、 並べた表はあとから手で写さずに作れます。 **定義が違うもの(ご依頼のとおり報告します)** 1. staff_wait_mean サイト … blocked_wait(卓が空くのを待った)+ guide_wait の合計 Unity … **案内の仕事が板に出てから、スタッフが取るまで** Unity は空き卓が出た瞬間に卓を割り当てるので、「卓は空いているのに待つ」のは 案内の人が来ないあいだだけになります。そこを測っています。 2. turn_mean(客が帰ってから卓が使えるまで) 名前と定義は同じですが、中身が違います。Unity はそのあいだに **片付けのスタッフが歩く時間と、bus_trips(2 往復)の返却口への行き帰り**も入ります。 サイトは clear_s+wipe_s の時間だけです。Unity の方が長く出るはずです。 3. entry_wait_mean の内訳が足し算になりません(サイト側も同じ) サイトの ③ロボット0台では entry 3.1814 = full 0.1472 + staff 2.8545 + 0.18 で、 ぴったりにはなりません(平均をとる母数が違うため)。 Unity も entry = full + staff +(歩いた時間+45 秒)で、足し算にはなりません。 4. site_result にあって meta.metrics に無い名前が6つあります seat_wait_mean・blocked_wait_mean・guide_wait_mean・robot_bus_share・collects・fragile_robot このうち seat_wait_mean は Unity も前から出しています(sim_like)。 ほかの5つは Unity では出していません(下げ膳と追加注文を作っていないため)。 5. pauses と rescues は、サイト側が **unity_measures の仮の値**(pause_rate 0.3・ stuck_rate 0.01)から出した数です。Unity はこれを読まずに実際に数えるので、 site_result の pauses 41.6 / rescues 1.475 とは、そもそも出どころが違います。 ここは「Unity で測ってサイトに返す」側の数字です。 (f) Unity で測る値:往復ごとに出した(設計書2章の4つ) trips.csv に足した列 speed_mps 実際に走れた速さ = distance_m /(total_s − stopped_s) stuck_count 動けなくなってスタッフを呼んだ回数 stuck_wait_s スタッフを待った秒数 via_narrow その往復でサイトの道順が 0.8 m の道を使ったか(routes の use) stops_in_narrow 狭い通路の中で止まった回数 stops_out_narrow 外で止まった回数 stopped_in_narrow_s 中で止まっていた秒数 stopped_out_narrow_s 外で止まっていた秒数 止まっていた長さの分布は、これまでどおり stop_durations_s(往復ごと)と stops.csv(1回ごと)です。 stops.csv には **in_narrow** を足したので、分布も中と外に分けて読めます。 「狭い」の決め方はサイトの決まりのままです(通路の幅 < meta.settings.normal_width = 1.0 m)。 ③ 通路 1.2 m → 中は 0 回(ぜんぶ「外」) ⑦ 通路 0.8 m → A01・A02・A03 の中が「中」 (g) ServiceSpec・PeopleSpec を JSON から読む形にした 新しい Experiment/SiteValues.cs が、その回だけ .asset に入れて、回し終わりに戻します (停止点(C1)と同じやり方。.asset は書き換わりません)。実際に入れた値は Console に出ます。 入れる値 条件から arrivals_per_h → ServiceSpec.arrivalsPerHour(混み具合を使わなくなる) trays / fragile_by / staff(PeopleSpec.staffCount)/ robots common から guide_s・pay_s・call_s・staff_place_s・clear_s・wipe_s・rescue_s・ max_extra_min・cold_min・fragile_cook・staff_speed・ robot_handoff_s(RobotSpec.tableDwellSec) stores から peak_min・call_rate・fragile・bus_trips・eat_min・first_dishes[0][1] **.asset の値と実際に違っていたのは2つだけ**です(ほかは同じ値を手で写してありました) 来客 35 組/時(混み具合「普通」)→ **42 組/時**(条件の arrivals_per_h) スタッフ 2 人 → **4 人** (ロボット0台の条件だけ trays が 3 → 1 になります) 読まない値(unity_measures): robot_speed・pause_rate・pause_s・stuck_rate サイトにあるが Unity で形にしていないもの(Console と報告に出します) common.load_s(スタッフがロボットに皿を載せる 15 秒) … Unity は受け渡し口で待つ 3 秒(staffDwellAtPassSec)だけ。**ここは差になります** common.guest_load_s(下げ膳で客が皿を載せる 20 秒)… mode=serve なので使わない common.dish_extra_m(0 分)… 0 なので差は出ない stores.extra_orders(0)・extra_cook … 追加注文が 0 なので使わない stores.staff_all・arrivals・dist_m・dist_list … 条件の範囲と道のりの確かめに使う値 回す前に止める決まり(Unity で埋めない) ・版の番号が合わない(店の形の meta.generation ↔ 試算の meta.layout_generation) ・読めない値が1つでもある ・建てた卓の数が stores.tables(42)と違う ・条件の mode が serve でない いまの JSON で、上の4つはすべて通ります(私の側で JSON を読んで確かめました)。 版の番号 9628954a582f(③・⑦・summary.json・試算の4つとも同じ) 読めない値 0 件 / 卓 42 = 42 / mode すべて serve Unity にしか無いもの(組の人数・2人席・ドリンクバー・トイレ・椅子を引く)は、そのまま残しています。 歩く客・待合に立つ客の人数だけは、まだ「混み具合」の値(普通)を使っています (サイトに人数が無いため。Unity だけの値です)。 ──────────────────────────────────────────────────────── 2. 触ったファイル ──────────────────────────────────────────────────────── 新規 Experiment/SiteValues.cs(+.meta) サイトの値をその回だけ入れて戻す Editor/ServiceSimSiteRun.cs(+.meta) Site Run のメニュー(6条件) 変更 Experiment/ExperimentRunner.cs Job にサイトの条件を足す/始め方と終わり方/ 往復ごとの測り/site_metrics に渡す値 Experiment/TripLogger.cs trips.csv に8列・stops.csv に1列・ summary.json に site_metrics / site_run / site_result Experiment/SimParams.cs 条件を番号で引く・first_dishes を読む Service/ServiceOps.cs Rescue の仕事・立ち往生の回数・robot_util・ スタッフの歩いた距離・入店待ちの内訳 Service/GroupManager.cs 来客を 120 分で止める・慣らしを置かない・ 満席で待った分を数える Service/ServiceSpec.cs arrivalsPerHour・rescueSec・maxExtraMin を追加 People/StaffAgent.cs Rescue の仕事(歩いて行って rescue_s 動かす)・ 歩いた距離を残す Robot/ServingRobotController.cs warp をやめて Rescued() で走りを続ける・ stuck_count / stuck_wait_s / via_narrow Robot/RobotSpec.cs stuckRecoveryWaitSec は使わなくなった(説明を直した) Store/JsonStoreLayout.cs 版の番号・卓の数・normal_width・試算の店の名前を読めるように Editor/ServiceSimSetup.cs SimParams を ExperimentRunner に入れる Editor/ServiceSimStage2.cs 同じ(メニューから回すときの下ごしらえ) Editor/ServiceSimLabels.cs 字幕「動けない・人を待つ N 秒」 ──────────────────────────────────────────────────────── 3. お願い(押す順番) ──────────────────────────────────────────────────────── 1. **ServiceSim/Site Run/条件を一覧する(回さない)** Console に6条件と、meta.metrics の名前・意味が出ます。 「合わないもの: なし」になっていることを見てください(ここで止まるなら回しても止まります)。 2. **ServiceSim/Site Run/③ スタッフ4人・ロボット2台**(v5 の4章の確かめ) 乱数の種は ExperimentPlan の trialSeed(いまの値)です。1回だけ回します。 Console の「とちゅう」が1分ごとに出ます(組・帰った数・走り・立ち往生・実時間)。 見ていただきたいのは、v5 の4章の5点です。 1. 1回にかかった実時間と、全員が帰るまでの店の中の時間 (summary.json の site_run.total_minutes と everyone_left) 2. site_metrics と site_result を並べた数字 3. 立ち往生で呼ばれた回数(rescues)と、逃がし弁の回数(gave_up・warped・table_freed) 4. trips.csv の speed_mps と via_narrow 5. ⑦は、そのあと同じように回して T17・T22 の道のりを見ます **注意**:来客 120 分 + 全員が帰るまでなので、店の中の時間は 120 分より長くなります (打ち切りは 720 分)。これまでの 135 分より長い回になります。 長すぎるときは Play を止めてください(そのときは何も書き出しません)。 1回にかかった時間を見てから、6条件を何回ずつ回すかをご相談します。 まだ Check-in していません(通ってからにします)。 ════════════════════════════════════════════════════════ 追記(2026-10-22 22:10)ご指示の4点を直して Check-in しました ════════════════════════════════════════════════════════ 1. まだ入っていなかったファイルを、別の Check-in で先に入れました → **cs:115**(34 項目・.git なし) Service/(フォルダごと:ServiceOps.cs・GroupManager.cs・JamWatcher.cs・ ServiceSpec.cs・ServiceSpec.asset) Experiment/ExperimentRunner.cs Editor/ServiceSimLabels.cs・ServiceSimLegend.cs・ServiceSimStage2.cs・ServiceSimStage3.cs People/PersonRobotYield.cs Store/FloorPaint.cs・Materials/Mat_PeopleFloor.mat・Mat_RobotFloor.mat・Prefabs/BenchSeat.prefab LABEL_RULES.md(+それぞれの .meta) 一度も Check-in されておらず「Added」のままだったものです。中身は変えていません。 ただし、このうち 6 本(ServiceOps.cs・GroupManager.cs・ServiceSpec.cs・ ExperimentRunner.cs・ServiceSimLabels.cs・ServiceSimStage2.cs)には、 今日の v5 3章の変更がもう入っています(いちばん古い版が残っていないため、 いまの中身のまま入れました)。Check-in のコメントにもそう書いています。 2. staff_wait_mean をサイトにそろえました 分け方をサイトの試算(haizen_sim.py)と同じにしました。 seat_wait 店に来てから案内が始まるまで blocked_wait そのうち、卓は空いたのに片付けが終わらず待った分 … **片付け待ちの卓の数だけ、待っている列の前から順に、 そのコマの時間を足す**(サイトの _acc と同じ) full_wait seat_wait − blocked_wait guide_wait 案内の仕事が板に出てから、スタッフが取るまで staff_wait blocked_wait + guide_wait summary.json の site_metrics に blocked_wait_mean・guide_wait_mean・seat_wait_mean も出します。 「片付け待ちの卓」は、客が帰ってから拭き終わって使えるようになるまでの卓です (ServiceOps.TableSlot.clearing)。 サイトの試算には卓の大きさが無いので、ここも席数を見ずに列の前から数えます (2人席・4人席は Unity だけのものです)。 確かめ:サイトの6条件すべてで、full = seat − blocked と staff = blocked + guide が 小数4桁まで成り立ちました。分け方は合っています。 条件 seat blocked full seat−blocked guide staff blocked+guide ③ 0台 2.6020 2.4548 0.1472 0.1472 0.3997 2.8545 2.8545 ③ 1台 1.4919 1.1414 0.3505 0.3505 0.2909 1.4322 1.4323 ③ 2台 0.6083 0.5116 0.0967 0.0967 0.2337 0.7453 0.7453 ⑦ 0台 2.9121 2.5981 0.3140 0.3140 0.4008 2.9990 2.9989 ⑦ 1台 1.6327 1.3084 0.3243 0.3243 0.2853 1.5937 1.5937 ⑦ 2台 0.7970 0.6554 0.1416 0.1416 0.2469 0.9024 0.9023 3. turn_mean は直していません(サイトもスタッフ待ち・歩き・往復を含む。同じ定義)。 前の報告に「定義が違う」と書いた分は取り下げ、summary.json の説明文からも外しました。 4. 上げ膳では、受け渡し口で載せる時間を 0 秒にしました サイトの条件で回すとき、PeopleSpec.staffDwellAtPassSec を 0 にします (SiteValues が覚えて、回し終わりに元の 3 秒へ戻します)。 なお、この値は StaffAgent からは読まれていませんでした(料理を運ぶ仕事の1歩めは、 前から dwell 0 秒)。ですので動きは変わらず、**0 秒という決まりが設定にも残る**という直しです。 load_s(15 秒)は下げ膳だけで使う値、という扱いに書き換えました。 → これで「サイトにあるが Unity で形にしていないもの」から load_s は外れました。 残りは guest_load_s(下げ膳)・dish_extra_m(0)・extra_orders(0)・extra_cook です。 v5 3章ぶんは **cs:116**(14 項目)に入れました。 変更 StaffAgent.cs・ServiceSimSetup.cs・TripLogger.cs・SimParams.cs・ExperimentRunner.cs・ RobotSpec.cs・ServingRobotController.cs・JsonStoreLayout.cs・GroupManager.cs・ServiceOps.cs 新規 Editor/ServiceSimSiteRun.cs・Experiment/SiteValues.cs(+.meta) Check-in していない .asset・prefab・シーン・ProjectSettings は、今回も触っていません。