==================================================================== 待機場所へ戻るを標準にし、判定を入切ごとに分け、③⑦を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 の項目が無い)が残っている。今回は触っていない。消すかどうか。