Files
bio-plots/bionet/5-lattice-polymer.ipynb
2024-01-05 11:55:33 +01:00

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
}