Skip to content

Instantly share code, notes, and snippets.

@jetuk
Created December 12, 2016 23:43
Show Gist options
  • Save jetuk/edfd19bf7a4f3ac9639e460d7724777f to your computer and use it in GitHub Desktop.
Save jetuk/edfd19bf7a4f3ac9639e460d7724777f to your computer and use it in GitHub Desktop.
Simple model scalability in Pywr
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Network generator for Pywr\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from pywr.core import Model\n",
"from pywr_extras.json_utils import add_node, update_node, add_connection\n",
"import json\n",
"from scipy import stats\n",
"import numpy as np\n",
"import itertools\n",
"import pandas"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def make_simple_resource_zone(data, name, supply_loc=9, supply_scale=1, demand_loc=8, demand_scale=3):\n",
" \"\"\"\n",
" Make a very simply WRZ with a supply, WTW and demand.\n",
" \n",
" \n",
" \"\"\"\n",
" \n",
" # Generate supply side maximum flow\n",
" max_flow = stats.norm.rvs(loc=supply_loc, scale=supply_scale, size=1)[0] \n",
" add_node(data, name=\"Supply-{}\".format(name), type=\"input\", cost=-10, max_flow=max(max_flow, 0))\n",
" \n",
" # No flow constraint on WTW\n",
" add_node(data, name=\"WTW-{}\".format(name), type=\"link\", cost=1)\n",
" \n",
" # Generate demand side maximum flow\n",
" max_flow = stats.norm.rvs(loc=demand_loc, scale=demand_scale, size=1)[0] \n",
" add_node(data, name=\"Demand-{}\".format(name), type=\"output\", cost=-500, max_flow=max(max_flow, 0))\n",
" \n",
" add_connection(data, \"Supply-{}\".format(name), \"WTW-{}\".format(name))\n",
" add_connection(data, \"WTW-{}\".format(name), \"Demand-{}\".format(name))\n",
" \n",
" \n",
"def make_simple_connections(data, number_of_resource_zones, density=10, loc=15, scale=5):\n",
" \n",
" num_connections = number_of_resource_zones * density // 100 // 2\n",
" \n",
" connections = np.random.randint(number_of_resource_zones, size=(num_connections, 2))\n",
" max_flow = stats.norm.rvs(loc=loc, scale=scale, size=num_connections)\n",
" \n",
" added = []\n",
" \n",
" for (i, j), mf in zip(connections, max_flow):\n",
" if (i, j) in added or i == j:\n",
" continue\n",
" name = \"Transfer {}-{}\".format(i, j)\n",
" add_node(data, name=name, type=\"link\", max_flow=max(mf, 0), cost=1)\n",
" \n",
" add_connection(data, \"WTW-{}\".format(i), name)\n",
" add_connection(data, name, \"WTW-{}\".format(j))\n",
" \n",
" added.append((i, j))\n",
" \n",
" \n",
"def make_simple_model(number_of_resource_zones=1, connection_density=10):\n",
" \n",
" data = {\n",
" \"metadata\": {\n",
" \"title\": \"Simple 1\",\n",
" \"description\": \"A very simple example.\",\n",
" \"minimum_version\": \"0.1\"\n",
" },\n",
" \"timestepper\": {\n",
" \"start\": \"2015-01-01\",\n",
" \"end\": \"2015-12-31\",\n",
" \"timestep\": 1\n",
" },\n",
" \"nodes\": [],\n",
" \"edges\": []\n",
" }\n",
" \n",
" for i in range(number_of_resource_zones):\n",
" make_simple_resource_zone(data, \"{}\".format(i)) \n",
" \n",
" make_simple_connections(data, number_of_resource_zones, density=connection_density)\n",
" return Model.load(data)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\n",
"def run(model):\n",
" model.reset()\n",
" model.run()\n",
"\n",
"results = []\n",
"\n",
"for nz, density in itertools.product((1, 5, 10, 25, 50, 100, 500), (1, 5, 10)):\n",
" m = make_simple_model(nz)\n",
" m.setup()\n",
" res = %timeit -n 1 -q -o run(m)\n",
" results.append([nz, res.best, len(m.timestepper)/res.best, density])\n",
"\n",
"results = pandas.DataFrame(results, columns=['Number of resource zones', 'Time', 'Time-steps per second', 'Connection density'])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n009z8sknb21uAI499lj69u3L448/vnVbZWUlbdu23fq+ffv2VKaXIaqsrOTaa69lzJgxjeb/NtXg\nBGDDhhwGNRvAjJdnBNKVi4hI9t15/fVcOWcOQ6qqqL64Y8CQqiqumDOHu27I/KnYbB67PpYsWcLy\n5cs5+OCDt9t36KGH8q9//Wub93fddReffPIJ06ZN46WXXuKwww4DUmeB9t57761ndxoDXaIKQJue\nnTlqQBGouRERaTTeePZZRldV1blvSFUVdz/5JJx3XmbHfvLJnR976lQYNy6jY9fH0qVLAejatet2\n+7p27cpXX33Fpk2byM3N5Z577uGkk06ib9++mBmnn346Z511FvPmzeO3v/0tf//737Neb5DU4ARg\nQ26OlmoI0ciRI/nNb34TdRmJoszDp8yzy91puWkTO3okxID8JUvwgQN3OGaHxwZapo+xw2NvSj1x\nm+2HUtatWwdAs2bNttvXvHnzrWNyc3P5xje+wccff8z7779P27Zt6dOnD5C6+fiMM87gkEMO4emn\nn+amm26ivLyc888/n1/96ldZrb8h1OAEYF1TU4MTop49e0ZdQuIo8/Ap8+wyMypyc3HqbkQcqOja\nFXvuufofG6g4+WR86dIdHzs3nCduW7RoAcCGDRu227d+/fptxgDk5eVRVFS09f3//u//8uqrr/LR\nRx/x4YcfMmzYMB566CF69erFWWedRa9evTj33HOz/C0yowYnAOuauhqcEF1yySVRl5A4yjx8yjz7\njhg6lGn33ceQOi4lvZSTw5FnnAE1/tjX69inn77zYxeH88Rt9aWp6ktVNS1dupT27duTm5tb52er\nqqq4/PLLufbaa+nSpQsPP/wwRxxxxNaG5qc//SmPPvroHtvg6CbjAKxtWqUGR0Skkbn61lu5u39/\nXszJoXqWGgdezMnhnv79ueqWzJ+Kzeax66Nbt27stddevPPOO9vtmzlzJgcddNAOP3v//fezdu1a\nrrrqKiB1w3K3bt22OfbixYuDLzoganACUNF0C6xdG3UZIiJSDwUFBTw1YwZvjxjB4MJCTunencGF\nhbw9YgRPzWjYU7HZPHZ9nXbaaTz33HPbNCN/+9vf+Oijj/jv//7vOj+zcuVKRo8ezZ133kleXh4A\nnTt3Zu7cuVvHzJ49my5dumS3+AbQJaoAlNsmncEJ0dy5c+nXr1/UZSSKMg+fMg9HQUEBo8eNg3Hj\n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\nIyIiIhnn/wfSaq8De7ZSkwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fc190137908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"from matplotlib import pylab as plt\n",
"\n",
"%matplotlib inline\n",
"\n",
"fig, ax = plt.subplots(figsize=(6, 6))\n",
"\n",
"for i, grp in results.groupby('Connection density'):\n",
"\n",
" grp.plot(x='Number of resource zones', y='Time-steps per second', ax=ax, label='{}%'.format(i), marker='o')\n",
"\n",
"ax.set_ylabel('Time-steps per second')\n",
"#ax.set_xlabel()\n",
"ax.grid(True)\n",
"fig.savefig('Simple model scalability.png')"
]
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment