454 lines
16 KiB
Plaintext
454 lines
16 KiB
Plaintext
{
|
|
"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
|
|
}
|