From 0ba328962064bdbc035a56d30fc55941fc0ffb35 Mon Sep 17 00:00:00 2001 From: Mohcine Chraibi Date: Sat, 7 Oct 2023 01:41:44 +0200 Subject: [PATCH] Add three new notebooks Added notebooks to showcase * How journyes work * How to model Motivation * How routing works --- notebooks/demo-data/journey/shortest_path.gif | Bin 0 -> 333564 bytes notebooks/journey.ipynb | 1173 +++++++++++++++++ notebooks/motivation.ipynb | 737 +++++++++++ notebooks/routing.ipynb | 795 +++++++++++ 4 files changed, 2705 insertions(+) create mode 100644 notebooks/demo-data/journey/shortest_path.gif create mode 100644 notebooks/journey.ipynb create mode 100644 notebooks/motivation.ipynb create mode 100644 notebooks/routing.ipynb diff --git a/notebooks/demo-data/journey/shortest_path.gif b/notebooks/demo-data/journey/shortest_path.gif new file mode 100644 index 0000000000000000000000000000000000000000..ca3db7b96b78a382dfa1ff186a7e009414c9c3fd GIT binary patch literal 333564 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 z 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

-1gWmbOZ>Wpe-oH}UOFr-Dv%cet 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 literal 0 HcmV?d00001 diff --git a/notebooks/journey.ipynb b/notebooks/journey.ipynb new file mode 100644 index 0000000000..fe0e384f80 --- /dev/null +++ b/notebooks/journey.ipynb @@ -0,0 +1,1173 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ae798e28-45c8-401a-891d-fdfa71c6516a", + "metadata": {}, + "source": [ + "# Journey demonstration\n", + "\n", + "With JuPedSim, directing agents towards exits and ensuring a smooth evacuation from the simulation area is straightforward and versatile. \n", + "There might be scenarios where it's vital to navigate agents along various paths, thus creating diverse evacuation situations. \n", + "Let's explore different routing strategies of agents using a simple geometric space - a corner.\n", + "\n", + "JuPedSim manages routing by geometrically triangulating the simulation area. Without user-defined routing strategies, agents, for example, in a corner simulation, naturally move towards the inner edge of the corner. Look at this visualization where the given direction of each agent is shown by a red line. You'll observe all red lines lead towards the exit along the inner edge of the corner. While it seems logical, this path isn’t always optimal and could result in a bottleneck, thereby slowing down the evacuation process.\n", + "\n", + "![](demo-data/journey/shortest_path.gif)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9dba16d9", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "from shapely import Polygon\n", + "import pathlib\n", + "import pandas as pd\n", + "import numpy as np\n", + "import jupedsim as jps\n", + "import pedpy\n", + "from pedpy.column_identifier import ID_COL, FRAME_COL\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import Circle\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "439df27a", + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"JuPedSim: {jps.__version__}\\nPedPy: {pedpy.__version__}\")" + ] + }, + { + "cell_type": "markdown", + "id": "4c1eae67-0c1e-4f0b-b1f7-4e383e9092c4", + "metadata": {}, + "source": [ + "## Preparing the Simulation: Geometry and Routing Instructions\n", + "\n", + "Let's start by setting up a basic polygon. This will serve as our main simulation area where agents will be distributed. \n", + "Additionally, we'll mark an exit area using another polygon. When agents enter this exit area, they're deemed to have safely evacuated and will be removed from the ongoing simulation.\n", + "\n", + "Next, we'll introduce an initial target for the agents: a sizable circular area (known as a switch). After the simulation kickstarts, agents will first head towards this circle. Once they enter the circle, they'll be directed to one of three distinct waypoints, set diagonally along the curve of the corner.\n", + "\n", + "For the simulation's onset, all agents will be positioned inside a rectangular zone at the corner's base." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a45d0955-7092-4dda-bc44-707893e4449b", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "simulation_polygon = Polygon(\n", + " [(-7, 15), (-7, -7), (23, -7), (23, 0), (0, 0), (0, 15)]\n", + ")\n", + "exit_polygon = [(-6.8, 14.8), (-0.2, 14.8), (-0.2, 13.5), (-6.8, 13.5)]\n", + "switch_point = (7, -3.5)\n", + "waypoints = [\n", + " (-0.5, -0.5),\n", + " (-3, -2),\n", + " (-6, -4),\n", + "]\n", + "distance_to_waypoints = 3\n", + "distance_to_switch = 3\n", + "\n", + "distribution_polygon = Polygon(\n", + " [[22.8, -0.3], [10.8, -0.3], [10.8, -6.8], [22.8, -6.8]]\n", + ")\n", + "walkable_area = pedpy.WalkableArea(simulation_polygon)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b762d6d", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=1)\n", + "ax.set_aspect(\"equal\")\n", + "pedpy.plot_walkable_area(walkable_area=walkable_area, axes=ax)\n", + "\n", + "x, y = distribution_polygon.exterior.xy\n", + "plt.fill(x, y, alpha=0.1)\n", + "plt.plot(x, y, color=\"white\")\n", + "centroid = distribution_polygon.centroid\n", + "plt.text(\n", + " centroid.x, centroid.y, \"Start\", ha=\"center\", va=\"center\", fontsize=10\n", + ")\n", + "\n", + "x, y = Polygon(exit_polygon).exterior.xy\n", + "plt.fill(x, y, alpha=0.1)\n", + "plt.plot(x, y, color=\"white\")\n", + "centroid = Polygon(exit_polygon).centroid\n", + "plt.text(centroid.x, centroid.y, \"Exit\", ha=\"center\", va=\"center\", fontsize=10)\n", + "\n", + "ax.plot(switch_point[0], switch_point[1], \"bo\")\n", + "circle = Circle(\n", + " (switch_point[0], switch_point[1]),\n", + " distance_to_switch,\n", + " fc=\"blue\",\n", + " ec=\"blue\",\n", + " alpha=0.1,\n", + ")\n", + "ax.add_patch(circle)\n", + "ax.annotate(\n", + " f\"Switch\",\n", + " (switch_point[0], switch_point[1]),\n", + " textcoords=\"offset points\",\n", + " xytext=(-5, -15),\n", + " ha=\"center\",\n", + ")\n", + "for idx, waypoint in enumerate(waypoints):\n", + " ax.plot(waypoint[0], waypoint[1], \"ro\")\n", + " ax.annotate(\n", + " f\"WP {idx+1}\",\n", + " (waypoint[0], waypoint[1]),\n", + " textcoords=\"offset points\",\n", + " xytext=(10, -15),\n", + " ha=\"center\",\n", + " )\n", + " circle = Circle(\n", + " (waypoint[0], waypoint[1]),\n", + " distance_to_waypoints,\n", + " fc=\"red\",\n", + " ec=\"red\",\n", + " alpha=0.1,\n", + " )\n", + " ax.add_patch(circle)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36627194", + "metadata": {}, + "outputs": [], + "source": [ + "num_agents = 100\n", + "positions = jps.distribute_by_number(\n", + " polygon=distribution_polygon,\n", + " number_of_agents=num_agents,\n", + " distance_to_agents=0.4,\n", + " seed=12,\n", + " distance_to_polygon=0.2,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0efebebe", + "metadata": {}, + "source": [ + "## Exploring Transition Strategies\n", + "\n", + "All agents initially set their course towards the switch_point. After reaching it, they navigate towards intermediate goals (waypoints) before making their way to the final exit. The challenge lies in deciding which waypoint each agent should target next.\n", + "\n", + "Let's explore three unique methods to determine these transition strategies:\n", + "\n", + "1. **Direct Path Strategy**: Here, every agent simply aims for the first waypoint, mirroring a shortest path algorithm.\n", + "2. **Balanced Load Strategy**: Agents are directed towards the least occupied waypoint, ensuring a more balanced distribution.\n", + "3. **Round Robin Strategy**: Waypoints are sequentially assigned to agents, rotating through each in turn.\n", + "---------\n", + "\n", + "### Direct Path Strategy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04d54de9", + "metadata": {}, + "outputs": [], + "source": [ + "def shortest_path(\n", + " simulation: jps.Simulation, switch_id, waypoint_ids, exit_id\n", + "):\n", + " \"\"\"Build a journey with fixed transitions for a given simulation.\"\"\"\n", + "\n", + " journey = jps.JourneyDescription([switch_id, *waypoint_ids, exit_id])\n", + " # switch ---> 1st waypoint\n", + " journey.set_transition_for_stage(\n", + " switch_id, jps.Transition.create_fixed_transition(waypoint_ids[0])\n", + " )\n", + " # 1st waypoint ---> exit\n", + " journey.set_transition_for_stage(\n", + " waypoint_ids[0], jps.Transition.create_fixed_transition(exit_id)\n", + " )\n", + "\n", + " journey_id = simulation.add_journey(journey)\n", + " return journey_id" + ] + }, + { + "cell_type": "markdown", + "id": "37495c3e", + "metadata": {}, + "source": [ + "### Balanced Load Strategy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "609d2eaa", + "metadata": {}, + "outputs": [], + "source": [ + "def least_targeted(\n", + " simulation: jps.Simulation, switch_id, waypoint_ids, exit_id\n", + "):\n", + " \"\"\"Build a journey with least targeted transitions for a given simulation.\"\"\"\n", + "\n", + " journey = jps.JourneyDescription([switch_id, *waypoint_ids, exit_id])\n", + " # switch ---> least targeted waypoint\n", + " journey.set_transition_for_stage(\n", + " switch_id,\n", + " jps.Transition.create_least_targeted_transition(waypoint_ids),\n", + " )\n", + " # from all waypoints ---> exit\n", + " for waypoint_id in waypoint_ids:\n", + " journey.set_transition_for_stage(\n", + " waypoint_id, jps.Transition.create_fixed_transition(exit_id)\n", + " )\n", + "\n", + " journey_id = simulation.add_journey(journey)\n", + " return journey_id" + ] + }, + { + "cell_type": "markdown", + "id": "a90e0089", + "metadata": {}, + "source": [ + "### Round Robin Strategy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bad06382", + "metadata": {}, + "outputs": [], + "source": [ + "def round_robin(simulation: jps.Simulation, switch_id, waypoint_ids, exit_id):\n", + " \"\"\"Build a journey with least round-robin transitions for a given simulation.\"\"\"\n", + "\n", + " journey = jps.JourneyDescription([switch_id, *waypoint_ids, exit_id])\n", + " # switch ---> 1st waypoint with weight1\n", + " # switch ---> 2s waypoint with weight2\n", + " # switch ---> 3th waypoint with weight3\n", + " weight1, weight2, weight3 = 1, 1, 1\n", + " journey.set_transition_for_stage(\n", + " switch_id,\n", + " jps.Transition.create_round_robin_transition(\n", + " [\n", + " (waypoint_ids[0], weight1),\n", + " (waypoint_ids[1], weight2),\n", + " (waypoint_ids[2], weight3),\n", + " ]\n", + " ),\n", + " )\n", + " # from all waypoints ---> exit\n", + " for waypoint_id in waypoint_ids:\n", + " journey.set_transition_for_stage(\n", + " waypoint_id, jps.Transition.create_fixed_transition(exit_id)\n", + " )\n", + "\n", + " journey_id = simulation.add_journey(journey)\n", + " return journey_id" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4835947a", + "metadata": {}, + "outputs": [], + "source": [ + "scenarios = [\n", + " shortest_path,\n", + " least_targeted,\n", + " round_robin,\n", + "]" + ] + }, + { + "cell_type": "markdown", + "id": "569d86fe", + "metadata": {}, + "source": [ + "## Executing the Simulation\n", + "\n", + "With all components in place, we're set to initiate the simulation.\n", + "For this demonstration, the trajectories will be recorded in an sqlite database.\n", + "\n", + "First we setup some agent parameters then run three simulation with the different strategies:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "86ee1ae0", + "metadata": {}, + "outputs": [], + "source": [ + "def run_scenario_simulation(scenario, agent_parameters, positions, geometry):\n", + " \"\"\"Runs a simulation for a given scenario using the provided simulation object, agent parameters, and positions.\"\"\"\n", + " filename = f\"{scenario.__name__}.sqlite\"\n", + "\n", + " simulation = jps.Simulation(\n", + " dt=0.05,\n", + " model=jps.CollisionFreeSpeedModel(\n", + " strength_neighbor_repulsion=2.6,\n", + " range_neighbor_repulsion=0.1,\n", + " range_geometry_repulsion=0.05,\n", + " ),\n", + " geometry=geometry,\n", + " trajectory_writer=jps.SqliteTrajectoryWriter(\n", + " output_file=pathlib.Path(filename)\n", + " ),\n", + " )\n", + " exit_id = simulation.add_exit_stage(exit_polygon)\n", + " switch_id = simulation.add_waypoint_stage(switch_point, distance_to_switch)\n", + " waypoint_ids = [\n", + " simulation.add_waypoint_stage(waypoint, distance_to_waypoints)\n", + " for waypoint in waypoints\n", + " ]\n", + " agent_parameters.stage_id = switch_id\n", + " journey_id = scenario(simulation, switch_id, waypoint_ids, exit_id)\n", + " agent_parameters.journey_id = journey_id\n", + " for new_pos in positions:\n", + " agent_parameters.position = new_pos\n", + " simulation.add_agent(agent_parameters)\n", + "\n", + " while simulation.agent_count() > 0:\n", + " simulation.iterate()\n", + "\n", + " return filename, simulation.iteration_count()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d121c98", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "def print_header(scenario_name: str):\n", + " line_length = 50\n", + " header = f\" SIMULATION - {scenario_name} \"\n", + " left_padding = (line_length - len(header)) // 2\n", + " right_padding = line_length - len(header) - left_padding\n", + "\n", + " print(\"=\" * line_length)\n", + " print(\" \" * left_padding + header + \" \" * right_padding)\n", + " print(\"=\" * line_length)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39b63d1e", + "metadata": {}, + "outputs": [], + "source": [ + "for scenario in scenarios:\n", + " print_header(scenario.__name__.upper())\n", + " filename, iteration_count = run_scenario_simulation(\n", + " scenario,\n", + " jps.CollisionFreeSpeedModelAgentParameters(),\n", + " positions,\n", + " walkable_area.polygon,\n", + " )\n", + " print(\n", + " f\"> Simulation completed after {iteration_count} iterations.\\n\"\n", + " f\"> Output File: {filename}\\n\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2beaa468", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "import plotly.graph_objects as go\n", + "import plotly.express as px\n", + "import sqlite3\n", + "\n", + "DUMMY_SPEED = -1000\n", + "\n", + "\n", + "def read_sqlite_file(trajectory_file: str) -> pedpy.TrajectoryData:\n", + " with sqlite3.connect(trajectory_file) as con:\n", + " data = pd.read_sql_query(\n", + " \"select frame, id, pos_x as x, pos_y as y, ori_x as ox, ori_y as oy from trajectory_data\",\n", + " con,\n", + " )\n", + " fps = float(\n", + " con.cursor()\n", + " .execute(\"select value from metadata where key = 'fps'\")\n", + " .fetchone()[0]\n", + " )\n", + " walkable_area = (\n", + " con.cursor().execute(\"select wkt from geometry\").fetchone()[0]\n", + " )\n", + " return (\n", + " pedpy.TrajectoryData(data=data, frame_rate=fps),\n", + " pedpy.WalkableArea(walkable_area),\n", + " )\n", + "\n", + "\n", + "def speed_to_color(speed, min_speed, max_speed):\n", + " \"\"\"Map a speed value to a color using a colormap.\"\"\"\n", + " normalized_speed = (speed - min_speed) / (max_speed - min_speed)\n", + " r, g, b = plt.cm.jet_r(normalized_speed)[:3]\n", + " return f\"rgba({r*255:.0f}, {g*255:.0f}, {b*255:.0f}, 0.5)\"\n", + "\n", + "\n", + "def get_line_color(disk_color):\n", + " r, g, b, _ = [int(float(val)) for val in disk_color[5:-2].split(\",\")]\n", + " brightness = (r * 299 + g * 587 + b * 114) / 1000\n", + " return \"black\" if brightness > 127 else \"white\"\n", + "\n", + "\n", + "def create_orientation_line(row, line_length=0.2, color=\"black\"):\n", + " end_x = row[\"x\"] + line_length * row[\"ox\"]\n", + " end_y = row[\"y\"] + line_length * row[\"oy\"]\n", + "\n", + " orientation_line = go.layout.Shape(\n", + " type=\"line\",\n", + " x0=row[\"x\"],\n", + " y0=row[\"y\"],\n", + " x1=end_x,\n", + " y1=end_y,\n", + " line=dict(color=color, width=3),\n", + " )\n", + " return orientation_line\n", + "\n", + "\n", + "def get_geometry_traces(area):\n", + " geometry_traces = []\n", + " x, y = area.exterior.xy\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(x),\n", + " y=np.array(y),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Exterior\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " for inner in area.interiors:\n", + " xi, yi = zip(*inner.coords[:])\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(xi),\n", + " y=np.array(yi),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Obstacle\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " return geometry_traces\n", + "\n", + "\n", + "def get_colormap(frame_data, max_speed):\n", + " \"\"\"Utilize scatter plots with varying colors for each agent instead of individual shapes.\n", + "\n", + " This trace is only to incorporate a colorbar in the plot.\n", + " \"\"\"\n", + " scatter_trace = go.Scatter(\n", + " x=frame_data[\"x\"],\n", + " y=frame_data[\"y\"],\n", + " mode=\"markers\",\n", + " marker=dict(\n", + " size=frame_data[\"radius\"] * 2,\n", + " color=frame_data[\"speed\"],\n", + " colorscale=\"Jet_r\",\n", + " colorbar=dict(title=\"Speed [m/s]\"),\n", + " cmin=0,\n", + " cmax=max_speed,\n", + " ),\n", + " text=frame_data[\"speed\"],\n", + " showlegend=False,\n", + " hoverinfo=\"none\",\n", + " )\n", + "\n", + " return [scatter_trace]\n", + "\n", + "\n", + "def get_shapes_for_frame(frame_data, min_speed, max_speed):\n", + " def create_shape(row):\n", + " hover_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " text=[f\"ID: {row['id']}, Pos({row['x']:.2f},{row['y']:.2f})\"],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=1),\n", + " hoverinfo=\"text\",\n", + " showlegend=False,\n", + " )\n", + " if row[\"speed\"] == DUMMY_SPEED:\n", + " dummy_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=0),\n", + " hoverinfo=\"none\",\n", + " showlegend=False,\n", + " )\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line=dict(width=0),\n", + " fillcolor=\"rgba(255,255,255,0)\", # Transparent fill\n", + " ),\n", + " dummy_trace,\n", + " create_orientation_line(row, color=\"rgba(255,255,255,0)\"),\n", + " )\n", + " color = speed_to_color(row[\"speed\"], min_speed, max_speed)\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line_color=color,\n", + " fillcolor=color,\n", + " ),\n", + " hover_trace,\n", + " create_orientation_line(row, color=get_line_color(color)),\n", + " )\n", + "\n", + " results = frame_data.apply(create_shape, axis=1).tolist()\n", + " shapes = [res[0] for res in results]\n", + " hover_traces = [res[1] for res in results]\n", + " arrows = [res[2] for res in results]\n", + " return shapes, hover_traces, arrows\n", + "\n", + "\n", + "def create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " initial_scatter_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area_bounds,\n", + " width=800,\n", + " height=800,\n", + " title_note: str = \"\",\n", + "):\n", + " \"\"\"Creates a Plotly figure with animation capabilities.\n", + "\n", + " Returns:\n", + " go.Figure: A Plotly figure with animation capabilities.\n", + " \"\"\"\n", + "\n", + " minx, miny, maxx, maxy = area_bounds\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {initial_agent_count}\"\n", + " fig = go.Figure(\n", + " data=geometry_traces + initial_scatter_trace\n", + " # + hover_traces\n", + " + initial_hover_trace,\n", + " frames=frames,\n", + " layout=go.Layout(\n", + " shapes=initial_shapes + initial_arrows, title=title, title_x=0.5\n", + " ),\n", + " )\n", + " fig.update_layout(\n", + " updatemenus=[_get_animation_controls()],\n", + " sliders=[_get_slider_controls(steps)],\n", + " autosize=False,\n", + " width=width,\n", + " height=height,\n", + " xaxis=dict(range=[minx - 0.5, maxx + 0.5]),\n", + " yaxis=dict(\n", + " scaleanchor=\"x\", scaleratio=1, range=[miny - 0.5, maxy + 0.5]\n", + " ),\n", + " )\n", + "\n", + " return fig\n", + "\n", + "\n", + "def _get_animation_controls():\n", + " \"\"\"Returns the animation control buttons for the figure.\"\"\"\n", + " return {\n", + " \"buttons\": [\n", + " {\n", + " \"args\": [\n", + " None,\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"fromcurrent\": True,\n", + " },\n", + " ],\n", + " \"label\": \"Play\",\n", + " \"method\": \"animate\",\n", + " },\n", + " ],\n", + " \"direction\": \"left\",\n", + " \"pad\": {\"r\": 10, \"t\": 87},\n", + " \"showactive\": False,\n", + " \"type\": \"buttons\",\n", + " \"x\": 0.1,\n", + " \"xanchor\": \"right\",\n", + " \"y\": 0,\n", + " \"yanchor\": \"top\",\n", + " }\n", + "\n", + "\n", + "def _get_slider_controls(steps):\n", + " \"\"\"Returns the slider controls for the figure.\"\"\"\n", + " return {\n", + " \"active\": 0,\n", + " \"yanchor\": \"top\",\n", + " \"xanchor\": \"left\",\n", + " \"currentvalue\": {\n", + " \"font\": {\"size\": 20},\n", + " \"prefix\": \"Frame:\",\n", + " \"visible\": True,\n", + " \"xanchor\": \"right\",\n", + " },\n", + " \"transition\": {\"duration\": 100, \"easing\": \"cubic-in-out\"},\n", + " \"pad\": {\"b\": 10, \"t\": 50},\n", + " \"len\": 0.9,\n", + " \"x\": 0.1,\n", + " \"y\": 0,\n", + " \"steps\": steps,\n", + " }\n", + "\n", + "\n", + "def _get_processed_frame_data(data_df, frame_num, max_agents):\n", + " \"\"\"Process frame data and ensure it matches the maximum agent count.\"\"\"\n", + " frame_data = data_df[data_df[\"frame\"] == frame_num]\n", + " agent_count = len(frame_data)\n", + " dummy_agent_data = {\"x\": 0, \"y\": 0, \"radius\": 0, \"speed\": DUMMY_SPEED}\n", + " while len(frame_data) < max_agents:\n", + " dummy_df = pd.DataFrame([dummy_agent_data])\n", + " frame_data = pd.concat([frame_data, dummy_df], ignore_index=True)\n", + " return frame_data, agent_count\n", + "\n", + "\n", + "def animate(\n", + " data: pedpy.TrajectoryData,\n", + " area: pedpy.WalkableArea,\n", + " *,\n", + " every_nth_frame: int = 50,\n", + " width: int = 800,\n", + " height: int = 800,\n", + " radius: float = 0.2,\n", + " title_note: str = \"\",\n", + "):\n", + " data_df = pedpy.compute_individual_speed(\n", + " traj_data=data,\n", + " frame_step=5,\n", + " speed_calculation=pedpy.SpeedCalculation.BORDER_SINGLE_SIDED,\n", + " )\n", + " data_df = data_df.merge(data.data, on=[\"id\", \"frame\"], how=\"left\")\n", + " data_df[\"radius\"] = radius\n", + " min_speed = data_df[\"speed\"].min()\n", + " max_speed = data_df[\"speed\"].max()\n", + " max_agents = data_df.groupby(\"frame\").size().max()\n", + " frames = []\n", + " steps = []\n", + " unique_frames = data_df[\"frame\"].unique()\n", + " selected_frames = unique_frames[::every_nth_frame]\n", + " geometry_traces = get_geometry_traces(area.polygon)\n", + " initial_frame_data = data_df[data_df[\"frame\"] == data_df[\"frame\"].min()]\n", + " initial_agent_count = len(initial_frame_data)\n", + " initial_shapes, initial_hover_trace, initial_arrows = get_shapes_for_frame(\n", + " initial_frame_data, min_speed, max_speed\n", + " )\n", + " color_map_trace = get_colormap(initial_frame_data, max_speed)\n", + " for frame_num in selected_frames:\n", + " frame_data, agent_count = _get_processed_frame_data(\n", + " data_df, frame_num, max_agents\n", + " )\n", + " shapes, hover_traces, arrows = get_shapes_for_frame(\n", + " frame_data, min_speed, max_speed\n", + " )\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {agent_count}\"\n", + " frame = go.Frame(\n", + " data=geometry_traces + hover_traces,\n", + " name=str(frame_num),\n", + " layout=go.Layout(\n", + " shapes=shapes + arrows,\n", + " title=title,\n", + " title_x=0.5,\n", + " ),\n", + " )\n", + " frames.append(frame)\n", + "\n", + " step = {\n", + " \"args\": [\n", + " [str(frame_num)],\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"mode\": \"immediate\",\n", + " \"transition\": {\"duration\": 500},\n", + " },\n", + " ],\n", + " \"label\": str(frame_num),\n", + " \"method\": \"animate\",\n", + " }\n", + " steps.append(step)\n", + "\n", + " return create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " color_map_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area.bounds,\n", + " width=width,\n", + " height=height,\n", + " title_note=title_note,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "078b5b68", + "metadata": {}, + "source": [ + "## Visualizing the Trajectories\n", + "\n", + "To visualize trajectories, we'll pull simulation data from the SQLite database and then employ a helper function to depict the agent movements. For subsequent analyses, we'll organize these trajectory files within a dictionary for easy access." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78299346", + "metadata": {}, + "outputs": [], + "source": [ + "agent_trajectories = {}\n", + "for scenario in scenarios:\n", + " scenario_name = scenario.__name__\n", + " agent_trajectories[scenario_name], walkable_area = read_sqlite_file(\n", + " f\"{scenario_name}.sqlite\"\n", + " )\n", + " animate(\n", + " agent_trajectories[scenario_name],\n", + " walkable_area,\n", + " title_note=f\"Scenario: {scenario_name}\",\n", + " ).show()\n", + " break" + ] + }, + { + "cell_type": "markdown", + "id": "cfc23599", + "metadata": {}, + "source": [ + "## Analysis of the results\n", + "\n", + "With three distinct evacuation simulations completed, it's time to dive into the outcomes. Let's start by visualizing the trajectories. This will give us an initial insight into the variations among the scenarios:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb1ca7af", + "metadata": {}, + "outputs": [], + "source": [ + "fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))\n", + "for name, ax in zip(agent_trajectories, axes):\n", + " pedpy.plot_trajectories(\n", + " traj=agent_trajectories[name],\n", + " walkable_area=walkable_area,\n", + " axes=ax,\n", + " traj_width=0.2,\n", + " traj_color=\"blue\",\n", + " )\n", + " x, y = Polygon(exit_polygon).exterior.xy\n", + " ax.fill(x, y, alpha=0.1, color=\"red\")\n", + " ax.plot(x, y, color=\"white\")\n", + " centroid = Polygon(exit_polygon).centroid\n", + " ax.text(\n", + " centroid.x, centroid.y, \"Exit\", ha=\"center\", va=\"center\", fontsize=10\n", + " )\n", + " ax.set_title(name)" + ] + }, + { + "cell_type": "markdown", + "id": "087e19f4", + "metadata": {}, + "source": [ + "## Compute density and speed for all three simulations" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b51bfcc4", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "# densities = {}\n", + "# for name in agent_trajectories:\n", + "# densities[name] = pedpy.compute_individual_voronoi_polygons(\n", + "# traj_data=agent_trajectories[name],\n", + "# walkable_area=walkable_area,\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07166076", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "# speeds = {}\n", + "# for name in agent_trajectories:\n", + "# speeds[name] = pedpy.compute_individual_speed(\n", + "# traj_data=agent_trajectories[name],\n", + "# frame_step=5,\n", + "# speed_calculation=pedpy.SpeedCalculation.BORDER_SINGLE_SIDED,\n", + "# )" + ] + }, + { + "cell_type": "markdown", + "id": "547cf352", + "metadata": {}, + "source": [ + "## Calculate profiles" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d5a77a0", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "# import warnings\n", + "# warnings.filterwarnings(\"ignore\")\n", + "# grid_size = 1 # this is big, and hould be smaller, but I can't wait any longer!\n", + "# density_profiles = {}\n", + "# speed_profiles = {}\n", + "# for name in agent_trajectories:\n", + "# density_profiles[name], speed_profiles[name] = pedpy.compute_profiles(\n", + "# individual_voronoi_speed_data=pd.merge(\n", + "# densities[name],\n", + "# speeds[name],\n", + "# on=[ID_COL, FRAME_COL],\n", + "# ),\n", + "# walkable_area=walkable_area.polygon,\n", + "# grid_size=grid_size,\n", + "# speed_method=pedpy.SpeedMethod.ARITHMETIC,\n", + "# )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "674ba793", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "# fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(20, 10))\n", + "# for name, ax in zip(agent_trajectories, axes):\n", + "# cm = pedpy.plot_profiles(\n", + "# walkable_area=walkable_area,\n", + "# profiles=density_profiles[name],\n", + "# axes=ax,\n", + "# label=\"$\\\\rho$ / 1/$m^2$\",\n", + "# vmax=2.,\n", + "# title=name,\n", + "# )\n", + "# fig.tight_layout(pad=2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "44eff42a", + "metadata": {}, + "outputs": [], + "source": [ + "from scipy import stats\n", + "from typing import Tuple\n", + "import numpy.typing as npt\n", + "\n", + "\n", + "def calculate_density_average_classic(\n", + " bounds: Tuple[float, float, float, float],\n", + " dx: float,\n", + " nframes: int,\n", + " X: npt.NDArray[np.float64],\n", + " Y: npt.NDArray[np.float64],\n", + ") -> npt.NDArray[np.float64]:\n", + " \"\"\"Calculate classical method\n", + "\n", + " Density = mean_time(N/A_i)\n", + " \"\"\"\n", + " geominX, geominY, geomaxX, geomaxY = bounds\n", + " xbins = np.arange(geominX, geomaxX + dx, dx)\n", + " ybins = np.arange(geominY, geomaxY + dx, dx)\n", + " area = dx * dx\n", + " ret = stats.binned_statistic_2d(\n", + " X,\n", + " Y,\n", + " None,\n", + " \"count\",\n", + " bins=[xbins, ybins],\n", + " )\n", + " return np.array(np.nan_to_num(ret.statistic.T)) / nframes / area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "294e40d5", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "from plotly.subplots import make_subplots\n", + "\n", + "\n", + "def plot_classical_density_profile(data, walkable_area, name, dx, rho_max):\n", + " vmax = rho_max\n", + " geominX, geominY, geomaxX, geomaxY = walkable_area.bounds\n", + " title = f\"{name}\"\n", + " fig = make_subplots(rows=1, cols=1, subplot_titles=([title]))\n", + " xbins = np.arange(geominX, geomaxX + dx, dx)\n", + " ybins = np.arange(geominY, geomaxY + dx, dx)\n", + " x, y = walkable_area.polygon.exterior.xy\n", + " x = list(x)\n", + " y = list(y)\n", + " heatmap = go.Heatmap(\n", + " x=xbins,\n", + " y=ybins,\n", + " z=data,\n", + " zmin=0,\n", + " zmax=rho_max,\n", + " name=title,\n", + " connectgaps=False,\n", + " zsmooth=None,\n", + " hovertemplate=\"Density: %{z:.2f}
\\nPos: (%{x:2f}: %{y:.2f}}\",\n", + " colorbar=dict(title=\"Density\"),\n", + " colorscale=\"Jet\",\n", + " )\n", + " fig.add_trace(heatmap)\n", + " # Geometry walls\n", + " line = go.Scatter(\n", + " x=x,\n", + " y=y,\n", + " mode=\"lines\",\n", + " name=\"wall\",\n", + " showlegend=False,\n", + " line=dict(\n", + " width=3,\n", + " color=\"white\",\n", + " ),\n", + " )\n", + " fig.add_trace(line)\n", + "\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1d1ffa32", + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "import math\n", + "\n", + "dx = 0.5\n", + "rho_max = -1\n", + "fig = make_subplots(\n", + " rows=1, cols=3, subplot_titles=(list(agent_trajectories.keys()))\n", + ")\n", + "for count, name in enumerate(agent_trajectories):\n", + " trajectories = agent_trajectories[name]\n", + " data = calculate_density_average_classic(\n", + " walkable_area.bounds,\n", + " dx,\n", + " nframes=trajectories.data[\"frame\"].max(),\n", + " X=trajectories.data[\"x\"],\n", + " Y=trajectories.data[\"y\"],\n", + " )\n", + " rho_max = max(np.max(data), rho_max)\n", + " ind_fig = plot_classical_density_profile(\n", + " data, walkable_area, name, dx, math.ceil(rho_max)\n", + " )\n", + " for trace in ind_fig.data:\n", + " fig.add_trace(trace, row=1, col=count + 1)\n", + "\n", + " fig.update_xaxes(title_text=\"X [m]\", row=1, col=count + 1)\n", + " fig.update_yaxes(title_text=\"Y [m]\", scaleanchor=\"x\", scaleratio=1)\n", + "fig" + ] + }, + { + "cell_type": "markdown", + "id": "5b857d6b", + "metadata": {}, + "source": [ + "## Analyzing Evacuation Duration\n", + "\n", + "To further understand our earlier observations, we compute the $N−t$ diagram, which shows when an agent crosses a designated measurement line. \n", + "We position this line near the exit and evaluate the $N−t$ curves for all three simulations, subsequently determining the respective evacuation durations.\n", + "\n", + "Note: It's essential to position the measurement line inside the simulation area, ensuring that agents **cross** it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d74cb6a1", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "measurement_line = pedpy.MeasurementLine([[-3, 4], [0, 4]])\n", + "fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10, 10))\n", + "colors = [\"blue\", \"red\", \"green\"]\n", + "for i, name in enumerate(agent_trajectories):\n", + " nt, _ = pedpy.compute_n_t(\n", + " traj_data=agent_trajectories[name],\n", + " measurement_line=measurement_line,\n", + " )\n", + " ax = pedpy.plot_nt(nt=nt, color=colors[i])\n", + " ax.lines[-1].set_label(name)\n", + " Time = np.max(nt[\"time\"])\n", + " print(\n", + " \"Name: {:<20} Evacuation time: {:<15}\".format(\n", + " name, \"{} seconds\".format(Time)\n", + " )\n", + " )\n", + "ax.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "0125c8ac", + "metadata": {}, + "source": [ + "## Findings and Conclusions\n", + "\n", + "The exploration of density profiles demonstrates notable variations in agent distribution, contingent upon the algorithm employed. The shortest path algorithm, aligning with our initial predictions, induces higher densities prior to encountering the corner. Conversely, the round-robin algorithm demonstrates a capacity to redistribute the jam, steering agents away from the corner bend and facilitating a more even spread around it.\n", + "\n", + "A vital observation from the simulations underscores the role of waypoint placement, particularly when positioned as circles, along with the discernment of their range. This cruciality not only impacts agent navigation but also influences the effectiveness of the deployed algorithm.\n", + "\n", + "## Future Considerations\n", + "\n", + "As the waypoint placement proves to be instrumental, ensuing studies or simulations might delve into optimizing these placements, exploring a range of scenarios and algorithmic strategies to discern optimal configurations for various contexts. Furthermore, additional research could investigate the scalability of these findings, examining the consistency of agent distribution patterns in scenarios with varying agent quantities, environmental layouts, and navigational complexities." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/motivation.ipynb b/notebooks/motivation.ipynb new file mode 100644 index 0000000000..a107d40edf --- /dev/null +++ b/notebooks/motivation.ipynb @@ -0,0 +1,737 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulation of a corridor with different motivations\n", + "\n", + "In this demonstration, we model a narrow corridor scenario featuring three distinct groups of agents. Among them, one group exhibits a higher level of motivation compared to the others.\n", + "\n", + "We employ the collision-free speed model to determine the speed of each agent. This speed is influenced by the desired speed, denoted as $v^0$, the agent's radius $r$, and the slope factor $T$.\n", + "\n", + "The varying motivation levels among the groups are represented by different $T$ values. The rationale for using $T$ to depict motivation is that highly motivated pedestrians, who are more aggressive in their movements, will quickly occupy any available space between them, correlating to a lower $T$ value. Conversely, less motivated pedestrians maintain a distance based on their walking speed, aligning with a higher $T$ value.\n", + "\n", + "To accentuate this dynamic, the first group of agents will decelerate a few seconds into the simulation. As a result, we'll notice that the second group, driven by high motivation, will swiftly close distances and overtake the first group as it reduces speed. In contrast, the third group, with average motivation, will decelerate upon nearing the slower agents, without attempting to pass them. \n", + "\n", + "# Setting up the geometry\n", + "\n", + "We will be using the a corridor 40 meters long and 4 meters wide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "from shapely import Polygon\n", + "import pathlib\n", + "import pandas as pd\n", + "import numpy as np\n", + "import jupedsim as jps\n", + "import pedpy\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"JuPedSim: {jps.__version__}\\nPedPy: {pedpy.__version__}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "corridor = [(-1, -1), (60, -1), (60, 5), (-1, 5)]\n", + "\n", + "areas = {}\n", + "areas[\"first\"] = Polygon([[0, 0], [5, 0], [5, 4], [0, 4]])\n", + "areas[\"second\"] = Polygon([[6, 0], [12, 0], [12, 4], [6, 4]])\n", + "areas[\"third\"] = Polygon([[18, 0], [24, 0], [24, 4], [18, 4]])\n", + "areas[\"exit\"] = Polygon([(56, 0), (59, 0), (59, 4), (56, 4)])\n", + "\n", + "walkable_area = pedpy.WalkableArea(corridor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=1)\n", + "ax.set_aspect(\"equal\")\n", + "_, ymin, _, ymax = walkable_area.bounds\n", + "ax.set_ylim(ymin - 2, ymax + 2)\n", + "pedpy.plot_walkable_area(walkable_area=walkable_area, axes=ax)\n", + "for name, area in areas.items():\n", + " x, y = area.exterior.xy\n", + " plt.fill(x, y, alpha=0.1)\n", + " plt.plot(x, y, color=\"white\")\n", + " centroid = Polygon(area).centroid\n", + " plt.text(\n", + " centroid.x, centroid.y, name, ha=\"center\", va=\"center\", fontsize=8\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Operational model\n", + "
\n", + "Now that the geometry is set, our subsequent task is to specify the model and its associated parameters. \n", + "For this demonstration, we'll employ the \"collision-free\" model. \n", + "However, since we are interested in two different motivation states, we will have to define two different time gaps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "T_normal = 1.3\n", + "T_motivation = 0.1\n", + "v0_normal = 1.5\n", + "v0_slow = 0.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note, that in JuPedSim the model parameter $T$ is called `time_gap`. \n", + "\n", + "The values $1.3\\, s$ and $0.1\\, s$ are chosen according to the paper [Rzezonka2022, Fig.5](https://doi.org/10.1098/rsos.211822). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting Up the Simulation Object\n", + "\n", + "Having established the model and geometry details, and combined with other parameters such as the time step $dt$, we can proceed to construct our simulation object as illustrated below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "trajectory_file = \"trajectories.sqlite\"\n", + "simulation = jps.Simulation(\n", + " dt=0.05,\n", + " model=jps.CollisionFreeSpeedModel(\n", + " strength_neighbor_repulsion=2.6,\n", + " range_neighbor_repulsion=0.1,\n", + " range_geometry_repulsion=0.05,\n", + " ),\n", + " geometry=walkable_area.polygon,\n", + " trajectory_writer=jps.SqliteTrajectoryWriter(\n", + " output_file=pathlib.Path(trajectory_file)\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Specifying Routing Details\n", + "\n", + "At this point, we'll provide basic routing instructions, guiding the agents to progress towards an exit point, which is in this case at the end of the corridor." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "exit_id = simulation.add_exit_stage(areas[\"exit\"])\n", + "journey_id = simulation.add_journey(jps.JourneyDescription([exit_id]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining and Distributing Agents\n", + "\n", + "Now, we'll position the agents and establish their attributes, leveraging previously mentioned parameters.\n", + "We will distribute three different groups in three different areas.\n", + "\n", + "- First area contains normally motivated agents. \n", + "- The second area contains motivated agents that are more likely to close gaps to each other.\n", + "- The third area contains normally motivated agents. These agents will reduce their desired speeds after some seconds.\n", + "\n", + "### Distribute normal agents in the first area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_agents_normal = 20\n", + "positions = jps.distribute_by_number(\n", + " polygon=Polygon(areas[\"first\"]),\n", + " number_of_agents=total_agents_normal,\n", + " distance_to_agents=0.4,\n", + " distance_to_polygon=0.4,\n", + " seed=45131502,\n", + ")\n", + "\n", + "for position in positions:\n", + " simulation.add_agent(\n", + " jps.CollisionFreeSpeedModelAgentParameters(\n", + " position=position,\n", + " v0=v0_normal,\n", + " time_gap=T_normal,\n", + " journey_id=journey_id,\n", + " stage_id=exit_id,\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Distribute motivated agents in the second area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_agents_motivated = 20\n", + "positions = jps.distribute_by_number(\n", + " polygon=Polygon(areas[\"second\"]),\n", + " number_of_agents=total_agents_motivated,\n", + " distance_to_agents=0.6,\n", + " distance_to_polygon=0.6,\n", + " seed=45131502,\n", + ")\n", + "for position in positions:\n", + " simulation.add_agent(\n", + " jps.CollisionFreeSpeedModelAgentParameters(\n", + " position=position,\n", + " v0=v0_normal,\n", + " time_gap=T_motivation,\n", + " journey_id=journey_id,\n", + " stage_id=exit_id,\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Distribute normal agents in the third area" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "total_agents_motivated_delay = 20\n", + "positions = jps.distribute_by_number(\n", + " polygon=Polygon(areas[\"third\"]),\n", + " number_of_agents=total_agents_motivated_delay,\n", + " distance_to_agents=0.8,\n", + " distance_to_polygon=0.4,\n", + " seed=45131502,\n", + ")\n", + "ids_third_group = set(\n", + " [\n", + " simulation.add_agent(\n", + " jps.CollisionFreeSpeedModelAgentParameters(\n", + " position=position,\n", + " v0=v0_normal,\n", + " time_gap=T_normal,\n", + " journey_id=journey_id,\n", + " stage_id=exit_id,\n", + " )\n", + " )\n", + " for position in positions\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Executing the Simulation\n", + "\n", + "With all components in place, we're set to initiate the simulation.\n", + "For this demonstration, the trajectories will be recorded in an sqlite database." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "while simulation.agent_count() > 0:\n", + " simulation.iterate()\n", + " if simulation.iteration_count() == 200:\n", + " for id in ids_third_group:\n", + " for agent in simulation.agents():\n", + " if agent.id == id:\n", + " agent.model.v0 = v0_slow" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing the Trajectories\n", + "\n", + "For trajectory visualization, we'll extract data from the sqlite database. A straightforward method for this is employing the jupedsim-visualizer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "import plotly.graph_objects as go\n", + "import plotly.express as px\n", + "import sqlite3\n", + "\n", + "DUMMY_SPEED = -1000\n", + "\n", + "\n", + "def read_sqlite_file(trajectory_file: str) -> pedpy.TrajectoryData:\n", + " with sqlite3.connect(trajectory_file) as con:\n", + " data = pd.read_sql_query(\n", + " \"select frame, id, pos_x as x, pos_y as y, ori_x as ox, ori_y as oy from trajectory_data\",\n", + " con,\n", + " )\n", + " fps = float(\n", + " con.cursor()\n", + " .execute(\"select value from metadata where key = 'fps'\")\n", + " .fetchone()[0]\n", + " )\n", + " walkable_area = (\n", + " con.cursor().execute(\"select wkt from geometry\").fetchone()[0]\n", + " )\n", + " return (\n", + " pedpy.TrajectoryData(data=data, frame_rate=fps),\n", + " pedpy.WalkableArea(walkable_area),\n", + " )\n", + "\n", + "\n", + "def speed_to_color(speed, min_speed, max_speed):\n", + " \"\"\"Map a speed value to a color using a colormap.\"\"\"\n", + " normalized_speed = (speed - min_speed) / (max_speed - min_speed)\n", + " r, g, b = plt.cm.jet_r(normalized_speed)[:3]\n", + " return f\"rgba({r*255:.0f}, {g*255:.0f}, {b*255:.0f}, 0.5)\"\n", + "\n", + "\n", + "def get_line_color(disk_color):\n", + " r, g, b, _ = [int(float(val)) for val in disk_color[5:-2].split(\",\")]\n", + " brightness = (r * 299 + g * 587 + b * 114) / 1000\n", + " return \"black\" if brightness > 127 else \"white\"\n", + "\n", + "\n", + "def create_orientation_line(row, line_length=0.2, color=\"black\"):\n", + " end_x = row[\"x\"] + line_length * row[\"ox\"]\n", + " end_y = row[\"y\"] + line_length * row[\"oy\"]\n", + "\n", + " orientation_line = go.layout.Shape(\n", + " type=\"line\",\n", + " x0=row[\"x\"],\n", + " y0=row[\"y\"],\n", + " x1=end_x,\n", + " y1=end_y,\n", + " line=dict(color=color, width=3),\n", + " )\n", + " return orientation_line\n", + "\n", + "\n", + "def get_geometry_traces(area):\n", + " geometry_traces = []\n", + " x, y = area.exterior.xy\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(x),\n", + " y=np.array(y),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Exterior\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " for inner in area.interiors:\n", + " xi, yi = zip(*inner.coords[:])\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(xi),\n", + " y=np.array(yi),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Obstacle\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " return geometry_traces\n", + "\n", + "\n", + "def get_colormap(frame_data, max_speed):\n", + " \"\"\"Utilize scatter plots with varying colors for each agent instead of individual shapes.\n", + "\n", + " This trace is only to incorporate a colorbar in the plot.\n", + " \"\"\"\n", + " scatter_trace = go.Scatter(\n", + " x=frame_data[\"x\"],\n", + " y=frame_data[\"y\"],\n", + " mode=\"markers\",\n", + " marker=dict(\n", + " size=frame_data[\"radius\"] * 2,\n", + " color=frame_data[\"speed\"],\n", + " colorscale=\"Jet_r\",\n", + " colorbar=dict(title=\"Speed [m/s]\"),\n", + " cmin=0,\n", + " cmax=max_speed,\n", + " ),\n", + " text=frame_data[\"speed\"],\n", + " showlegend=False,\n", + " hoverinfo=\"none\",\n", + " )\n", + "\n", + " return [scatter_trace]\n", + "\n", + "\n", + "def get_shapes_for_frame(frame_data, min_speed, max_speed):\n", + " def create_shape(row):\n", + " hover_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " text=[f\"ID: {row['id']}, Pos({row['x']:.2f},{row['y']:.2f})\"],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=1),\n", + " hoverinfo=\"text\",\n", + " showlegend=False,\n", + " )\n", + " if row[\"speed\"] == DUMMY_SPEED:\n", + " dummy_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=0),\n", + " hoverinfo=\"none\",\n", + " showlegend=False,\n", + " )\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line=dict(width=0),\n", + " fillcolor=\"rgba(255,255,255,0)\", # Transparent fill\n", + " ),\n", + " dummy_trace,\n", + " create_orientation_line(row, color=\"rgba(255,255,255,0)\"),\n", + " )\n", + " color = speed_to_color(row[\"speed\"], min_speed, max_speed)\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line_color=color,\n", + " fillcolor=color,\n", + " ),\n", + " hover_trace,\n", + " create_orientation_line(row, color=get_line_color(color)),\n", + " )\n", + "\n", + " results = frame_data.apply(create_shape, axis=1).tolist()\n", + " shapes = [res[0] for res in results]\n", + " hover_traces = [res[1] for res in results]\n", + " arrows = [res[2] for res in results]\n", + " return shapes, hover_traces, arrows\n", + "\n", + "\n", + "def create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " initial_scatter_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area_bounds,\n", + " width=800,\n", + " height=800,\n", + " title_note: str = \"\",\n", + "):\n", + " \"\"\"Creates a Plotly figure with animation capabilities.\n", + "\n", + " Returns:\n", + " go.Figure: A Plotly figure with animation capabilities.\n", + " \"\"\"\n", + "\n", + " minx, miny, maxx, maxy = area_bounds\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {initial_agent_count}\"\n", + " fig = go.Figure(\n", + " data=geometry_traces + initial_scatter_trace\n", + " # + hover_traces\n", + " + initial_hover_trace,\n", + " frames=frames,\n", + " layout=go.Layout(\n", + " shapes=initial_shapes + initial_arrows, title=title, title_x=0.5\n", + " ),\n", + " )\n", + " fig.update_layout(\n", + " updatemenus=[_get_animation_controls()],\n", + " sliders=[_get_slider_controls(steps)],\n", + " autosize=False,\n", + " width=width,\n", + " height=height,\n", + " xaxis=dict(range=[minx - 0.5, maxx + 0.5]),\n", + " yaxis=dict(\n", + " scaleanchor=\"x\", scaleratio=1, range=[miny - 0.5, maxy + 0.5]\n", + " ),\n", + " )\n", + "\n", + " return fig\n", + "\n", + "\n", + "def _get_animation_controls():\n", + " \"\"\"Returns the animation control buttons for the figure.\"\"\"\n", + " return {\n", + " \"buttons\": [\n", + " {\n", + " \"args\": [\n", + " None,\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"fromcurrent\": True,\n", + " },\n", + " ],\n", + " \"label\": \"Play\",\n", + " \"method\": \"animate\",\n", + " },\n", + " ],\n", + " \"direction\": \"left\",\n", + " \"pad\": {\"r\": 10, \"t\": 87},\n", + " \"showactive\": False,\n", + " \"type\": \"buttons\",\n", + " \"x\": 0.1,\n", + " \"xanchor\": \"right\",\n", + " \"y\": 0,\n", + " \"yanchor\": \"top\",\n", + " }\n", + "\n", + "\n", + "def _get_slider_controls(steps):\n", + " \"\"\"Returns the slider controls for the figure.\"\"\"\n", + " return {\n", + " \"active\": 0,\n", + " \"yanchor\": \"top\",\n", + " \"xanchor\": \"left\",\n", + " \"currentvalue\": {\n", + " \"font\": {\"size\": 20},\n", + " \"prefix\": \"Frame:\",\n", + " \"visible\": True,\n", + " \"xanchor\": \"right\",\n", + " },\n", + " \"transition\": {\"duration\": 100, \"easing\": \"cubic-in-out\"},\n", + " \"pad\": {\"b\": 10, \"t\": 50},\n", + " \"len\": 0.9,\n", + " \"x\": 0.1,\n", + " \"y\": 0,\n", + " \"steps\": steps,\n", + " }\n", + "\n", + "\n", + "def _get_processed_frame_data(data_df, frame_num, max_agents):\n", + " \"\"\"Process frame data and ensure it matches the maximum agent count.\"\"\"\n", + " frame_data = data_df[data_df[\"frame\"] == frame_num]\n", + " agent_count = len(frame_data)\n", + " dummy_agent_data = {\"x\": 0, \"y\": 0, \"radius\": 0, \"speed\": DUMMY_SPEED}\n", + " while len(frame_data) < max_agents:\n", + " dummy_df = pd.DataFrame([dummy_agent_data])\n", + " frame_data = pd.concat([frame_data, dummy_df], ignore_index=True)\n", + " return frame_data, agent_count\n", + "\n", + "\n", + "def animate(\n", + " data: pedpy.TrajectoryData,\n", + " area: pedpy.WalkableArea,\n", + " *,\n", + " every_nth_frame: int = 50,\n", + " width: int = 800,\n", + " height: int = 800,\n", + " radius: float = 0.2,\n", + " title_note: str = \"\",\n", + "):\n", + " data_df = pedpy.compute_individual_speed(\n", + " traj_data=data,\n", + " frame_step=5,\n", + " speed_calculation=pedpy.SpeedCalculation.BORDER_SINGLE_SIDED,\n", + " )\n", + " data_df = data_df.merge(data.data, on=[\"id\", \"frame\"], how=\"left\")\n", + " data_df[\"radius\"] = radius\n", + " min_speed = data_df[\"speed\"].min()\n", + " max_speed = data_df[\"speed\"].max()\n", + " max_agents = data_df.groupby(\"frame\").size().max()\n", + " frames = []\n", + " steps = []\n", + " unique_frames = data_df[\"frame\"].unique()\n", + " selected_frames = unique_frames[::every_nth_frame]\n", + " geometry_traces = get_geometry_traces(area.polygon)\n", + " initial_frame_data = data_df[data_df[\"frame\"] == data_df[\"frame\"].min()]\n", + " initial_agent_count = len(initial_frame_data)\n", + " initial_shapes, initial_hover_trace, initial_arrows = get_shapes_for_frame(\n", + " initial_frame_data, min_speed, max_speed\n", + " )\n", + " color_map_trace = get_colormap(initial_frame_data, max_speed)\n", + " for frame_num in selected_frames:\n", + " frame_data, agent_count = _get_processed_frame_data(\n", + " data_df, frame_num, max_agents\n", + " )\n", + " shapes, hover_traces, arrows = get_shapes_for_frame(\n", + " frame_data, min_speed, max_speed\n", + " )\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {agent_count}\"\n", + " frame = go.Frame(\n", + " data=geometry_traces + hover_traces,\n", + " name=str(frame_num),\n", + " layout=go.Layout(\n", + " shapes=shapes + arrows,\n", + " title=title,\n", + " title_x=0.5,\n", + " ),\n", + " )\n", + " frames.append(frame)\n", + "\n", + " step = {\n", + " \"args\": [\n", + " [str(frame_num)],\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"mode\": \"immediate\",\n", + " \"transition\": {\"duration\": 500},\n", + " },\n", + " ],\n", + " \"label\": str(frame_num),\n", + " \"method\": \"animate\",\n", + " }\n", + " steps.append(step)\n", + "\n", + " return create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " color_map_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area.bounds,\n", + " width=width,\n", + " height=height,\n", + " title_note=title_note,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "agent_trajectories, walkable_area = read_sqlite_file(trajectory_file)\n", + "animate(\n", + " agent_trajectories,\n", + " walkable_area,\n", + " every_nth_frame=5,\n", + " width=1000,\n", + " height=500,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Notes and Comments\n", + "\n", + "It's noticeable that members of the second group tend to draw nearer to each other compared to those in the first group, primarily attributed to their lower $T$ values. As the third group begins to decelerate after a while, due to an adjustment in the target speed $v_0$, the second group seizes this opportunity to bridge the distance and surpass them. \n", + "\n", + "Conversely, the first group maintains a consistent pace and doesn't attempt to overtake the now-lagging third group." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/routing.ipynb b/notebooks/routing.ipynb new file mode 100644 index 0000000000..38d35d6ed8 --- /dev/null +++ b/notebooks/routing.ipynb @@ -0,0 +1,795 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulation of a room following different routes\n", + "\n", + "In this demonstration, we'll be simulating a room with a single exit. \n", + "We'll place two distinct groups of agents in a designated zone within the room. \n", + "Each group will be assigned a specific route to reach the exit: \n", + "one group will follow the shortest path, while the other will take a longer detour.\n", + "\n", + "To chart these paths, we'll use several waypoints, creating unique journeys for the agents to navigate.\n", + "\n", + "## Configuring the Room Layout\n", + "\n", + "For our simulation, we'll utilize a square-shaped room with dimensions of 20 meters by 20 meters. \n", + "Inside, obstacles will be strategically placed to segment the room and guide both agent groups.\n", + "\n", + "**Note** that the obstacles can not intersect the geometry. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "import pathlib\n", + "import pandas as pd\n", + "import numpy as np\n", + "import jupedsim as jps\n", + "import shapely\n", + "from shapely import Polygon\n", + "import pedpy\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.patches import Circle\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"JuPedSim: {jps.__version__}\\nPedPy: {pedpy.__version__}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "complete_area = Polygon(\n", + " [\n", + " (0, 0),\n", + " (0, 20),\n", + " (20, 20),\n", + " (20, 0),\n", + " ]\n", + ")\n", + "obstacles = [\n", + " Polygon(\n", + " [\n", + " (5, 0.0),\n", + " (5, 16),\n", + " (5.2, 16),\n", + " (5.2, 0.0),\n", + " ]\n", + " ),\n", + " Polygon(\n", + " [(15, 19), (15, 5), (7.2, 5), (7.2, 4.8), (15.2, 4.8), (15.2, 19)]\n", + " ),\n", + "]\n", + "\n", + "exit_polygon = [(19, 19), (20, 19), (20, 20), (19, 20)]\n", + "waypoints = [([3, 19], 3), ([7, 19], 2), ([7, 2.5], 2), ([17.5, 2.5], 2)]\n", + "distribution_polygon = Polygon([[0, 0], [5, 0], [5, 10], [0, 10]])\n", + "obstacle = shapely.union_all(obstacles)\n", + "walkable_area = pedpy.WalkableArea(shapely.difference(complete_area, obstacle))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(nrows=1, ncols=1)\n", + "ax.set_aspect(\"equal\")\n", + "pedpy.plot_walkable_area(walkable_area=walkable_area, axes=ax)\n", + "\n", + "for idx, (waypoint, distance) in enumerate(waypoints):\n", + " ax.plot(waypoint[0], waypoint[1], \"ro\")\n", + " ax.annotate(\n", + " f\"WP {idx+1}\",\n", + " (waypoint[0], waypoint[1]),\n", + " textcoords=\"offset points\",\n", + " xytext=(10, -15),\n", + " ha=\"center\",\n", + " )\n", + " circle = Circle(\n", + " (waypoint[0], waypoint[1]), distance, fc=\"red\", ec=\"red\", alpha=0.1\n", + " )\n", + " ax.add_patch(circle)\n", + "\n", + "x, y = Polygon(exit_polygon).exterior.xy\n", + "plt.fill(x, y, alpha=0.1, color=\"orange\")\n", + "centroid = Polygon(exit_polygon).centroid\n", + "plt.text(centroid.x, centroid.y, \"Exit\", ha=\"center\", va=\"center\", fontsize=8)\n", + "\n", + "x, y = distribution_polygon.exterior.xy\n", + "plt.fill(x, y, alpha=0.1, color=\"blue\")\n", + "centroid = distribution_polygon.centroid\n", + "plt.text(\n", + " centroid.x, centroid.y, \"Start\", ha=\"center\", va=\"center\", fontsize=10\n", + ");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Configuration of Simulation Scenarios\n", + "\n", + "With our room geometry in place, the next step is to define the simulation object, the operational model and its corresponding parameters. In this demonstration, we'll use the \"collision-free\" model.\n", + "\n", + "We'll outline an array of percentage values, allowing us to adjust the sizes of the two groups across multiple simulations. As a result, creating distinct simulation objects for each scenario becomes essential." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "simulations = {}\n", + "percentages = [0, 20, 40, 50, 60, 70, 100]\n", + "total_agents = 100\n", + "for percentage in percentages:\n", + " trajectory_file = f\"trajectories_percentage_{percentage}.sqlite\"\n", + " simulation = jps.Simulation(\n", + " dt=0.05,\n", + " model=jps.CollisionFreeSpeedModel(strength_neighbor_repulsion=2.6, range_neighbor_repulsion=0.1, range_geometry_repulsion=0.05),\n", + " geometry=walkable_area.polygon,\n", + " trajectory_writer=jps.SqliteTrajectoryWriter(\n", + " output_file=pathlib.Path(trajectory_file),\n", + " ),\n", + " )\n", + " simulations[percentage] = simulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Outlining Agent Journeys\n", + "\n", + "Having established the base configurations, it's time to outline the routes our agents will take. \n", + "We've designated two distinct pathways:\n", + "\n", + "- The first route is a direct path, guiding agents along the shortest distance to the exit.\n", + "- The second route, in contrast, takes agents on a more extended journey, guiding them along the longest distance to reach the same exit.\n", + "\n", + "These variations in routing are designed to showcase how agents navigate and respond under different evacuation strategies." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def set_journeys(simulation):\n", + " exit_id = simulation.add_exit_stage(exit_polygon)\n", + " waypoint_ids = []\n", + " for waypoint, distance in waypoints:\n", + " waypoint_ids.append(simulation.add_waypoint_stage(waypoint, distance))\n", + "\n", + " long_journey = jps.JourneyDescription([*waypoint_ids[:], exit_id])\n", + " for idx, waypoint in enumerate(waypoint_ids):\n", + " next_waypoint = (\n", + " exit_id if idx == len(waypoint_ids) - 1 else waypoint_ids[idx + 1]\n", + " )\n", + " long_journey.set_transition_for_stage(\n", + " waypoint, jps.Transition.create_fixed_transition(next_waypoint)\n", + " )\n", + "\n", + " short_journey = jps.JourneyDescription([waypoint_ids[0], exit_id])\n", + " short_journey.set_transition_for_stage(\n", + " waypoint_ids[0], jps.Transition.create_fixed_transition(exit_id)\n", + " )\n", + "\n", + " long_journey_id = simulation.add_journey(long_journey)\n", + " short_journey_id = simulation.add_journey(short_journey)\n", + " return short_journey_id, long_journey_id, waypoint_ids[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Allocation and Configuration of Agents\n", + "\n", + "With our environment set up, it's time to introduce and configure the agents, utilizing the parameters we've previously discussed. We're going to place agents in two distinct groups, the proportion of which will be determined by the specified percentage parameter.\n", + "\n", + "- The first group will be directed to take the longer route to the exit.\n", + "- Conversely, the second group will be guided along the shortest path to reach the exit.\n", + "\n", + "By doing so, we aim to observe and analyze the behaviors and dynamics between these two groups under varying evacuation strategies." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "positions = jps.distribute_by_number(\n", + " polygon=distribution_polygon,\n", + " number_of_agents=total_agents,\n", + " distance_to_agents=0.4,\n", + " distance_to_polygon=0.7,\n", + " seed=45131502,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Reminder:**\n", + "\n", + "Given that the journey operates as a graph, it's essential to designate the initial target for the agents by setting the `stage_id`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Launching the Simulations\n", + "\n", + "Having configured our environment, agents, and routes, we are now poised to set the simulation into motion. For the purposes of this demonstration, agent trajectories throughout the simulation will be systematically captured and stored within an SQLite database. This will allow for a detailed post-analysis of agent behaviors and movement patterns.\n", + "\n", + "**Note**\n", + "Given that we've set the time step at $dt=0.05$ seconds and aim to restrict the simulation duration to approximately 2 minutes, we will cap the number of iterations per simulation to 3000." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "def print_header(scenario_name: str):\n", + " line_length = 50\n", + " header = f\" SIMULATION - {scenario_name} \"\n", + " left_padding = (line_length - len(header)) // 2\n", + " right_padding = line_length - len(header) - left_padding\n", + "\n", + " print(\"=\" * line_length)\n", + " print(\" \" * left_padding + header + \" \" * right_padding)\n", + " print(\"=\" * line_length)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "trajectory_files = {}\n", + "for percentage, simulation in simulations.items():\n", + " print_header(f\"percentage {percentage}%\")\n", + " short_journey_id, long_journey_id, first_waypoint_id = set_journeys(\n", + " simulation\n", + " )\n", + "\n", + " num_items = int(len(positions) * (percentage / 100.0))\n", + "\n", + " for position in positions[num_items:]:\n", + " simulation.add_agent(jps.CollisionFreeSpeedModelAgentParameters(position=position, journey_id=short_journey_id, stage_id=first_waypoint_id))\n", + "\n", + " for position in positions[:num_items]:\n", + " simulation.add_agent(jps.CollisionFreeSpeedModelAgentParameters(position=position, journey_id=long_journey_id, stage_id=first_waypoint_id))\n", + "\n", + " while simulation.agent_count() > 0 and simulation.iteration_count() < 3000:\n", + " simulation.iterate()\n", + "\n", + " trajectory_file = f\"trajectories_percentage_{percentage}.sqlite\"\n", + " trajectory_files[percentage] = trajectory_file\n", + " # can I get trajectory_file from the simulation object?\n", + " print(\n", + " f\"> Simulation completed after {simulation.iteration_count()} iterations.\\n\"\n", + " f\"> Output File: {trajectory_file}\\n\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing Agent Pathways\n", + "\n", + "To gain insights into the movement patterns of our agents, we'll visualize their trajectories. Data for this endeavor will be pulled directly from the SQLite database we've previously populated. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "import plotly.graph_objects as go\n", + "import plotly.express as px\n", + "import sqlite3\n", + "\n", + "DUMMY_SPEED = -1000\n", + "\n", + "\n", + "def read_sqlite_file(trajectory_file: str) -> pedpy.TrajectoryData:\n", + " with sqlite3.connect(trajectory_file) as con:\n", + " data = pd.read_sql_query(\n", + " \"select frame, id, pos_x as x, pos_y as y, ori_x as ox, ori_y as oy from trajectory_data\",\n", + " con,\n", + " )\n", + " fps = float(\n", + " con.cursor()\n", + " .execute(\"select value from metadata where key = 'fps'\")\n", + " .fetchone()[0]\n", + " )\n", + " walkable_area = (\n", + " con.cursor().execute(\"select wkt from geometry\").fetchone()[0]\n", + " )\n", + " return (\n", + " pedpy.TrajectoryData(data=data, frame_rate=fps),\n", + " pedpy.WalkableArea(walkable_area),\n", + " )\n", + "\n", + "\n", + "def speed_to_color(speed, min_speed, max_speed):\n", + " \"\"\"Map a speed value to a color using a colormap.\"\"\"\n", + " normalized_speed = (speed - min_speed) / (max_speed - min_speed)\n", + " r, g, b = plt.cm.jet_r(normalized_speed)[:3]\n", + " return f\"rgba({r*255:.0f}, {g*255:.0f}, {b*255:.0f}, 0.5)\"\n", + "\n", + "\n", + "def get_line_color(disk_color):\n", + " r, g, b, _ = [int(float(val)) for val in disk_color[5:-2].split(\",\")]\n", + " brightness = (r * 299 + g * 587 + b * 114) / 1000\n", + " return \"black\" if brightness > 127 else \"white\"\n", + "\n", + "\n", + "def create_orientation_line(row, line_length=0.2, color=\"black\"):\n", + " end_x = row[\"x\"] + line_length * row[\"ox\"]\n", + " end_y = row[\"y\"] + line_length * row[\"oy\"]\n", + "\n", + " orientation_line = go.layout.Shape(\n", + " type=\"line\",\n", + " x0=row[\"x\"],\n", + " y0=row[\"y\"],\n", + " x1=end_x,\n", + " y1=end_y,\n", + " line=dict(color=color, width=3),\n", + " )\n", + " return orientation_line\n", + "\n", + "\n", + "def get_geometry_traces(area):\n", + " geometry_traces = []\n", + " x, y = area.exterior.xy\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(x),\n", + " y=np.array(y),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Exterior\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " for inner in area.interiors:\n", + " xi, yi = zip(*inner.coords[:])\n", + " geometry_traces.append(\n", + " go.Scatter(\n", + " x=np.array(xi),\n", + " y=np.array(yi),\n", + " mode=\"lines\",\n", + " line={\"color\": \"grey\"},\n", + " showlegend=False,\n", + " name=\"Obstacle\",\n", + " hoverinfo=\"name\",\n", + " )\n", + " )\n", + " return geometry_traces\n", + "\n", + "\n", + "def get_colormap(frame_data, max_speed):\n", + " \"\"\"Utilize scatter plots with varying colors for each agent instead of individual shapes.\n", + "\n", + " This trace is only to incorporate a colorbar in the plot.\n", + " \"\"\"\n", + " scatter_trace = go.Scatter(\n", + " x=frame_data[\"x\"],\n", + " y=frame_data[\"y\"],\n", + " mode=\"markers\",\n", + " marker=dict(\n", + " size=frame_data[\"radius\"] * 2,\n", + " color=frame_data[\"speed\"],\n", + " colorscale=\"Jet_r\",\n", + " colorbar=dict(title=\"Speed [m/s]\"),\n", + " cmin=0,\n", + " cmax=max_speed,\n", + " ),\n", + " text=frame_data[\"speed\"],\n", + " showlegend=False,\n", + " hoverinfo=\"none\",\n", + " )\n", + "\n", + " return [scatter_trace]\n", + "\n", + "\n", + "def get_shapes_for_frame(frame_data, min_speed, max_speed):\n", + " def create_shape(row):\n", + " hover_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " text=[f\"ID: {row['id']}, Pos({row['x']:.2f},{row['y']:.2f})\"],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=1),\n", + " hoverinfo=\"text\",\n", + " showlegend=False,\n", + " )\n", + " if row[\"speed\"] == DUMMY_SPEED:\n", + " dummy_trace = go.Scatter(\n", + " x=[row[\"x\"]],\n", + " y=[row[\"y\"]],\n", + " mode=\"markers\",\n", + " marker=dict(size=1, opacity=0),\n", + " hoverinfo=\"none\",\n", + " showlegend=False,\n", + " )\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line=dict(width=0),\n", + " fillcolor=\"rgba(255,255,255,0)\", # Transparent fill\n", + " ),\n", + " dummy_trace,\n", + " create_orientation_line(row, color=\"rgba(255,255,255,0)\"),\n", + " )\n", + " color = speed_to_color(row[\"speed\"], min_speed, max_speed)\n", + " return (\n", + " go.layout.Shape(\n", + " type=\"circle\",\n", + " xref=\"x\",\n", + " yref=\"y\",\n", + " x0=row[\"x\"] - row[\"radius\"],\n", + " y0=row[\"y\"] - row[\"radius\"],\n", + " x1=row[\"x\"] + row[\"radius\"],\n", + " y1=row[\"y\"] + row[\"radius\"],\n", + " line_color=color,\n", + " fillcolor=color,\n", + " ),\n", + " hover_trace,\n", + " create_orientation_line(row, color=get_line_color(color)),\n", + " )\n", + "\n", + " results = frame_data.apply(create_shape, axis=1).tolist()\n", + " shapes = [res[0] for res in results]\n", + " hover_traces = [res[1] for res in results]\n", + " arrows = [res[2] for res in results]\n", + " return shapes, hover_traces, arrows\n", + "\n", + "\n", + "def create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " initial_scatter_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area_bounds,\n", + " width=800,\n", + " height=800,\n", + " title_note: str = \"\",\n", + "):\n", + " \"\"\"Creates a Plotly figure with animation capabilities.\n", + "\n", + " Returns:\n", + " go.Figure: A Plotly figure with animation capabilities.\n", + " \"\"\"\n", + "\n", + " minx, miny, maxx, maxy = area_bounds\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {initial_agent_count}\"\n", + " fig = go.Figure(\n", + " data=geometry_traces + initial_scatter_trace\n", + " # + hover_traces\n", + " + initial_hover_trace,\n", + " frames=frames,\n", + " layout=go.Layout(\n", + " shapes=initial_shapes + initial_arrows, title=title, title_x=0.5\n", + " ),\n", + " )\n", + " fig.update_layout(\n", + " updatemenus=[_get_animation_controls()],\n", + " sliders=[_get_slider_controls(steps)],\n", + " autosize=False,\n", + " width=width,\n", + " height=height,\n", + " xaxis=dict(range=[minx - 0.5, maxx + 0.5]),\n", + " yaxis=dict(\n", + " scaleanchor=\"x\", scaleratio=1, range=[miny - 0.5, maxy + 0.5]\n", + " ),\n", + " )\n", + "\n", + " return fig\n", + "\n", + "\n", + "def _get_animation_controls():\n", + " \"\"\"Returns the animation control buttons for the figure.\"\"\"\n", + " return {\n", + " \"buttons\": [\n", + " {\n", + " \"args\": [\n", + " None,\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"fromcurrent\": True,\n", + " },\n", + " ],\n", + " \"label\": \"Play\",\n", + " \"method\": \"animate\",\n", + " },\n", + " ],\n", + " \"direction\": \"left\",\n", + " \"pad\": {\"r\": 10, \"t\": 87},\n", + " \"showactive\": False,\n", + " \"type\": \"buttons\",\n", + " \"x\": 0.1,\n", + " \"xanchor\": \"right\",\n", + " \"y\": 0,\n", + " \"yanchor\": \"top\",\n", + " }\n", + "\n", + "\n", + "def _get_slider_controls(steps):\n", + " \"\"\"Returns the slider controls for the figure.\"\"\"\n", + " return {\n", + " \"active\": 0,\n", + " \"yanchor\": \"top\",\n", + " \"xanchor\": \"left\",\n", + " \"currentvalue\": {\n", + " \"font\": {\"size\": 20},\n", + " \"prefix\": \"Frame:\",\n", + " \"visible\": True,\n", + " \"xanchor\": \"right\",\n", + " },\n", + " \"transition\": {\"duration\": 100, \"easing\": \"cubic-in-out\"},\n", + " \"pad\": {\"b\": 10, \"t\": 50},\n", + " \"len\": 0.9,\n", + " \"x\": 0.1,\n", + " \"y\": 0,\n", + " \"steps\": steps,\n", + " }\n", + "\n", + "\n", + "def _get_processed_frame_data(data_df, frame_num, max_agents):\n", + " \"\"\"Process frame data and ensure it matches the maximum agent count.\"\"\"\n", + " frame_data = data_df[data_df[\"frame\"] == frame_num]\n", + " agent_count = len(frame_data)\n", + " dummy_agent_data = {\"x\": 0, \"y\": 0, \"radius\": 0, \"speed\": DUMMY_SPEED}\n", + " while len(frame_data) < max_agents:\n", + " dummy_df = pd.DataFrame([dummy_agent_data])\n", + " frame_data = pd.concat([frame_data, dummy_df], ignore_index=True)\n", + " return frame_data, agent_count\n", + "\n", + "\n", + "def animate(\n", + " data: pedpy.TrajectoryData,\n", + " area: pedpy.WalkableArea,\n", + " *,\n", + " every_nth_frame: int = 50,\n", + " width: int = 800,\n", + " height: int = 800,\n", + " radius: float = 0.2,\n", + " title_note: str = \"\",\n", + "):\n", + " data_df = pedpy.compute_individual_speed(traj_data=data, frame_step=5)\n", + " data_df = data_df.merge(data.data, on=[\"id\", \"frame\"], how=\"left\")\n", + " data_df[\"radius\"] = radius\n", + " min_speed = data_df[\"speed\"].min()\n", + " max_speed = data_df[\"speed\"].max()\n", + " max_agents = data_df.groupby(\"frame\").size().max()\n", + " frames = []\n", + " steps = []\n", + " unique_frames = data_df[\"frame\"].unique()\n", + " selected_frames = unique_frames[::every_nth_frame]\n", + " geometry_traces = get_geometry_traces(area.polygon)\n", + " initial_frame_data = data_df[data_df[\"frame\"] == data_df[\"frame\"].min()]\n", + " initial_agent_count = len(initial_frame_data)\n", + " initial_shapes, initial_hover_trace, initial_arrows = get_shapes_for_frame(\n", + " initial_frame_data, min_speed, max_speed\n", + " )\n", + " color_map_trace = get_colormap(initial_frame_data, max_speed)\n", + " for frame_num in selected_frames[1:]:\n", + " frame_data, agent_count = _get_processed_frame_data(\n", + " data_df, frame_num, max_agents\n", + " )\n", + " shapes, hover_traces, arrows = get_shapes_for_frame(\n", + " frame_data, min_speed, max_speed\n", + " )\n", + " title = f\"{title_note + ' | ' if title_note else ''}Number of Agents: {agent_count}\"\n", + " frame = go.Frame(\n", + " data=geometry_traces + hover_traces,\n", + " name=str(frame_num),\n", + " layout=go.Layout(\n", + " shapes=shapes + arrows,\n", + " title=title,\n", + " title_x=0.5,\n", + " ),\n", + " )\n", + " frames.append(frame)\n", + "\n", + " step = {\n", + " \"args\": [\n", + " [str(frame_num)],\n", + " {\n", + " \"frame\": {\"duration\": 100, \"redraw\": True},\n", + " \"mode\": \"immediate\",\n", + " \"transition\": {\"duration\": 500},\n", + " },\n", + " ],\n", + " \"label\": str(frame_num),\n", + " \"method\": \"animate\",\n", + " }\n", + " steps.append(step)\n", + "\n", + " return create_fig(\n", + " initial_agent_count,\n", + " initial_shapes,\n", + " initial_arrows,\n", + " initial_hover_trace,\n", + " color_map_trace,\n", + " geometry_traces,\n", + " frames,\n", + " steps,\n", + " area.bounds,\n", + " width=width,\n", + " height=height,\n", + " title_note=title_note,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "agent_trajectories = {}\n", + "for percentage in percentages:\n", + " trajectory_file = trajectory_files[percentage]\n", + " agent_trajectories[percentage], walkable_area = read_sqlite_file(\n", + " trajectory_file\n", + " )\n", + " animate(\n", + " agent_trajectories[percentage],\n", + " walkable_area,\n", + " title_note=f\"Percentage: {percentage}%\",\n", + " ).show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "evac_times = []\n", + "for percentage, traj in agent_trajectories.items():\n", + " t_evac = traj.data[\"frame\"].max() / traj.frame_rate\n", + " evac_times.append(t_evac)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "hide-input" + ] + }, + "outputs": [], + "source": [ + "fig = go.Figure()\n", + "\n", + "fig.add_trace(\n", + " go.Scatter(\n", + " x=list(agent_trajectories.keys()),\n", + " y=evac_times,\n", + " marker=dict(size=10),\n", + " mode=\"lines+markers\",\n", + " name=\"Evacuation Times\",\n", + " )\n", + ")\n", + "\n", + "fig.update_layout(\n", + " title=\"Evacuation Times vs. Percentages\",\n", + " xaxis_title=\"Percentage %\",\n", + " yaxis_title=\"Evacuation Time (s)\",\n", + ")\n", + "\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary and Discussion\n", + "\n", + "In our simulated scenario, agents are presented with two distinct paths: a direct route that is shorter but prone to congestion and a detour. \n", + "Given the high volume of individuals arriving at door 1, relying solely on one door's capacity proves impractical.\n", + "\n", + "Although the alternate path through door 2 may be considerably longer in distance, it becomes crucial to utilize both doors in order to alleviate congestion and reduce waiting times at door 1.\n", + "The findings from our simulation align with this rationale. \n", + "\n", + "To optimize both average and peak arrival times, approximately 40% of individuals should choose the longer journey via door 2, which is in accordance with the results reported in this [paper](https://collective-dynamics.eu/index.php/cod/article/view/A24).\n", + "This strategic distribution ensures smoother flow dynamics and contributes towards enhancing evacuation efficiency.\n", + "\n", + "Note, that in we used a fixed seed number to distribute the agents. To get a reliable result for this specific scenario, one should repeat the simulations many times for the sake of some statistical relevance.\n", + "\n", + "Please note that in the section [Allocation and Configuration of Agents](#distribution), we employed a consistent seed number for agent distribution. For dependable outcomes, it's advised to run the simulations multiple times to ensure statistical significance. Morover, more percentage values between 0 and 100 will enhance the quality of the results.\n", + "\n", + "\n", + "## Troubleshooting\n", + "\n", + "On certain occasions, improper configuration of the simulation, such as setting an agent's desired speed to 0 m/s, can cause the simulation loop to run indefinitely. If this happens, it's recommended to modify the loop condition. \n", + "\n", + "Instead of allowing it to run without constraints, consider limiting its duration using `simulation.iteration_count()`." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}