{ "cells": [ { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from random import random\n", "\n", "def choose012 ():\n", " rand = random()\n", " if rand <= 1/3:\n", " return 0\n", " elif rand <= 2/3:\n", " return 1\n", " else:\n", " return 2\n", "\n", "def choosedir ():\n", " return 1 if random() <= .5 else -1\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.41\n" ] } ], "source": [ "# Question 4.5.5\n", "# No self interaction\n", "\n", "M = int(1e4)\n", "N = 20\n", "\n", "back_at_origin = 0\n", "\n", "for m in range(0,M):\n", " current = np.zeros(3) \n", "\n", " for n in range(0,N):\n", " current[choose012()] += choosedir()\n", " \n", " if not np.all(current):\n", " back_at_origin += 1\n", "\n", "print(round(back_at_origin / M,2))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., -6., -3.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 8., -7.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([7., 2., 0.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([2., 3., 4.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., 0., 7.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -1., 4.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., -2., 4.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., 0., -2.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., 0., -4.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-1., -1., -5.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., -6., 4.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 1., -2., 2.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 4., 11., 10.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 1., -8., -4.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-5., -2., 2.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 4., 12., 1.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., -2., -4.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., -7., -2.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -10., -4.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([0., 0., 5.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ -5., -10., -4.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-11., -2., 0.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ -1., -10., -10.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., 13., -4.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., 1., -5.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-1., -8., 0.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -6., -2.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-12., -1., 6.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([0., 8., 1.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., 8., -8.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., -6., -2.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -5., -11.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 0., -13.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -15., -1.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 1., -6., 10.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 10., 3.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([17., -2., -4.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -6., -1.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-5., 2., -2.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 9., 2., -4.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., -5., 0.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 6., 2., -3.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-1., 8., -2.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., -3., 14.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 6., 4., -7.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -11., -8.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-10., -5., -12.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., 3., -8.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-1., 4., 8.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 6., -7., 4.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-6., -1., 4.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -3., 3.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., 6., -4.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., -8., -5.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., 6., -1.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-7., -9., -1.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 6., -2., 5.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([2., 3., 4.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., 1., -6.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 11., -2.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 10., 3.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -7., -4.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([4., 4., 5.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., -6., -2.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., -1., 1.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., 8., -3.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 8., -3., -2.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([10., -1., -2.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., -3., 7.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-12., -8., -3.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([12., -9., -6.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., 5., -2.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., -1., 8.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([7., 5., 5.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., 8., -4.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., -6., -2.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -12., -9.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 4., -4., 7.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-8., -3., 6.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-11., -16., 2.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ -8., 1., -14.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., -11., 11.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., -3., 0.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([13., -1., 3.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 2., 4., -1.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ -4., -12., -3.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 5., 9., -3.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([3., 0., 6.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ -8., -10., 1.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 7., -6., 2.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([1., 0., 6.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 4., -2., -7.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([ 6., 11., 0.])]\n", "[array([0., 0., 0.]), array([ 0., 0., -1.])]\n", "1\n", "[array([0., 0., 0.]), array([-1., -4., 6.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., -4., -1.])]\n", "[array([0., 0., 0.]), array([ 0., -1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([1., 0., 8.])]\n", "[array([0., 0., 0.]), array([-1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-3., 6., 0.])]\n", "[array([0., 0., 0.]), array([0., 1., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-2., -7., -6.])]\n", "[array([0., 0., 0.]), array([0., 0., 1.])]\n", "1\n", "[array([0., 0., 0.]), array([ 0., -9., 10.])]\n", "[array([0., 0., 0.]), array([1., 0., 0.])]\n", "1\n", "[array([0., 0., 0.]), array([-4., 1., 4.])]\n", "0.0\n", "1.0\n" ] } ], "source": [ "# With self interaction\n", "\n", "M = int(1e2)\n", "N = 12\n", "\n", "back_at_origin = 0\n", "aborted = 0\n", "\n", "\n", "def simulate_walk (): \n", " current = np.zeros(3) \n", " walk = [np.zeros(3)]\n", "\n", " for n in range(0,N-1):\n", " newcurrent = current\n", " max_attempts = 100\n", " attempts = 0\n", "\n", " while np.any([np.array_equal(newcurrent, arr) for arr in walk]):\n", " attempts += 1\n", " if attempts > max_attempts:\n", " print(n)\n", " print(walk)\n", " return False\n", " newcurrent = current\n", " newcurrent[choose012()] += choosedir()\n", " \n", " current = newcurrent\n", " walk.append(current) \n", " print(walk) \n", " \n", " current[choose012()] += choosedir()\n", " walk.append(current)\n", "\n", " return current\n", " \n", "\n", "\n", "for m in range(0,M):\n", " walked = simulate_walk()\n", " if walked and not np.all(walked):\n", " back_at_origin += 1\n", " elif not walked:\n", " aborted += 1\n", "\n", "print(back_at_origin / M)\n", "print(aborted / M)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }