commit 3c7927b 病院:呼ぶ場面と荷物の見せ方(request_view)を足し、依頼が出た時刻・便の荷物の数・受け取りを待つ秒を書き出すようにした diff --git a/tools/hospital_sim/README.md b/tools/hospital_sim/README.md index 7c26407..5313cbf 100644 --- a/tools/hospital_sim/README.md +++ b/tools/hospital_sim/README.md @@ -78,3 +78,7 @@ Unity 依頼134 で、外来の混む時間は裏口の道で廊下の問題が - `people_flow.elevator_traffic` のほかの階の職員を、運ぶ人・通り抜ける人・用事で来る医師に分けた(3:5:2。仮置き) - `people_flow.cleaning_security` を足した(清掃の人2人・警備の人2人。仮置き) - 分け方と用事の台帳は iCloud の `hospital/staff_classification.md` + +## 呼ぶ場面と荷物を画面に出すための書き出し(2026-11-12) + +依頼155 の動画で、ロボットがどこから呼ばれて動いているのか、人から荷物を受け取ったり渡したりしているのかが分からなかった。`unity.request_view`(見せ方の決まり)を足し、`day_schedule.requests_all`(依頼が出た時刻・至急・どの便で運ばれたか)を書き出すようにした。`trips_all` の各便に `items`(荷物の数)と `pickup_wait_s`(届け先で受け取る人を待つ秒)を足した。試算は記録を足しただけで、便の時刻も結果も変わらない。 diff --git a/tools/hospital_sim/assumptions.json b/tools/hospital_sim/assumptions.json index 03cfe4e..4d200ce 100644 --- a/tools/hospital_sim/assumptions.json +++ b/tools/hospital_sim/assumptions.json @@ -1362,6 +1362,19 @@ "n": null, "updated": "2026-11-11" } + }, + "request_view": { + "value": { + "依頼が出た時": "頼んだ持ち場(積む所)に印を出す(至急は色を変える)。パネルに、道ごとの待っている荷物の数と、いちばん古い依頼が待っている時間を出す。時刻は requests_all", + "積む時・渡す時": "人がロボットの横に立っている間、パネルに『積んでいる』『受け取っている』と出す。運んでいる荷物の数(trips_all の items)も出す", + "受け取りを待つ時": "届け先でロボットが受け取る人を待っている時間(trips_all の pickup_wait_s)を、パネルと場面で分かるようにする(待っている秒を数える)。受け取る人はその時間が過ぎてから台へ来る", + "人が運ぶ時": "staff_walks_all の回は、運んでいる人に印を付け、パネルに『人が運んでいる』と出す" + }, + "what": "呼ぶ場面と荷物の見せ方(Unity の画面とパネル)", + "basis": "決まり", + "source": "2026-11-12 エイイチ:依頼155 の動画を見て、ロボットがどこから呼ばれて動いているのか・人から荷物を受け取ったり渡したりしているのかが分からないと指摘。この3つで進めると決定", + "n": null, + "updated": "2026-11-12" } } } \ No newline at end of file diff --git a/tools/hospital_sim/export_unity_params.py b/tools/hospital_sim/export_unity_params.py index 50ba11e..94f1716 100644 --- a/tools/hospital_sim/export_unity_params.py +++ b/tools/hospital_sim/export_unity_params.py @@ -29,11 +29,19 @@ def day_schedule(A): d.run() out["plans"][plan][str(sp)].append([{"depart": t["depart_s"], "from": t["from"]} for t in d.trip_log if t["route"] == "blue"]) out.setdefault("trips_all", {}).setdefault(plan, {}).setdefault(str(sp), []).append( - [{"route": t["route"], "depart": t["depart_s"], "from": t["from"]} for t in d.trip_log]) + [{"route": t["route"], "depart": t["depart_s"], "from": t["from"], "items": t["items"], + "pickup_wait_s": t.get("pickup_wait_s")} for t in d.trip_log]) + out.setdefault("requests_all", {}).setdefault(plan, {}).setdefault(str(sp), []).append( + [{"route": q["route"], "t": round(q["t"], 1), "urgent": q["urgent"], "by": q["by"], + "trip": q.get("trip"), "walk": q.get("walk")} for q in sorted(d.done, key=lambda q: q["t"])]) out.setdefault("staff_walks_all", {}).setdefault(plan, {}).setdefault(str(sp), []).append( [{"route": t["route"], "depart": t["depart_s"], "from": t["from"], "to": t["to"]} for t in d.walk_log]) out["trips_all_what"] = ("1台のロボットが緑・青・赤の全部を回すときの便の時刻表(h3 から)。plan × 速さ × 種。" "route は green/blue/red、from は積む所。道は routes_all を使う") + out["requests_all_what"] = ("依頼が出た時刻の表(trips_all・staff_walks_all と同じ回)。plan × 速さ × 種。t は依頼が出た時刻(7:30 からの秒)、" + "urgent は至急、by は運んだもの(robot/staff)、trip は trips_all の中の何番目の便で運ばれたか(0 から)、" + "walk は staff_walks_all の何番目か。trips_all の items はその便の荷物の数、pickup_wait_s は届け先で受け取る人を待つ秒。" + "2026-11-12 呼ぶ場面と荷物を画面に出すために足した(request_view)") out["staff_walks_all_what"] = ("ロボット1台のとき、人(看護業務補助者)が歩いて運ぶ回の時刻表(試算の決まり:至急の依頼が出たとき、" "その出発地に空いているロボットがいなければ人が運ぶ)。plan × 速さ × 種。depart は 7:30 からの秒。" "from で受け取り、to へ歩いて渡し、持ち場へ戻る。2026-11-12 職員の用事の表(people_flow.staff_moves)で使う") @@ -94,6 +102,7 @@ def main(): "day_end_rule": U["day_end_rule"]["value"], "switch_move": U["switch_move"]["value"], "seeds": U["seeds"]["value"], + "request_view": U["request_view"]["value"], "people_flow": {k: (v if k == "about" else {kk: v[kk] for kk in ("value", "what", "basis", "source") if kk in v}) for k, v in U["people_flow"].items()}, "basis": {k: U[k]["basis"] for k in ("speeds", "crowd_people", "people_mix", "stretcher_per_h")}, diff --git a/tools/hospital_sim/hospital_sim.py b/tools/hospital_sim/hospital_sim.py index c1b8789..1dc3501 100644 --- a/tools/hospital_sim/hospital_sim.py +++ b/tools/hospital_sim/hospital_sim.py @@ -170,6 +170,8 @@ class Day: d = self.route_dist(k) v = self.c["staff_speed"] extra = self.c["staff_extra_s"] + for q in items: + q["walk"] = len(self.walk_log) self.walk_log.append({"route": k, "depart_s": round(self.env.now, 1), "from": self.routes[k]["from_point"], "to": self.routes[k]["to_point"], "items": len(items)}) yield self.env.timeout(d / v + extra + self.c["staff_handoff_s"]) @@ -246,11 +248,15 @@ class Day: items, self.queue[k] = Q[:cap], Q[cap:] yield self.env.timeout(self.c["load_s"]) dest = self.routes[k]["to_point"] - self.trip_log.append({"route": k, "depart_s": round(self.env.now, 1), "from": home, "to": dest, "items": len(items), - "robot": i}) + for q in items: + q["trip"] = len(self.trip_log) + trip = {"route": k, "depart_s": round(self.env.now, 1), "from": home, "to": dest, "items": len(items), + "robot": i} + self.trip_log.append(trip) s, stuck = self.leg(self.dist(home, dest)) yield self.env.timeout(s) pw = self.rng.expovariate(1 / self.c["pickup_wait_s"]) if self.c["pickup_wait_s"] > 0 else 0.0 + trip["pickup_wait_s"] = round(pw, 1) # 届け先で受け取る人を待った秒(記録だけ) yield self.env.timeout(pw + self.c["unload_s"]) for q in items: self.finish(q, "robot")