Files
cds-monte-carlo-methods/Exercise sheet 9/exercise_sheet_09.ipynb

486 lines
67 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "47ceb846",
"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": 1,
"id": "be2b5237",
"metadata": {},
"outputs": [],
"source": [
"NAME = \"Kees van Kempen\"\n",
"NAMES_OF_COLLABORATORS = \"\""
]
},
{
"cell_type": "markdown",
"id": "6037899a",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "3ff5eacf",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "a8ee042e1668d99f0c9d1d4176a2a66f",
"grade": false,
"grade_id": "cell-02fe75d787fe0e01",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"**Exercise sheet 9**"
]
},
{
"cell_type": "markdown",
"id": "2e578009",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "d5514c31a73f3080307b23d0567af09e",
"grade": false,
"grade_id": "cell-eaa254f386899f72",
"locked": true,
"schema_version": 3,
"solution": false,
"task": false
}
},
"source": [
"## Running code on the compute cluster: lattice scalar field\n",
"\n",
"**Goal**: Learn how to scale up simulations by transitioning from running them in the notebook to stand-alone scripts on the compute cluster.\n",
"\n",
"In lecture 7 we implemented the Metropolis-Hastings simulation of a lattice scalar field using the following code:\n",
"\n",
"```Python\n",
"import numpy as np\n",
"rng = np.random.default_rng() \n",
"import matplotlib.pylab as plt\n",
"%matplotlib inline\n",
"\n",
"def potential_v(x,lamb):\n",
" '''Compute the potential function V(x).'''\n",
" return lamb*(x*x-1)*(x*x-1)+x*x\n",
"\n",
"def neighbor_sum(phi,s):\n",
" '''Compute the sum of the state phi on all 8 neighbors of the site s.'''\n",
" w = len(phi)\n",
" return (phi[(s[0]+1)%w,s[1],s[2],s[3]] + phi[(s[0]-1)%w,s[1],s[2],s[3]] +\n",
" phi[s[0],(s[1]+1)%w,s[2],s[3]] + phi[s[0],(s[1]-1)%w,s[2],s[3]] +\n",
" phi[s[0],s[1],(s[2]+1)%w,s[3]] + phi[s[0],s[1],(s[2]-1)%w,s[3]] +\n",
" phi[s[0],s[1],s[2],(s[3]+1)%w] + phi[s[0],s[1],s[2],(s[3]-1)%w] )\n",
"\n",
"def scalar_action_diff(phi,site,newphi,lamb,kappa):\n",
" '''Compute the change in the action when phi[site] is changed to newphi.'''\n",
" return (2 * kappa * neighbor_sum(phi,site) * (phi[site] - newphi) +\n",
" potential_v(newphi,lamb) - potential_v(phi[site],lamb) )\n",
"\n",
"def scalar_MH_step(phi,lamb,kappa,delta):\n",
" '''Perform Metropolis-Hastings update on state phi with range delta.'''\n",
" site = tuple(rng.integers(0,len(phi),4))\n",
" newphi = phi[site] + rng.uniform(-delta,delta)\n",
" deltaS = scalar_action_diff(phi,site,newphi,lamb,kappa)\n",
" if deltaS < 0 or rng.uniform() < np.exp(-deltaS):\n",
" phi[site] = newphi\n",
" return True\n",
" return False\n",
"\n",
"def run_scalar_MH(phi,lamb,kappa,delta,n):\n",
" '''Perform n Metropolis-Hastings updates on state phi and return number of accepted transtions.'''\n",
" total_accept = 0\n",
" for _ in range(n):\n",
" total_accept += scalar_MH_step(phi,lamb,kappa,delta)\n",
" return total_accept\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)\n",
"\n",
"lamb = 1.5\n",
"kappas = np.linspace(0.08,0.18,11)\n",
"width = 3\n",
"num_sites = width**4\n",
"delta = 1.5 # chosen to have ~ 50% acceptance\n",
"equil_sweeps = 1000\n",
"measure_sweeps = 2\n",
"measurements = 2000\n",
"\n",
"mean_magn = []\n",
"for kappa in kappas:\n",
" phi_state = np.zeros((width,width,width,width))\n",
" run_scalar_MH(phi_state,lamb,kappa,delta,equil_sweeps * num_sites)\n",
" magnetizations = np.empty(measurements)\n",
" for i in range(measurements):\n",
" run_scalar_MH(phi_state,lamb,kappa,delta,measure_sweeps * num_sites)\n",
" magnetizations[i] = np.mean(phi_state)\n",
" mean, err = batch_estimate(np.abs(magnetizations),lambda x:np.mean(x),10)\n",
" mean_magn.append([mean,err])\n",
" \n",
"plt.errorbar(kappas,[m[0] for m in mean_magn],yerr=[m[1] for m in mean_magn],fmt='-o')\n",
"plt.xlabel(r\"$\\kappa$\")\n",
"plt.ylabel(r\"$|m|$\")\n",
"plt.title(r\"Absolute field average on $3^4$ lattice, $\\lambda = 1.5$\")\n",
"plt.show()\n",
"```\n",
"The goal will be to reproduce and extend its output.\n",
"\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"id": "029e890b",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "9f8edfc2002ed79ed92e093411435ca4",
"grade": false,
"grade_id": "cell-577d0bd92cfc0731",
"locked": true,
"points": 40,
"schema_version": 3,
"solution": false,
"task": true
}
},
"source": [
"**(a)** Turn the simulation into a standalone script `latticescalar.py` (similar to `ising.py`) that takes the relevant parameters e.g.\n",
"```bash\n",
"$ python3 latticescalar.py -l 1.5 -k 0.12 -w 3 -n 1000\n",
"```\n",
"for $\\lambda=1.5$, $\\kappa=0.12$, $w=3$, and $1000$ measurements, together with optional parameters $\\delta$ and numbers of sweeps, as command line arguments and stores the relevant simulation outcomes in an hdf5-file. **(40 pts)**"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1c6c1b73",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import h5py\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# Load data\n",
"output_filename = \"preliminary_simulation.h5\"\n",
"with h5py.File(output_filename,'r') as f:\n",
" handler = f[\"mean-magn\"]\n",
" mean_magn = np.array(handler)\n",
" kappas = handler.attrs[\"kappas\"]\n",
"\n",
"# Plotterdeplotterdeplot\n",
"plt.figure()\n",
"plt.errorbar(kappas,[m[0] for m in mean_magn],yerr=[m[1] for m in mean_magn],fmt='-o')\n",
"plt.xlabel(r\"$\\kappa$\")\n",
"plt.ylabel(r\"$|m|$\")\n",
"plt.title(r\"Absolute field average on $3^4$ lattice, $\\lambda = 1.5$\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e506d9a5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"filename: ./data_l1.5_k0.08_w3_d1.5_20221124103953.hdf5\n",
"current_time :\t\t\t 1669285905.690512\n",
"delta :\t\t\t 1.5\n",
"equil_sweeps :\t\t\t 100\n",
"kappa :\t\t\t 0.08\n",
"lamb :\t\t\t 1.5\n",
"measure_sweeps :\t\t\t 2\n",
"measurements :\t\t\t 0\n",
"num_sites :\t\t\t 81\n",
"start time :\t\t\t 1669285819.6413248\n",
"width :\t\t\t 3\n",
"[ 0.06375525 0.11291112 0.17949721 ... 0.04632559 0.00727746\n",
" -0.00997054]\n"
]
},
{
"data": {
"text/plain": [
"(array([ 29., 212., 821., 2077., 2958., 3007., 2033., 890., 235.,\n",
" 28.]),\n",
" array([-0.48756734, -0.389454 , -0.29134068, -0.19322737, -0.09511404,\n",
" 0.00299929, 0.10111262, 0.19922595, 0.29733926, 0.3954526 ,\n",
" 0.49356592], dtype=float32),\n",
" <BarContainer object of 10 artists>)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import h5py\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# Load data\n",
"import glob\n",
"import os\n",
"\n",
"list_of_files = glob.glob('./data*.hdf5') # * means all if need specific format then *.csv\n",
"latest_file = max(list_of_files, key=os.path.getctime)\n",
"print('filename:', latest_file)\n",
"\n",
"#output_filename = \"data_l1.5_k0.08_w3_d1.5_20221124103953.hdf5\"\n",
"#output_filename = latest_file\n",
"output_filename = \"testding.hdf5\"\n",
"with h5py.File(output_filename,'r') as f:\n",
" #print(np.array(f[\"magnetizations\"]))\n",
" handler = f[\"magnetizations\"]\n",
" for key in handler.attrs.keys():\n",
" print(key, ':\\t\\t\\t', handler.attrs[key])\n",
" magnetizations = np.array(handler)\n",
" print(magnetizations)\n",
" kappa = handler.attrs[\"kappa\"]\n",
"\n",
"from matplotlib import pyplot as plt\n",
"plt.hist(magnetizations)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "89d85e77",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.06375525, 0.11291112, 0.17949721, ..., 0.04632559,\n",
" 0.00727746, -0.00997054], dtype=float32)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"magnetizations"
]
},
{
"cell_type": "markdown",
"id": "d4640925",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "261f895518cc39ffdc0eadcef4c3dd65",
"grade": false,
"grade_id": "cell-51479ca8a1c07968",
"locked": true,
"points": 30,
"schema_version": 3,
"solution": false,
"task": true
}
},
"source": [
"**(b)** Write a bash script `job_latticescalar.sh` that submits an array job to the cluster for $w=3$ and $2000$ measurements and $\\lambda = 1.0, 1.5, 2.0$ and $\\kappa = 0.08, 0.09, ..., 0.18$ (so 33 simulations in total). Submit the job to the `hefstud` slurm partition (do not run all 33 in parallel). **(30 pts)**"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9b27fee7",
"metadata": {},
"outputs": [],
"source": [
"# The results are gathered by running `sbatch ../job_latticescalar.sh` from ~/NWI-NM042B_2022/Exercise sheet 9/results.\n",
"# This is done to gather the log files in the results folder."
]
},
{
"cell_type": "markdown",
"id": "711111db",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "markdown",
"checksum": "0181a075dd61572ba8c2f5027bbb8b74",
"grade": false,
"grade_id": "cell-88a18366f80a2168",
"locked": true,
"points": 30,
"schema_version": 3,
"solution": false,
"task": true
}
},
"source": [
"**(c)** Load the stored data into this notebook and reproduce the plot above (with $\\lambda = 1$ and $\\lambda=2$ added). **(30 pts)**"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e4aaf772",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"result_files = glob.glob('results/batch_data_*.hdf5')\n",
"prefix = \"results/batch_data_\"\n",
"\n",
"# Know how the file names are formed, but I really want to\n",
"# do something funky.\n",
"# Yes, we trust the metadata in the filename.\n",
"files = {}\n",
"for result_file in result_files:\n",
" params = {}\n",
" raw_params = result_file[len(prefix):].split('_')\n",
" for i in raw_params:\n",
" key = i[0]\n",
" # The key will be 2 for the date part. Ignore this.\n",
" if key == '2':\n",
" continue\n",
" value = float(i[1:])\n",
" params[key] = value\n",
" files[result_file] = params\n",
"\n",
"# For each measurement, we are interested in the mean and standard deviation,\n",
"# so two values per set of kappa and lambda.\n",
"lambdas = np.arange(3)*.5 + 1.0\n",
"kappas = np.arange(11)*.01 + .08\n",
"results = np.zeros((len(lambdas), len(kappas), 2))\n",
"\n",
"for filename, parameters in files.items():\n",
" lam = parameters[\"l\"]\n",
" kap = parameters[\"k\"]\n",
" idx_lam = np.argwhere(np.isclose(lambdas, lam))[0][0]\n",
" idx_kap = np.argwhere(np.isclose(kappas, kap))[0][0]\n",
" with h5py.File(filename,'r') as f:\n",
" handler = f[\"magnetizations\"]\n",
" magnetizations = np.abs(np.array(handler))\n",
" results[idx_lam][idx_kap] = np.mean(magnetizations), np.std(magnetizations)\n",
"\n",
"#print(results)\n",
"# for idx_lam, lam in enumerate(lambdas):\n",
"# for idx_kap, kap in enumerate(kappas):\n",
"# with h5py.File(file,'r') as f:\n",
"# handler = f[\"magnetizations\"]\n",
"# magnetizations = np.array(handler)\n",
" \n",
"# results[idx_lam][idx_kap] = np.mean(magnetizations), np.std(magnetizations)\n",
"\n",
"# Plotterdeplotterdeplot\n",
"plt.figure()\n",
"for idx_lam in range(len(lambdas)):\n",
" plt.errorbar(kappas,results[idx_lam][:,0],yerr=results[idx_lam][:,1],fmt='-o', label=f\"$\\lambda = {lambdas[idx_lam]}$\")\n",
"plt.xlabel(r\"$\\kappa$\")\n",
"plt.ylabel(r\"$|m|$\")\n",
"plt.title(f\"Absolute field average on $3^4$ lattice$\")\n",
"plt.legend()\n",
"plt.show()"
]
}
],
"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
}