770 lines
106 KiB
Plaintext
770 lines
106 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "269c4188",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Exercise sheet\n",
|
|
"\n",
|
|
"Some general remarks about the exercises:\n",
|
|
"* For your convenience functions from the lecture are included below. Feel free to reuse them without copying to the exercise solution box.\n",
|
|
"* For each part of the exercise a solution box has been added, but you may insert additional boxes. Do not hesitate to add Markdown boxes for textual or LaTeX answers (via `Cell > Cell Type > Markdown`). But make sure to replace any part that says `YOUR CODE HERE` or `YOUR ANSWER HERE` and remove the `raise NotImplementedError()`.\n",
|
|
"* Please make your code readable by humans (and not just by the Python interpreter): choose informative function and variable names and use consistent formatting. Feel free to check the [PEP 8 Style Guide for Python](https://www.python.org/dev/peps/pep-0008/) for the widely adopted coding conventions or [this guide for explanation](https://realpython.com/python-pep8/).\n",
|
|
"* Make sure that the full notebook runs without errors before submitting your work. This you can do by selecting `Kernel > Restart & Run All` in the jupyter menu.\n",
|
|
"* For some exercises test cases have been provided in a separate cell in the form of `assert` statements. When run, a successful test will give no output, whereas a failed test will display an error message.\n",
|
|
"* Each sheet has 100 points worth of exercises. Note that only the grades of sheets number 2, 4, 6, 8 count towards the course examination. Submitting sheets 1, 3, 5, 7 & 9 is voluntary and their grades are just for feedback.\n",
|
|
"\n",
|
|
"Please fill in your name here:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "220d541e",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"NAME = \"Kees van Kempen\"\n",
|
|
"NAMES_OF_COLLABORATORS = \"\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b6944e4c",
|
|
"metadata": {},
|
|
"source": [
|
|
"---"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "c53fbab6",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "da0f2845f08ee29eb0450f8eff343e98",
|
|
"grade": false,
|
|
"grade_id": "cell-3cb26b1434512d8d",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**Exercise sheet 8**\n",
|
|
"\n",
|
|
"Code from the lectures:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "5e4391a6",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "1814f5ba5f2d71b14a4c534cfe3ad7ff",
|
|
"grade": false,
|
|
"grade_id": "cell-40c62687f6a2c579",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"rng = np.random.default_rng() \n",
|
|
"import matplotlib.pylab as plt\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"def fan_triangulation(n):\n",
|
|
" '''Generates a fan-shaped triangulation of even size n.'''\n",
|
|
" return np.array([[(i-3)%(3*n),i+5,i+4,(i+6)%(3*n),i+2,i+1] \n",
|
|
" for i in range(0,3*n,6)],dtype=np.int32).flatten()\n",
|
|
"\n",
|
|
"def is_fpf_involution(adj):\n",
|
|
" '''Test whether adj defines a fixed-point free involution.'''\n",
|
|
" for x, a in enumerate(adj):\n",
|
|
" if a < 0 or a >= len(adj) or x == a or adj[a] != x:\n",
|
|
" return False\n",
|
|
" return True\n",
|
|
"\n",
|
|
"from collections import deque \n",
|
|
"\n",
|
|
"def triangle_neighbours(adj,i):\n",
|
|
" '''Return the indices of the three neighboring triangles.'''\n",
|
|
" return [j//3 for j in adj[3*i:3*i+3]]\n",
|
|
"\n",
|
|
"def connected_components(adj):\n",
|
|
" '''Calculate the number of connected components of the triangulation.'''\n",
|
|
" n = len(adj)//3 # the number of triangles\n",
|
|
" # array storing the component index of each triangle\n",
|
|
" component = np.full(n,-1,dtype=np.int32) \n",
|
|
" index = 0\n",
|
|
" for i in range(n):\n",
|
|
" if component[i] == -1: # new component found, let us explore it\n",
|
|
" component[i] = index\n",
|
|
" queue = deque([i]) # use an exploration queue for breadth-first search\n",
|
|
" while queue:\n",
|
|
" for nbr in triangle_neighbours(adj,queue.pop()):\n",
|
|
" # the neighboring triangle has not been explored yet\n",
|
|
" if component[nbr] == -1: \n",
|
|
" component[nbr] = index\n",
|
|
" queue.appendleft(nbr) # add it to the exploration queue\n",
|
|
" index += 1\n",
|
|
" return index\n",
|
|
"\n",
|
|
"def next_around_triangle(i):\n",
|
|
" '''Return the label of the side following side i in counter-clockwise direction.'''\n",
|
|
" return i - i%3 + (i+1)%3\n",
|
|
"\n",
|
|
"def prev_around_triangle(i):\n",
|
|
" '''Return the label of the side preceding side i in counter-clockwise direction.'''\n",
|
|
" return i - i%3 + (i-1)%3\n",
|
|
"\n",
|
|
"def vertex_list(adj):\n",
|
|
" '''\n",
|
|
" Return the number of vertices and an array `vertex` of the same size \n",
|
|
" as `adj`, such that `vertex[i]` is the index of the vertex at the \n",
|
|
" start (in ccw order) of the side labeled `i`.\n",
|
|
" '''\n",
|
|
" # a side i that have not been visited yet has vertex[i]==-1\n",
|
|
" vertex = np.full(len(adj),-1,dtype=np.int32) \n",
|
|
" vert_index = 0 \n",
|
|
" for i in range(len(adj)):\n",
|
|
" if vertex[i] == -1:\n",
|
|
" side = i\n",
|
|
" while vertex[side] == -1: # find all sides that share the same vertex\n",
|
|
" vertex[side] = vert_index\n",
|
|
" side = next_around_triangle(adj[side])\n",
|
|
" vert_index += 1\n",
|
|
" return vert_index, vertex\n",
|
|
"\n",
|
|
"def number_of_vertices(adj):\n",
|
|
" '''Calculate the number of vertices in the triangulation.'''\n",
|
|
" return vertex_list(adj)[0]\n",
|
|
"\n",
|
|
"def is_sphere_triangulation(adj):\n",
|
|
" '''Test whether adj defines a triangulation of the 2-sphere.'''\n",
|
|
" if not is_fpf_involution(adj) or connected_components(adj) != 1:\n",
|
|
" return False\n",
|
|
" num_vert = number_of_vertices(adj)\n",
|
|
" num_face = len(adj)//3\n",
|
|
" num_edge = len(adj)//2\n",
|
|
" # verify Euler's formula for the sphere\n",
|
|
" return num_vert - num_edge + num_face == 2\n",
|
|
"\n",
|
|
"def flip_edge(adj,i):\n",
|
|
" if adj[i] == next_around_triangle(i) or adj[i] == prev_around_triangle(i):\n",
|
|
" # flipping an edge that is adjacent to the same triangle on both sides makes no sense\n",
|
|
" return False\n",
|
|
" j = prev_around_triangle(i)\n",
|
|
" k = adj[i]\n",
|
|
" l = prev_around_triangle(k)\n",
|
|
" n = adj[l]\n",
|
|
" adj[i] = n # it is important that we first update\n",
|
|
" adj[n] = i # these adjacencies, before determining m,\n",
|
|
" m = adj[j] # to treat the case j == n appropriately\n",
|
|
" adj[k] = m\n",
|
|
" adj[m] = k\n",
|
|
" adj[j] = l\n",
|
|
" adj[l] = j\n",
|
|
" return True\n",
|
|
"\n",
|
|
"def random_flip(adj):\n",
|
|
" random_side = rng.integers(0,len(adj))\n",
|
|
" return flip_edge(adj,random_side)\n",
|
|
"\n",
|
|
"import networkx as nx\n",
|
|
"from mpl_toolkits.mplot3d import Axes3D\n",
|
|
"from mpl_toolkits.mplot3d.art3d import Poly3DCollection\n",
|
|
"\n",
|
|
"def triangulation_edges(triangulation,vertex):\n",
|
|
" '''Return a list of vertex-id pairs corresponding to the edges in the triangulation.'''\n",
|
|
" return [(vertex[i],vertex[j]) for i,j in enumerate(triangulation) if i < j]\n",
|
|
"\n",
|
|
"def triangulation_triangles(triangulation,vertex):\n",
|
|
" '''Return a list of vertex-id triples corresponding to the triangles in the triangulation.'''\n",
|
|
" return [vertex[i:i+3] for i in range(0,len(triangulation),3)]\n",
|
|
"\n",
|
|
"def plot_triangulation_3d(adj):\n",
|
|
" '''Display an attempt at embedding the triangulation in 3d.'''\n",
|
|
" num_vert, vertex = vertex_list(adj)\n",
|
|
" edges = triangulation_edges(adj,vertex)\n",
|
|
" triangles = triangulation_triangles(adj,vertex)\n",
|
|
" # use the networkX 3d graph layout algorithm to find positions for the vertices\n",
|
|
" pos = np.array(list(nx.spring_layout(nx.Graph(edges),dim=3).values()))\n",
|
|
" fig = plt.figure()\n",
|
|
" ax = fig.add_subplot(111, projection='3d')\n",
|
|
" tris = Poly3DCollection(pos[triangles])\n",
|
|
" tris.set_edgecolor('k')\n",
|
|
" ax.add_collection3d(tris)\n",
|
|
" ax.set_xlim3d(np.amin(pos[:,0]),np.amax(pos[:,0]))\n",
|
|
" ax.set_ylim3d(np.amin(pos[:,1]),np.amax(pos[:,1]))\n",
|
|
" ax.set_zlim3d(np.amin(pos[:,2]),np.amax(pos[:,2]))\n",
|
|
" plt.show()\n",
|
|
" \n",
|
|
"def vertex_neighbors_list(adj):\n",
|
|
" '''Return a list `neighbors` such that `neighbors[v]` is a list of neighbors of the vertex v.'''\n",
|
|
" num_vertices, vertex = vertex_list(adj)\n",
|
|
" neighbors = [[] for _ in range(num_vertices)]\n",
|
|
" for i,j in enumerate(adj):\n",
|
|
" neighbors[vertex[i]].append(vertex[j])\n",
|
|
" return neighbors\n",
|
|
"\n",
|
|
"def vertex_distance_profile(adj,max_distance=30):\n",
|
|
" '''Return array `profile` of size `max_distance` such that `profile[r]` is the number\n",
|
|
" of vertices that have distance r to a randomly chosen initial vertex.'''\n",
|
|
" profile = np.zeros((max_distance),dtype=np.int32)\n",
|
|
" neighbors = vertex_neighbors_list(adj)\n",
|
|
" num_vertices = len(neighbors)\n",
|
|
" start = rng.integers(num_vertices) # random starting vertex\n",
|
|
" distance = np.full(num_vertices,-1,dtype=np.int32) # array tracking the known distances (-1 is unknown)\n",
|
|
" queue = deque([start]) # use an exploration queue for the breadth-first search\n",
|
|
" distance[start] = 0\n",
|
|
" profile[0] = 1 # of course there is exactly 1 vertex at distance 0\n",
|
|
" while queue:\n",
|
|
" current = queue.pop()\n",
|
|
" d = distance[current] + 1 # every unexplored neighbour will have this distance\n",
|
|
" if d >= max_distance:\n",
|
|
" break\n",
|
|
" for nbr in neighbors[current]:\n",
|
|
" if distance[nbr] == -1: # this neighboring vertex has not been explored yet\n",
|
|
" distance[nbr] = d\n",
|
|
" profile[d] += 1\n",
|
|
" queue.appendleft(nbr) # add it to the exploration queue\n",
|
|
" return profile\n",
|
|
" \n",
|
|
"def perform_sweeps(adj,t):\n",
|
|
" '''Perform t sweeps of flip moves, where 1 sweep is N moves.'''\n",
|
|
" for _ in range(len(adj)*t//3):\n",
|
|
" random_flip(adj)\n",
|
|
"\n",
|
|
"def batch_estimate(data,observable,k):\n",
|
|
" '''Devide data into k batches and apply the function observable to each.\n",
|
|
" Returns the mean and standard error.'''\n",
|
|
" batches = np.reshape(data,(k,-1))\n",
|
|
" values = np.apply_along_axis(observable, 1, batches)\n",
|
|
" return np.mean(values), np.std(values)/np.sqrt(k-1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "bed55184",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "8c9a6c198119d4649dd87308e8933611",
|
|
"grade": false,
|
|
"grade_id": "cell-5f5adc7840fea9ad",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"## Estimating Hausdorff dimensions in various 2D quantum gravity models \n",
|
|
"\n",
|
|
"**(100 Points)**\n",
|
|
"\n",
|
|
"In the lecture we considered the model of two-dimensional Dynamical Triangulations of the 2-sphere. The corresponding partition function is\n",
|
|
"$$ Z^{U}_{S^2,N} = \\sum_T 1, \\tag{1}$$\n",
|
|
"where the sum is over all triangulations of size $N$ with the topology of $S^2$, each of which is represented as an adjacency list $\\operatorname{adj}: \\{0,\\ldots,3N-1\\} \\to \\{0,\\ldots,3N-1\\}$. To emphasize that we are dealing with the **uniform** probability distribution on such triangulations, we have added the label $^U$. It is a lattice model of two-dimensional Euclidean quantum gravity with no coupled matter.\n",
|
|
"\n",
|
|
"One can also consider two-dimensional quantum gravity coupled to matter fields (e.g. a scalar field) supported on the geometry. Formally the corresponding path integral in the continuum reads\n",
|
|
"$$ Z = \\int [\\mathcal{D}g_{ab}]\\int [\\mathcal{D}\\phi] e^{-\\frac{1}{\\hbar}(S_E[g_{ab}] + S_m[\\phi,g_{ab}])} = \\int [\\mathcal{D}g_{ab}]e^{-\\frac{1}{\\hbar}S_E[g_{ab}]} Z^*_m[g_{ab}],$$\n",
|
|
"where $S_m[\\phi,g_{ab}]$ and $Z_m[g_{ab}]$ are the matter action and path integral of the field $\\phi$ on the geometry described by $g_{ab}$. The natural analogue in Dynamical Triangulations is\n",
|
|
"$$Z^*_{S^2,N} = \\sum_T Z^*_m[T],$$\n",
|
|
"where the sum is over the same triangulations as in (1) but now the summand $Z^*_m[T]$ is the lattice partition function of a matter system supported on the triangulation $T$, which generically depends in a non-trivial way on $T$. For instance, the matter system could be an Ising model in which the spin are supported on the triangles of $T$ and $Z^{\\text{Ising}}_m[T]$ would be the corresponding Ising partition function.\n",
|
|
"In other words, when Dynamical Triangulations are coupled to matter the uniform distribution $\\pi^U(T) = 1/Z^U_{S^2,N}$ is changed into a non-uniform distribution $\\pi^*(T) = Z^*_m[T] / Z^*_{S^2,N}$. This can have significant effect on the critical exponents of the random triangulation as $N\\to\\infty$, like the Hausdorff dimension. \n",
|
|
"\n",
|
|
"The goal of this exercise is to estimate the **Hausdorff dimension** of random triangulations in four different models and to conclude based on this that they belong to four different universality classes (i.e. that if they possess well-defined continuum limits that they are described by four different EQFTs): \n",
|
|
"* $Z^{U}_{S^2,N}$: the standard Dynamical Triangulations with **U**niform distribution (U)\n",
|
|
"* $Z^{W}_{S^2,N}$: triangulations coupled to a matter system called a Schnyder **W**ood (W)\n",
|
|
"* $Z^{S}_{S^2,N}$: triangulations coupled to a matter system called a **S**panning tree (S)\n",
|
|
"* $Z^{B}_{S^2,N}$: triangulations coupled to a matter system called a **B**ipolar orientation (B)\n",
|
|
"\n",
|
|
"What these matter systems precisely represent will not be important. We have provided for you a **black box generator** that samples from the corresponding four distributions $\\pi^U(T)$, $\\pi^W(T)$, $\\pi^S(T)$, $\\pi^B(T)$. It does so in an efficient manner (linear time in $N$) using direct Monte Carlo sampling algorithms and therefore returns independent samples with exactly the desired distribution $\\pi^*(T)$ (within numerical precision).\n",
|
|
"\n",
|
|
"The black box generator is provided by the executable program `generator` provided to you on the science server. It can be called directly from this notebook with the following function `generate_random_triangulation`, that takes the desired size $N$ and model (`'U'`,`'W'`, `'S'`, `'B'`) and returns a single random triangulation in the usual form of an adjacency list."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "bcc7acba",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "7d6abad00aa217998ca44ecc5e89f423",
|
|
"grade": false,
|
|
"grade_id": "cell-266ff66f880583d7",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"True"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import subprocess\n",
|
|
"\n",
|
|
"def generate_random_triangulation(n,model):\n",
|
|
" '''\n",
|
|
" Returns a random triangulation generated by the program `generator` in the form \n",
|
|
" of an array of length 3n storing the adjacency information of the triangle sides.\n",
|
|
" Parameters:\n",
|
|
" n - number of triangles in the triangulation, must be positive and even\n",
|
|
" model - a one-letter string specifying the model from which the triangulation is sampled:\n",
|
|
" 'U': Uniform triangulations\n",
|
|
" 'W': Schnyder-Wood-decorated triangulations\n",
|
|
" 'S': Spanning-tree decorated triangulations\n",
|
|
" 'B': Bipolar-oriented triangulations\n",
|
|
" '''\n",
|
|
" program = \"/vol/cursus/NM042B/bin/generator\"\n",
|
|
" output = subprocess.check_output([program,\"-s{}\".format(n),\"-t{}\".format(model)]).decode('ascii').split('\\n')[:-1]\n",
|
|
" return np.array([int(num) for num in output],dtype=np.int32)\n",
|
|
"\n",
|
|
"adj = generate_random_triangulation(100,'B')\n",
|
|
"is_sphere_triangulation(adj)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "4518f51f",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "37e92f3a59f2d5c6d117868d04d8f0d4",
|
|
"grade": false,
|
|
"grade_id": "cell-6aacf5fa6d8c4eb9",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"Recall that the **distance profile** $\\rho_T(r)$ of a triangulation is defined as \n",
|
|
"$$ \\rho_T(r) = \\frac{1}{V} \\sum_{x=0}^{V-1} \\sum_{y=0}^{V-1} \\mathbf{1}_{\\{d_T(x,y)=r\\}},$$\n",
|
|
"where $V = (N+4)/2$ is the number of vertices and $d_T(x,y)$ is the graph distance between the vertices with label $x$ and $y$."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d59143f0",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "afcdbf86f64bd17b8ac9b4f9ec422206",
|
|
"grade": false,
|
|
"grade_id": "cell-8e6d6fcefb5ab644",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**(a)** Let $T$ be a random triangulation of size $N$ and $X$, $Y$ two independent numbers chosen uniformly from $0,\\ldots,V-1$, corresponding to two random vertices in $T$. Explain with a calculation that $\\frac{1}{V}\\mathbb{E}[ \\rho_T(r) ] = \\mathbb{P}(d_T(X,Y) = r)$ and that the expected distance between $X$ and $Y$ is related to the distance profile via\n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\mathbb{E}[d_T(X,Y)] = \\frac{1}{V}\\sum_{r=0}^\\infty r\\, \\mathbb{E}[ \\rho_T(r) ]. \\tag{2}\n",
|
|
"$$\n",
|
|
"\n",
|
|
"**(20 pts)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "dd1b43bf",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "74963ed3d7cbd9eaa06be2e66a8f939e",
|
|
"grade": true,
|
|
"grade_id": "cell-f86454063d193cd6",
|
|
"locked": false,
|
|
"points": 20,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "29704f5d",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "e2cc0493d54bcf087ce14bcb2e8a8d2f",
|
|
"grade": false,
|
|
"grade_id": "cell-aafca9797e5cfee4",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**(b)** We will work under the assumption that \n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\mathbb{E}[\\rho_T(r)] \\approx V^{1-1/d_H} f(r V^{-1/d_H})\n",
|
|
"$$ \n",
|
|
"\n",
|
|
"for a positive real number $d_H$ called the **Hausdorff dimension** and a continuous function $f$ that are both independent of $N$ but do depend on the model. Show that \n",
|
|
"\n",
|
|
"$$\n",
|
|
"\\mathbb{E}[d_T(X,Y)] \\approx c\\,V^{1/d_H}, \\qquad c = \\int_0^\\infty \\mathrm{d}x\\,x\\,f(x). \\tag{3}\n",
|
|
"$$\n",
|
|
"\n",
|
|
"_Hint:_ Approximate the summation by an integral. **(15 pts)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "0c062ba6",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "2db525e8acbc2412c1c5948052526a15",
|
|
"grade": true,
|
|
"grade_id": "cell-bcf3b38d64a4408d",
|
|
"locked": false,
|
|
"points": 15,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"YOUR ANSWER HERE"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "eba53e6d",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "ba14acd8cc24c2dfea35f3b8106cdfc8",
|
|
"grade": false,
|
|
"grade_id": "cell-fcab32195688a5c5",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**(c)** For each of the four models estimate $\\mathbb{E}[d_T(X,Y)]$ with errors for $N = 2^7, 2^8, \\ldots, 2^{12}$ using (2) and based on $100$ samples each. Store your data in the file `qgdimension.hdf5`. Make an estimate of $d_H$ (with errors) for each of the models by fitting the parameters $c$ and $d_H$ of the ansatz (3). For each model, plot the data together with the fit in a log-log plot. **(40 pts)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 115,
|
|
"id": "ee683060",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "c3664034dec3a350f7fe0533fe2454cb",
|
|
"grade": true,
|
|
"grade_id": "cell-01f5fde55f35f2dc",
|
|
"locked": false,
|
|
"points": 15,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"models = ['U','W','S','B']\n",
|
|
"sizes = [2**k for k in range(7,13)]\n",
|
|
"num_vertices = (np.array(sizes)+4)/2\n",
|
|
"measurements = 100\n",
|
|
"\n",
|
|
"# data gathering and storing in qgdimension.hdf5\n",
|
|
"import h5py\n",
|
|
"\n",
|
|
"max_distance = 30\n",
|
|
"samples = 100\n",
|
|
"N_space = 2**np.arange(7, 13)\n",
|
|
"\n",
|
|
"with h5py.File(\"qgdimension.hdf5\", \"a\") as f:\n",
|
|
" if not \"N-values\" in f:\n",
|
|
" f.create_dataset(\"N-values\",data=N_space)\n",
|
|
" \n",
|
|
" for model in models:\n",
|
|
" models_key = f\"expectation-graph-distance-{model}\"\n",
|
|
" if not models_key in f:\n",
|
|
" graph_distance_expectations = np.zeros((len(N_space), samples))\n",
|
|
" for idx_N, N in enumerate(N_space):\n",
|
|
" V = (N + 4)/2\n",
|
|
" for idx_sample in range(samples):\n",
|
|
" adj = generate_random_triangulation(N, model)\n",
|
|
" expectation = 1/V * vertex_distance_profile(adj,max_distance)@np.arange(max_distance)\n",
|
|
" graph_distance_expectations[idx_N][idx_sample] = expectation\n",
|
|
"\n",
|
|
" f.create_dataset(models_key,data=graph_distance_expectations)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 117,
|
|
"id": "351f7a01",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "000725107fe51acebc0bc68eef8c1c9c",
|
|
"grade": true,
|
|
"grade_id": "cell-9e8f666073e1e2df",
|
|
"locked": false,
|
|
"points": 25,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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j/QlqKq63zDfq1y7d+/myy+/5LHHHitxXv/5z3/o1KkTffr0AaBLly5Ur14dgCFDhhSeaT3nnHP48MMPSU1NLZzWd5mCSU1NJTMzk6ysLM444wzmzp27370EU6ZMoXbt2uTm5jJw4EAOPvhg+vXrF/byGJM0VGHhtzBuOPz1Bxx4BFwwGlr0jndkJphvh8G636ietzdquSoR8xQEzlUl5Z8Ce/fuZc6cObz00kv07duXm266iREjRjBkyBB+/vlnnn/+eTp37sw999zDiBEjeOihh4pdnljkKYDs7GzOOussnn32WerUqROwzO7du/nmm2948sknQ56vMUlv5UwYcwesng3NesK570LLPvGOKizWkDPFyszM5PDDDw9aJppX5Fq0aMGqVasKP69atarImdexY8fSs2dPGjduXOK8fv31V3r16lX4efbs2aSnp7Ny5UqaNm1aODw/P79IcvRfJl/FLVNaWhrp6emMGTNmv4Zcs2bN2L59O40aNeKMM85gxowZhQ25b7/9NuTlMSYprJoNY++FFVOgfjs47304+OSE7pZiklu4eQoCX5Fr0aIFK1euLCyzZs2aIvmnQIsWLWjevHnhla2zzz6bESNGcN1119GiRQv69u3L9u3bC4cHE4s8tWfPHs466yyGDh3KmWeeWWws3377LYceeqjlI1MxbF3trsD99jHUagKnvwLdzoOU5LvjzBpysXDSCHIjvFrlb9f27VQp5bS1atUKmAD8NWnShDlz5hR+3rhxIw0bNixSJppX5A477DCWLl3KsmXLaN68OR9++CEffPBB4fhPPvlkv24fAwYM4N1336V586KXwOvXr8/cuXMBlxxHjx7NzTffzOzZs5k/fz7XXHMNubm5ARN1KGc6N27cSOXKlUlLSyM3N5dx48Zxxx13FCmzY8cO8vPzC////fffc9999xWOHz16tHVjMeXD5mUw/kGY9x+o2RBOfgp6/g1SK8c7MhOqk1yjI5q5KhHzFATOVYcddhiLFi0qzD+fffYZH374YcD6mjdvzsKFC+nYsSPjx4+nc+fONGnShJYtW7Jw4UKaNWtWOBzil6dUlcsvv5xOnTrxf//3f0HLjh49mnPOsXc4mnJudw789DxMeda9WuCY2+DoW6BqrXhHVmrJ1/QsYyLSRkTeEJHEenV7FNWvX5+jjjqKrl27Ft5EPnjwYNas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yvL2wuy34IdHYOdW6HUp9L/bvdzbFLIrcgkgL1+5+I3pLN6QzaqsXG4Y/QsXvzGdvHyNeN4nnXQSX3/tDkpHjx7NBRfs62W6efNmTj/9dLp168bhhx/Or7/+CsD999/P3//+d9LT02nTpg0vv/wyAMOGDWPJkiV0796d22+/HYAnnniCww47jG7duvHII4/sV/+SJUuYPn06Dz/8MCkpbnNr06YNJ598MgCnn346vXr1okuXLrz22muF09WqVYv77ruPvn37MnXq1CLzHD16NIcccghdu3bljjvuiHgdGQP7rjq8Pahm1K86xN2enTBlJIzsDtNfgUPPhxt/gePutkacCUl5yVPDhw/fr/5Aeap169aWp4yJlyUT4JWj4ZvboMkhcPWPcMoz1ogLwBpyCSBj4QYyV2ZRkA9zdueRuTKLjIUbIp73+eefz4cffsjOnTv59ddf6du3b+G44cOH06NHD3799VceffRRLrnkksJxv//+O9999x0zZsxgxIgR7NmzhxEjRtC2bVsyMzN54okn+P7771m0aBEzZswgMzOTzMxMJk2aVKT+efPm0b17d1JTUwPG9+abbzJ79mxmzZrFc889x6ZNmwDYsWMHXbt2Zfr06Rx99NGF5desWcMdd9zBhAkTyMzMZObMmXzxxRcRrydjyqX8fJjzEbzQG8beBy37wDVTYMgLUKdpvKMzSaS85KnZs2czZcqUIvVHO0+tXbvW8pQxpbFpCXxwPow6A/bmwnnvwyVfQpOu8Y4sYVnXygQwb802cncX7ZaRuzuP+Wu2MaBT44jm3a1bN5YvX87o0aMZPHhwkXGTJ0/ms88+A+C4445j06ZNbN26FYCTTz6ZqlWrUrVqVRo2bMj69ev3m/f333/P999/X/jC6m3btrFo0SL69esXcnzPPfccn3/+OQArV65kyZIltGrVitTUVM4666z9ys+cOZP09HQaNmwIwNChQ5k0aRKnn356yHUaUyEsnQhj74W1c6BJN9d4a5Me76hMkioveSo7O5slS5aEFV+4eernn3+2PGVMOHZuhYmPw/RXoVJVOP5+OPxa938TlDXkEkCXZnWoXiWVHJ8kWb1KKp2b1YnK/E877TRuu+02MjIyCs8kAqju3yVGvAcdVK2678eTmprK3r179yurqtx5551cffXVAGzfvp3atYt20+rSpQtz5swhPz+/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kSM59dRTAUhNTeWVV14JaxyTJ0+mbdu2nHzyyTzxxBMFtnn22Wfp1asXnTp1YsSIEbn63V977bW0aNGCTp06lej8o0aN4rvvvivRvgU5cuQIvXr14uSTT6Zjx46MHTu2wHbFxe3xeOjatSvnnXde0GITiWibkuH10+G7O6BBB7hhNuva/kNFXDkWaXmqVatWPPPMM/m2r127lsTERPr27UtiYiI1atTgueeeA5zP+gYNGpQ4R0Fw89TWrVs566yzaN++PR07duT5558vtO3zzz9Pp06d6NWrV/bPA7nfj8LytkiZlJkOyf+Gl3rAqq/g9DtY0OtVSBwRUUUcqJAr81555RUmTZrEhx9+yM8//wzAgQMHwpogPR4PN910E99//z0LFy5kwoQJrFq1Kleb7du388ILL/DDDz+wYsUKPB4PEydOzN5+9dVX88UXX5Q4hpSUFE4++eQS759X5cqVmTlzJr/88gspKSlMnjyZefPm5WtXXNzPP/887du3D1pcIhFr30aYcAW8PxQy0+Cy9+Hqb6FRF7cjE5dFWp5atWoVn332Wb481bZtW1JSUvjpp59YvHgx8fHxXHTRRYDzWT958uRSxRDMPFWhQgWefvppVq9ezbx583j55Zfz/TwAK1as4M0332TBggX8/PPPfPvtt6xfvz7f+1FQ3hYpc6yFFZ/Dy70g+XFo3R9uXgD9HsBTIc7t6AqkQq4Mu/HGG9m0aRMXXHABzz77LNWqVQNg7NixbNy4kcTERO66664ij7Fjxw6uvPJKunbtSrt27ViwYEHAcSxYsIBWrVrRokULKlWqxPDhw/nqq6/ytcvKyiIjI4OsrCzS09Np3PjPsTJnnHEGtWvX9vuc69at47TTTqNz5848++yz/P777yQkJAQce2GMMdnv57Fjxzh27FiBg76Linvbtm189913/O1vfwtaXCIR58hBmPYAvNLHeRrX7wG4aSF0GAqaKKHci9Q8NWzYsALz1HEzZsygZcuWnHTSSYDzWV+nTp2AzhnKPNWoUSO6desGQPXq1Wnfvj3bt2/P12716tX06dOH+Ph4KlSowJlnnsmXX37pd94WKTN2LIX/DoLProW4WnD1d84Nx9rN3I6sSBojFw7fjyFu+1KIDd7bXbluW7ggf9ePnF577TUmT57MrFmzqFevHvfffz8ADz30EGvXriUlJSW77eDB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\n",
|
|
"text/plain": [
|
|
"<Figure size 864x576 with 4 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Fitting and plotting\n",
|
|
"from matplotlib import pyplot as plt\n",
|
|
"from scipy.optimize import curve_fit\n",
|
|
"\n",
|
|
"# Define a dictionary of model names for the plot titles.\n",
|
|
"model_names = {\"U\": \"Uniform triangulations\",\n",
|
|
" \"W\": \"Schnyder-Wood-decorated triangulations\",\n",
|
|
" \"S\": \"Spanning-tree decorated triangulations\",\n",
|
|
" \"B\": \"Bipolar-oriented triangulations\"}\n",
|
|
"\n",
|
|
"d_H_list = {}\n",
|
|
"\n",
|
|
"with h5py.File(\"qgdimension.hdf5\", \"r\") as f:\n",
|
|
" N_space = np.array(f[\"N-values\"])\n",
|
|
" V_space = (N_space + 4)/2\n",
|
|
" expectations = {model: np.array(f[f\"expectation-graph-distance-{model}\"]) for model in models}\n",
|
|
" \n",
|
|
" fig, axs = plt.subplots(2, 2, figsize=(12, 8))\n",
|
|
" axs = axs.ravel()\n",
|
|
" fig.suptitle(r\"Graph distance expectation Monte Carlo simulations and Hausdorff dimension $d_H$ fits using $\\mathbb{E}[d_T(X,Y)] \\approx c\\,V^{1/d_H}$ for different triangulation models\")\n",
|
|
" \n",
|
|
" for idx_model, model in enumerate(models):\n",
|
|
" # Calculate mean and standard deviation of the expectations.\n",
|
|
" mu = np.mean(expectations[model], 1)\n",
|
|
" sigma = np.std(expectations[model], 1)\n",
|
|
"\n",
|
|
" fitfunc = lambda V, c, d_H: c*V**(1/d_H)\n",
|
|
" popt, pcov = curve_fit(fitfunc, V_space, mu, sigma=sigma)\n",
|
|
" d_H_list[model] = popt[1]\n",
|
|
" V_space_fit = np.linspace(np.min(V_space)/2, np.max(V_space)*2, 1000)\n",
|
|
"\n",
|
|
" ax = axs[idx_model]\n",
|
|
" ax.set_title(f\"{model_names[model]} ({model})\")\n",
|
|
" ax.errorbar(V_space, mu, sigma, label=\"Monte Carlo\",\n",
|
|
" fmt='.', markersize=10, capsize=4)\n",
|
|
" ax.plot(V_space_fit, fitfunc(V_space_fit, *popt),\n",
|
|
" label=r\"fit: $c = {:.2f}$, $d_H = {:.2f}$\".format(*popt))\n",
|
|
" ax.set_xlabel(r\"$V$\")\n",
|
|
" ax.set_ylabel(r\"$\\mathbb{E}[d_T(X,Y)]$\")\n",
|
|
" ax.set_yscale(\"log\")\n",
|
|
" ax.set_xscale(\"log\")\n",
|
|
" ax.grid(True, which=\"both\", ls=\"-\")\n",
|
|
" ax.legend()\n",
|
|
" \n",
|
|
" fig.tight_layout()\n",
|
|
" fig.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b505b3cf",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "be7888d11d6b9ca0f2666739857578cb",
|
|
"grade": false,
|
|
"grade_id": "cell-032c7f8d6147d9f9",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**(d)** Produce a *collapse* plot for each of the four models as follows: plot \n",
|
|
"$$V^{1/d_H}\\,\\mathbb{E}[\\frac{1}{V}\\rho_T(r)] \\quad\\text{ as function of } x = r / V^{1/d_H},$$ \n",
|
|
"where for $d_H$ you take the estimate obtained in the previous exercise. Show errors in the mean distance profiles via shaded regions (just like in the lecture). Verify that the curves collapse reasonably well. **(25 pts)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 111,
|
|
"id": "988bfe95",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "7b7eceb7923231bc3710d4e3036265b6",
|
|
"grade": true,
|
|
"grade_id": "cell-faf328e7505cf6a2",
|
|
"locked": false,
|
|
"points": 25,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'U': 3.569451122838096,\n",
|
|
" 'W': 2.7064403223694575,\n",
|
|
" 'S': 3.143472808640101,\n",
|
|
" 'B': 2.9010605067214215}"
|
|
]
|
|
},
|
|
"execution_count": 111,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"d_H_list"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "d8f25787",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"editable": false,
|
|
"nbgrader": {
|
|
"cell_type": "markdown",
|
|
"checksum": "7f19410ed936f838773ee891b059d1a3",
|
|
"grade": false,
|
|
"grade_id": "cell-65ae9c46ece5b657",
|
|
"locked": true,
|
|
"schema_version": 3,
|
|
"solution": false,
|
|
"task": false
|
|
}
|
|
},
|
|
"source": [
|
|
"**(e) Bonus exercise:** Make more robust estimates of $d_H$ by optimizing the quality of the collapse. You could do this (for each model separately) by taking $\\hat{f}(r) = \\mathbb{E}[\\rho_T(r)] / V_0$, where the right-hand side is the mean distance profile for the largest system size with $V_0 = (2^{12} + 4)/2$ vertices. Then according to our assumption, for another size $V \\leq V_0$ we expect $\\mathbb{E}[\\rho_T(r)] / V \\approx k \\hat{f}(kr)$, where $k \\geq 1$ is a scale factor that should be $k\\approx (V_0/V)^{1/d_H}$. Making sure to interpolate the function $\\hat{f}(r)$ (using [`scipy.interpolate.interp1d`](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html#scipy.interpolate.interp1d)), this scale factor can be determined by fitting the curve $k \\hat{f}(kr)$ to the data $\\mathbb{E}[\\rho_T(r)] / V$. Then $d_H$ can be estimated by fitting $k$ versus $V$. **(20 bonus points, but note that maximum grade is 10)**"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "ed4424ce",
|
|
"metadata": {
|
|
"deletable": false,
|
|
"nbgrader": {
|
|
"cell_type": "code",
|
|
"checksum": "199ffddc14c77d4174b92a61368cd5c9",
|
|
"grade": true,
|
|
"grade_id": "cell-e24b0602e4e8257d",
|
|
"locked": false,
|
|
"points": 20,
|
|
"schema_version": 3,
|
|
"solution": true,
|
|
"task": false
|
|
}
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# YOUR CODE HERE\n",
|
|
"raise NotImplementedError()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "c9e50c10",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"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.9.12"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|