Skip to content

Instantly share code, notes, and snippets.

@Chachay
Created February 26, 2022 16:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Chachay/42b0bdfc8e0d4dba20fbad2444e24658 to your computer and use it in GitHub Desktop.
Save Chachay/42b0bdfc8e0d4dba20fbad2444e24658 to your computer and use it in GitHub Desktop.
Ray Cast benchmark
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"import time\n",
"import numpy as np\n",
"from numba import jit\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import Box2D\n",
"from Box2D.b2 import (edgeShape, fixtureDef)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def get_intersection(o, a, b, c):\n",
" ob = b - o\n",
" oc = c - o\n",
" ba = a - b\n",
"\n",
" det = ba[0] * -oc[1] - ba[1] * -oc[0]\n",
"\n",
" if det == 0.0:\n",
" return c\n",
"\n",
" s = - (-oc[1] * ob[0] + oc[0] * ob[1]) / det\n",
" t = - (-ba[1] * ob[0] + ba[0] * ob[1]) / det\n",
"\n",
" if 0 < s and s < 1.0 and 0 < t and t < 1.0:\n",
" return t*oc + o \n",
" return c"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from numba import NumbaDeprecationWarning, NumbaPendingDeprecationWarning\n",
"import warnings\n",
"\n",
"warnings.simplefilter('ignore', category=NumbaDeprecationWarning)\n",
"warnings.simplefilter('ignore', category=NumbaPendingDeprecationWarning)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1., 1.])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"@jit\n",
"def get_intersection_numba(o, a, b, c):\n",
" ob = b - o\n",
" oc = c - o\n",
" ba = a - b\n",
"\n",
" det = ba[0] * -oc[1] - ba[1] * -oc[0]\n",
"\n",
" if det == 0.0:\n",
" return c\n",
"\n",
" s = - (-oc[1] * ob[0] + oc[0] * ob[1]) / det\n",
" t = - (-ba[1] * ob[0] + ba[0] * ob[1]) / det\n",
"\n",
" if 0 < s and s < 1.0 and 0 < t and t < 1.0:\n",
" return t*oc + o \n",
"\n",
" return c\n",
"\n",
"# run jit\n",
"get_intersection_numba(\n",
" np.array([0.,1.]),\n",
" np.array([1.,0.]),\n",
" np.array([1.,2.]),\n",
" np.array([2.,1.])\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def generate_benchmark_world(n_walls, r_walls = 3):\n",
" # シミュレーション世界\n",
" height = 300\n",
" width = 600\n",
"\n",
" # ロボットの定義\n",
" o = np.array([50., 150.])\n",
" ray_l = 200\n",
" ray_n = 9\n",
" ray_angles = [math.pi/2 * i / (ray_n - 1.) - math.pi/4 for i in range(ray_n)]\n",
" ray_ends = o + ray_l * np.array([[math.cos(theta), math.sin(theta)] for theta in ray_angles])\n",
"\n",
" # 壁の座標系\n",
" # 3 x 100\n",
" # ┌─────────────────────────────┐\n",
" # │ │ │ │ ... │ │ │\n",
" # │ │\n",
" # │ @------ │ │ │ ... │ │ │\n",
" # │ │\n",
" # │ │ │ │ ... │ │ │\n",
" # └─────────────────────────────┘\n",
" # \n",
" wall_start = 100.\n",
" wall_spans = (width - wall_start)/n_walls\n",
" wall_margin_sum = 60.\n",
" wall_height = (height - wall_margin_sum)/r_walls\n",
" wall_margin_y = 60./(r_walls + 1)\n",
" walls = []\n",
" for i in range(n_walls):\n",
" for j in range(r_walls):\n",
" walls.append([\n",
" [wall_start + wall_spans*i, j*wall_height+(j+1)*wall_margin_y],\n",
" [wall_start + wall_spans*i, (j+1)*wall_height+(j+1)*wall_margin_y]\n",
" ])\n",
"\n",
" world = Box2D.b2World()\n",
" walls_2d = [fixtureDef(\n",
" shape = edgeShape(vertices= [(w[0][0], w[0][1]), (w[1][0], w[1][1])])\n",
" ) for w in walls]\n",
" for f in walls_2d:\n",
" world.CreateStaticBody(fixtures = f)\n",
" #world.CreateStaticBody(fixtures = walls_2d)\n",
" class LidarCallback(Box2D.b2.rayCastCallback):\n",
" p1 = [0., 0.]\n",
" p2 = [0., 0.]\n",
" fraction = 1.0\n",
" def ReportFixture(self, fixture, point, normal, fraction):\n",
" self.p2 = point\n",
" self.fraction = fraction\n",
" return fraction\n",
" lidar = [LidarCallback() for _ in range(ray_n)]\n",
" for l, r in zip(lidar, ray_ends):\n",
" l.fraction = 1.0\n",
" l.p1 = o\n",
" l.p2 = r \n",
" return o, ray_ends, np.array(walls), world, lidar"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def run_benchmark(n_walls, r_walls, render = False, verbose = False):\n",
" o, ray_ends, walls, world_b2d, lidar_b2d = generate_benchmark_world(n_walls, r_walls)\n",
"\n",
" if render:\n",
" print(\"Plot without Raycasting\")\n",
" for w in walls:\n",
" plt.plot([w[0][0], w[1][0]], [w[0][1],w[1][1]], color = 'black')\n",
" for p in ray_ends:\n",
" plt.plot([o[0], p[0]], [o[1],p[1]], color = 'blue')\n",
" plt.show()\n",
"\n",
" # Naive Python\n",
" num_loops = 4\n",
" start = time.time()\n",
" for _ in range(num_loops):\n",
" l_ends = []\n",
" for p in ray_ends:\n",
" l_temp = p\n",
" for w in walls:\n",
" l_temp = get_intersection(o, w[0], w[1], l_temp)\n",
" l_ends.append(l_temp)\n",
" end = time.time()\n",
" if verbose:\n",
" print(\"Native Python:%.0f usec\"%((end - start)*1e6/num_loops))\n",
" time_native = (end-start)*1e3 / num_loops\n",
"\n",
" if render:\n",
" for w in walls:\n",
" plt.plot([w[0][0], w[1][0]], [w[0][1], w[1][1]], color = 'black')\n",
" for p in l_ends:\n",
" plt.plot([o[0], p[0]], [o[1], p[1]], color = 'blue')\n",
" plt.show()\n",
"\n",
" # Naive Python Numba\n",
" num_loops = 100 \n",
" start = time.time()\n",
" for _ in range(num_loops):\n",
" l_ends = []\n",
" for p in ray_ends:\n",
" l_temp = p\n",
" for w in walls:\n",
" l_temp = get_intersection_numba(o, w[0], w[1], l_temp)\n",
" l_ends.append(l_temp)\n",
" end = time.time()\n",
" if verbose:\n",
" print(\"Numba Python:%.0f usec\"%((end - start)*1e6/num_loops))\n",
" time_numba = (end-start)*1e3 / num_loops\n",
"\n",
" if render:\n",
" for w in walls:\n",
" plt.plot([w[0][0], w[1][0]], [w[0][1], w[1][1]], color = 'black')\n",
" for p in l_ends:\n",
" plt.plot([o[0], p[0]], [o[1], p[1]], color = 'blue')\n",
" plt.show()\n",
"\n",
" # Box2D\n",
" start = time.time()\n",
" num_loops = 1000\n",
" for _ in range(num_loops):\n",
" for l, p in zip(lidar_b2d, ray_ends):\n",
" l.p2 = p\n",
" world_b2d.RayCast(l, l.p1, l.p2)\n",
" end = time.time()\n",
" if verbose:\n",
" print(\"Box2D:%.2f usec\"%((end - start)*1e6/num_loops))\n",
" time_b2d = (end-start)*1e3 / num_loops\n",
"\n",
" if render:\n",
" for b in world_b2d.bodies:\n",
" for f in b.fixtures:\n",
" w = f.shape.vertices\n",
" plt.plot([w[0][0], w[1][0]], [w[0][1], w[1][1]], color = 'black')\n",
" for l in lidar_b2d:\n",
" plt.plot([l.p1[0], l.p2[0]], [l.p1[1], l.p2[1]], color = 'blue')\n",
" plt.show()\n",
"\n",
" return time_native, time_numba, time_b2d"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plot without Raycasting\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(1.509249210357666, 0.7000184059143066, 0.017988920211791992)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"run_benchmark(10,5, render=True)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1ac0f933c70>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABHzUlEQVR4nO3dd3xUZfb48c9JD71DqCFI7yEgFkBFwS7iArIodnRVwFUQ0O+urPtzZQVFsGMDRaW4iKAiClJEUVroCS20kNBCLwlJ5vn9cW/CJJkkE8iUJOetvJi59cxNuGfufZ57HjHGoJRSSgEE+DoApZRS/kOTglJKqWyaFJRSSmXTpKCUUiqbJgWllFLZgnwdwOWoUaOGiYyM9HUYSilVoqxdu/aoMaamq3klOilERkayZs0aX4ehlFIliojszW+e3j5SSimVzeNJQUQCRSRWRL6z31cTkZ9FZIf9d1WnZceIyE4R2SYivT0dm1JKqZy8caUwHIhzej8aWGyMaQostt8jIq2Ae4HWwM3AuyIS6IX4lFJK2TzapiAi9YHbgFeAZ+3JdwHX2a+nAUuBUfb0GcaYNGC3iOwEugAri7LP9PR0EhMTSU1Nvez4lXeEhYVRv359goODfR2KUmWepxua3wSeByo6TattjEkGMMYki0gte3o94A+n5RLtaTmIyBBgCEDDhg3z7DAxMZGKFSsSGRmJiBTHZ1AeZIwhJSWFxMREGjdu7OtwlCrzPHb7SERuBw4bY9a6u4qLaXmq9RljphhjYowxMTVr5u1RlZqaSvXq1TUhlBAiQvXq1fXKTik3zY09wDXjfqHx6O+5ZtwvzI09UKzb9+SVwjXAnSJyKxAGVBKR6cAhEYmwrxIigMP28olAA6f16wNJl7JjTQgli/68lHLP3NgDjJmzifPpmQAcOHGeMXM2AdCnY54bK5fEY1cKxpgxxpj6xphIrAbkX4wx9wHzgAfsxR4AvrVfzwPuFZFQEWkMNAVWeSo+pZQqacYv3JadELKcT89k/MJtxbYPXzynMA64SUR2ADfZ7zHGbAFmAVuBH4GnjDGZ+W7Fj4kIzz33XPb7CRMmMHbs2ALXWbp0Kb///nv2+/fff5/PPvvssmMZO3Ys9erVo0OHDrRp04Z58+YVuPzUqVNJSrp4gRYZGcnRo0cvOw6l1OVLOnG+SNMvhVeeaDbGLMXqZYQxJgXomc9yr2D1VPKaubEHGL9wG0knzlO3Sjgjeze/7Muw0NBQ5syZw5gxY6hRo4Zb6yxdupQKFSpw9dVXA/DEE09cVgzO/v73vzNixAji4uLo1q0bhw8fJiDA9feBqVOn0qZNG+rWrVts+1dKXb5Dp1IJChTSM/MOjFa3Snix7adMP9GcdX/uwInzGC7en7vchpugoCCGDBnCxIkT88ybP38+V155JR07duTGG2/k0KFD7Nmzh/fff5+JEyfSoUMHfv31V8aOHcuECROIi4ujS5cu2evv2bOHdu3aAbB27Vp69OhBp06d6N27N8nJyQXG1bJlS4KCgti/fz+NGzcmPT0dgFOnThEZGcns2bNZs2YNgwYNokOHDpw/b337eOutt4iOjqZt27bEx8cDcOzYMfr06UO7du3o2rUrGzduBKwrk4cffpjrrruOqKgoJk+efFnHUikFa/Yc4/a3VgAQEpizDS48OJCRvZsX275KdO2jwvxr/ha2Jp3Kd37svhNcyHTkmHY+PZPnv97IV6v2uVynVd1KvHRH60L3/dRTT9GuXTuef/75HNOvvfZa/vjjD0SEjz76iNdee43XX3+dJ554ggoVKjBixAgAFi9eDFgn8gsXLpCQkEBUVBQzZ86kf//+pKenM3ToUL799ltq1qzJzJkzefHFF/nkk0/yjenPP/8kICCAhg0bct111/H999/Tp08fZsyYwT333EO/fv145513mDBhAjExMdnr1ahRg3Xr1vHuu+8yYcIEPvroI1566SU6duzI3Llz+eWXXxg8eDDr168HID4+niVLlnD69GmaN2/O3/72N30GQalLYIxh+h97+df8rTSoVo4vHr2SrUmniv3uhrNSnRQKkzshFDa9KCpVqsTgwYOZPHky4eEXL+0SExMZMGAAycnJXLhwwa2++f3792fWrFmMHj2amTNnMnPmTLZt28bmzZu56aabAMjMzCQiIsLl+hMnTmT69OlUrFiRmTNnIiI8+uijvPbaa/Tp04dPP/2UDz/8MN/99+3bF4BOnToxZ84cAFasWMH//vc/AG644QZSUlI4efIkALfddhuhoaGEhoZSq1YtDh06RP369d04akqpLKnpmfxj7mZmr03khha1mDigA5XDg2lWu2KxJoHcSnVSKOwb/TXjfuGAiwaaelXCmfn4VZe9/2eeeYbo6Ggeeuih7GlD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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"results = []\n",
"n_walls = [1, 5, 10, 50, 100, 250, 500, 750, 1000, 1500, 2000]\n",
"for n in n_walls:\n",
" times = run_benchmark(n,5)\n",
" results.append(times)\n",
"\n",
"plt.plot(n_walls, results, 'o-')\n",
"plt.xlabel(\"Num of Wall Columns\")\n",
"plt.ylabel(\"Run Time [msec]\")\n",
"plt.legend(['Native Python', 'Numba Python', 'Box2D'])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1ac7cabd670>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"results = []\n",
"r_walls = [1, 5, 10, 50]\n",
"for r in r_walls:\n",
" times = run_benchmark(100, r)\n",
" results.append(times)\n",
"\n",
"plt.plot(r_walls, results, 'o-')\n",
"plt.xlabel(\"Num of Wall Columns\")\n",
"plt.ylabel(\"Run Time [msec]\")\n",
"plt.legend(['Native Python', 'Numba Python', 'Box2D'])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Native Python:549742 usec\n",
"Numba Python:202878 usec\n",
"Box2D:37.00 usec\n"
]
},
{
"data": {
"text/plain": [
"(549.7421026229858, 202.877836227417, 0.03700137138366699)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"run_benchmark(10, 1000, verbose = True)"
]
}
],
"metadata": {
"interpreter": {
"hash": "632948e00ac8faf15a5c66cd151f809ea1e43d0449575fd5ec6d0ab33c0e6aba"
},
"kernelspec": {
"display_name": "Python 3.8.5 64-bit ('pfrl': conda)",
"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.8.5"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment