Skip to content

Instantly share code, notes, and snippets.

@yogabonito
Created August 29, 2017 14:59
Show Gist options
  • Save yogabonito/5b88bfddcde699c9d0eccb2b71d13c82 to your computer and use it in GitHub Desktop.
Save yogabonito/5b88bfddcde699c9d0eccb2b71d13c82 to your computer and use it in GitHub Desktop.
AZP Simulated Annealing
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AZP-SA demo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The stopping condition of the simulated annealing variant of the AZP as described on pp. 430-431 in Openshaw & Rao (1995) has an issue. If there are equally good clusterings and each AZP-step (step b in the description) jumps from one to another, then there are no nonmoving steps which are required for the algorithm to terminate. That's why the implementation in [commit ee3f08f44](https://github.com/yogabonito/region/commit/ee3f08f441f7367204fc2d1d391e7e3bedacdc80) doesn't terminate in [example 3](#Example-3:-A-tricky-toy-example) below.\n",
"\n",
"In [commit 9502645](https://github.com/yogabonito/region/commit/95026456a70b3cfb7e4454d808c087afde314685) we have added an additional termination condition which allows the `fit` method to return even in [example 3](#Example-3:-A-tricky-toy-example) below."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from region.p_regions.azp import *"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import pandas as pd\n",
"from libpysal import api as ps_api\n",
"import geopandas as gpd\n",
"from shapely.geometry import Polygon"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def convert_from_geodataframe(gdf):\n",
" w = ps_api.Rook.from_dataframe(gdf)\n",
" graph = w.to_networkx()\n",
" adj = nx.to_scipy_sparse_matrix(graph)\n",
" neighbor_dict = w.neighbors\n",
" return adj, graph, neighbor_dict, w"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def draw_results(azp, gdf, invert_y_axis=True):\n",
" gdf[\"region\"] = azp.labels_\n",
" gdf.plot(column=\"region\", cmap='tab20c')\n",
" if invert_y_axis:\n",
" plt.gca().invert_yaxis()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 1: 3x3 lattice"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inputs"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"values = [726.7, 623.6, 487.3,\n",
" 200.4, 245.0, 481.0,\n",
" 170.9, 225.9, 226.9]\n",
"value_arr = np.array(values)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n4PSM+QAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71e8902b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"geometry = [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(3) for x in range(3)\n",
"]\n",
"\n",
"areas_gdf = gpd.GeoDataFrame(\n",
" {\"values\": values},\n",
" geometry=geometry)\n",
"areas_gdf.plot(column=\"values\")\n",
"plt.gca().invert_yaxis()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from dict"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"value_dict = {area: val for area, val in zip(neighbor_dict.keys(), values)}"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71e864438>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=0)\n",
"azpsa.fit_from_dict(neighbor_dict=neighbor_dict,\n",
" n_regions=2,\n",
" data=value_dict,\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from GeoDataFrame"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### &nbsp;&nbsp;&nbsp;&nbsp;without initial solution"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71aed1cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=0)\n",
"azpsa.fit_from_geodataframe(gdf=areas_gdf,\n",
" n_regions=2, \n",
" data=[\"values\"],\n",
" contiguity=\"rook\",\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from networkx"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71aef3978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=0)\n",
"azpsa.fit_from_networkx(graph=graph,\n",
" n_regions=2,\n",
" data=value_arr)\n",
"draw_results(azpsa.azp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from scipy sparse matrix"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQIAAAD8CAYAAACcoKqNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADUFJREFUeJzt3V+IXvWdx/H3Z2NsF5QamgElyRhrA4sWq3ZI43ZZwpZC\nDMVc1EK8qLVYhmYrq9Ab24WU9WbpjQVXUYYq1SLqrrplWiJFqMX2wtSYjX+SrMsoFCMBx6RNlLa6\nKd+9eE7a2XHic0zOeWYS3y948Pz5zfl98zPzyTnnOZxfqgpJH25/tdgFSFp8BoEkg0CSQSAJg0AS\nBoEkDAJJGASSMAgkAWctVscrV66stWvXLlb30ofCc88992ZVjQ1rt2hBsHbtWnbt2rVY3UsfCkl+\n06adlwaSDAJJBoEkDAJJGASSaBkESTYleTnJTJJbF9j/kSSPNPt3JlnbdaGS+jM0CJIsA+4CrgYu\nAa5Lcsm8ZjcCv62qTwLfB77XdaGS+tPmjGA9MFNVr1bVu8DDwJZ5bbYA9zfLjwKfT5LuypTUpzYP\nFK0CXpuzfgD47InaVNWxJEeAjwNvzm2UZBKYBBgfH29VoHkivdeKFSs4fPhwZ8cb6ZOFVTUFTAFM\nTEy0fmvq3b94pbeaThfbNl7sOOA4HLdt48WdHq/NpcHrwJo566ubbQu2SXIW8DHgUBcFSupfmyB4\nFliX5KIkZwNbgel5baaBrzbL1wI/L9+TLp02hl4aNNf8NwE/A5YB91XV3iS3Abuqahq4F/hRkhng\nMIOwkHSaaHWPoKp2ADvmbds+Z/mPwJe7LU3SqPhkoSSDQJJBIAmDQBIGgSQMAkkYBJIwCCRhEEjC\nIJCEQSAJg0ASBoEkDAJJGASSMAgkYRBIwiCQhEEgCYNAEgaBJAwCSRgEkjAIJNEyCJJsSvJykpkk\nty6w/4Yks0n2NJ+vd1+qpL4MnekoyTLgLuALDKZEfzbJdFXtm9f0kaq6qYcaJfWszRnBemCmql6t\nqneBh4Et/ZYlaZTaBMEq4LU56weabfN9KckLSR5NsmaB/SSZTLIrya7Z2dmTKFdSH7q6WfgTYG1V\nXQY8Cdy/UKOqmqqqiaqaGBsb66hrSaeqTRC8Dsz9F351s+3PqupQVb3TrP4A+Ew35UkahTZB8Cyw\nLslFSc4GtgLTcxskuWDO6jXA/u5KlNS3od8aVNWxJDcBPwOWAfdV1d4ktwG7qmoa+Kck1wDHgMPA\nDT3WLKljQ4MAoKp2ADvmbds+Z/nbwLe7LU3SqPhkoSSDQJJBIAmDQBIGgSQMAkkYBJIwCCRhEEjC\nIJCEQSAJg0ASBoEkDAJJGASSMAgkYRBIwiCQhEEgCYNAEgaBJAwCSRgEkmgRBEnuS/JGkpdOsD9J\n7kgy00yCemX3ZUrqU5szgh8Cm95n/9XAuuYzCdx96mVJGqWhQVBVTzOYxuxEtgAP1MAzwHnz5kKU\ntMR1cY9gFfDanPUDzTZJp4lWcx92Jckkg8sHxsfHW//cto0X91XSacVxGHAcIEmnx+siCF4H1sxZ\nX91se4+qmgKmACYmJqptB7Ozs6dS3xlhbGzMcWAwDnf/4pXFLmPRdR2GXVwaTAPXN98ebACOVNXB\nDo4raUSGnhEkeQjYCKxMcgD4LrAcoKruYTBd+mZgBvg98LW+ipXUj6FBUFXXDdlfwDc7q0jSyPlk\noSSDQJJBIAmDQBIGgSQMAkkYBJIwCCRhEEjCIJCEQSAJg0ASBoEkDAJJGASSMAgkYRBIwiCQhEEg\nCYNAEgaBJAwCSRgEkjAIJNEiCJLcl+SNJC+dYP/GJEeS7Gk+27svU1Kf2kyC+kPgTuCB92nzy6r6\nYicVSRq5oWcEVfU0cHgEtUhaJF3dI7gqyfNJnkhyaUfHlDQibS4NhtkNXFhVbyfZDPwYWLdQwyST\nwCTA+Ph4B11L6sIpnxFU1dGqertZ3gEsT7LyBG2nqmqiqibGxsZOtWtJHTnlIEhyfpI0y+ubYx46\n1eNKGp2hlwZJHgI2AiuTHAC+CywHqKp7gGuBbUmOAX8AtlZV9VaxpM4NDYKqum7I/jsZfL0o6TTl\nk4WSDAJJBoEkDAJJGASSMAgkYRBIwiCQhEEgCYNAEgaBJAwCSRgEkjAIJGEQSMIgkIRBIAmDQBIG\ngSQMAkkYBJIwCCRhEEjCIJBEiyBIsibJU0n2Jdmb5OYF2iTJHUlmkryQ5Mp+ypXUhzazIR8DvlVV\nu5OcCzyX5Mmq2jenzdUMZkBeB3wWuLv5r6TTwNAzgqo6WFW7m+W3gP3AqnnNtgAP1MAzwHlJLui8\nWkm9+ED3CJKsBa4Ads7btQp4bc76Ad4bFpKWqDaXBgAkOQd4DLilqo6eTGdJJoFJgPHx8dY/NzY2\ndjLdnXEch4FtGy9e7BIWXZJOj9cqCJIsZxACD1bV4ws0eR1YM2d9dbPt/6mqKWAKYGJiovXU6bOz\ns22bnrHGxsYcBxyH47r+R6HNtwYB7gX2V9XtJ2g2DVzffHuwAThSVQc7rFNSj9qcEXwO+ArwYpI9\nzbbvAOMAVXUPsAPYDMwAvwe+1n2pkvoyNAiq6lfA+16QVFUB3+yqKEmj5ZOFkgwCSQaBJAwCSRgE\nkjAIJGEQSMIgkIRBIAmDQBIGgSQMAkkYBJIwCCRhEEjCIJCEQSAJg0ASBoEkDAJJGASSMAgkYRBI\nwiCQRLspz9YkeSrJviR7k9y8QJuNSY4k2dN8tvdTrqQ+tJny7BjwraraneRc4LkkT1bVvnntfllV\nX+y+REl9G3pGUFUHq2p3s/wWsB9Y1XdhkkbnA90jSLIWuALYucDuq5I8n+SJJJd2UJukEWlzaQBA\nknOAx4BbqurovN27gQur6u0km4EfA+sWOMYkMAkwPj5+0kVL6larM4IkyxmEwINV9fj8/VV1tKre\nbpZ3AMuTrFyg3VRVTVTVxNjY2CmWLqkrbb41CHAvsL+qbj9Bm/ObdiRZ3xz3UJeFSupPm0uDzwFf\nAV5MsqfZ9h1gHKCq7gGuBbYlOQb8AdhaVdVDvZJ6MDQIqupXQIa0uRO4s6uiJI2WTxZKMggkGQSS\nMAgkYRBIwiCQhEEgCYNAEgaBJAwCSRgEkjAIJGEQSMIgkIRBIAmDQBIGgSQMAkkYBJIwCCRhEEjC\nIJCEQSAJg0AS7aY8+2iSXzczHe9N8i8LtPlIkkeSzCTZ2cyaLOk00eaM4B3gH6rq08DlwKYkG+a1\nuRH4bVV9Evg+8L1uy5TUp6FBUANvN6vLm8/8eQ23APc3y48Cnz8+Kaqkpa/ttOjLmglQ3wCerKqd\n85qsAl4DqKpjwBHg410WKqk/bWZDpqr+BFye5DzgP5N8qqpe+qCdJZkEJgHGx8db/cyKFSsYGxv7\noF2dcZI4DjgOx61YsaLT47UKguOq6ndJngI2AXOD4HVgDXAgyVnAx4BDC/z8FDAFMDEx0Wra9MOH\nD3+QEiWdhDbfGow1ZwIk+WvgC8B/z2s2DXy1Wb4W+HlVtfpFl7T42pwRXADcn2QZg+D496r6aZLb\ngF1VNQ3cC/woyQxwGNjaW8WSOjc0CKrqBeCKBbZvn7P8R+DL3ZYmaVR8slCSQSDJIJCEQSAJg0AS\nkMX6uj/JLPCbFk1XAm/2XI41WMOZWsOFVTX0UcxFC4K2kuyqqglrsAZr6K8GLw0kGQSSTo8gmFrs\nArCG46xh4IyrYcnfI5DUv9PhjEBSz5ZMECTZlOTl5gWoty6wv/cXpLao4YYks0n2NJ+vd9z/fUne\nSLLgS18ycEdT3wtJruyy/5Y1bExyZM4YbF+o3SnWsCbJU0n2NS/MvXmBNr2ORcsaeh2Lkb44uKoW\n/QMsA14BPgGcDTwPXDKvzT8C9zTLW4FHFqGGG4A7exyHvweuBF46wf7NwBNAgA3AzkWoYSPw057/\nPlwAXNksnwv8zwL/L3odi5Y19DoWzZ/tnGZ5ObAT2DCvTSe/F0vljGA9MFNVr1bVu8DDDF6IOlff\nL0htU0OvquppBu9zOJEtwAM18AxwXpILRlxD76rqYFXtbpbfAvYzeC/mXL2ORcsaetX82Uby4uCl\nEgR/fvlp4wDvHfS+X5DapgaALzWnoo8mWdNh/220rbFvVzWnq08kubTPjppT3SsY/Gs418jG4n1q\ngJ7HYlQvDl4qQXC6+AmwtqouA57kL0n8YbKbwWOrnwb+DfhxXx0lOQd4DLilqo721c8p1ND7WFTV\nn6rqcmA1sD7Jp7ruA5ZOEBx/+elxq5ttC7Z5vxek9llDVR2qqnea1R8An+mw/zbajFOvquro8dPV\nqtoBLE+ysut+kixn8Av4YFU9vkCT3sdiWA2jGovm+L8Djr84eK5Ofi+WShA8C6xLclGSsxnc9Jie\n16bvF6QOrWHeNeg1DK4bR2kauL65Y74BOFJVB0dZQJLzj1+DJlnP4O9Ql4FMc/x7gf1VdfsJmvU6\nFm1q6HssMsoXB/d1x/Mk7pBuZnBn9hXgn5tttwHXNMsfBf4DmAF+DXxiEWr4V2Avg28UngL+puP+\nHwIOAv/L4Jr3RuAbwDfqL3eR72rqexGY6GEMhtVw05wxeAb42x5q+DsGN8VeAPY0n82jHIuWNfQ6\nFsBlwH81NbwEbO/r98InCyUtmUsDSYvIIJBkEEgyCCRhEEjCIJCEQSAJg0AS8H9fb4wMH9y3CgAA\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71ada1eb8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=0)\n",
"azpsa.fit_from_networkx(graph=graph,\n",
" n_regions=2,\n",
" data=value_arr,\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from W object"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71acad898>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=0)\n",
"azpsa.fit_from_w(w=w,\n",
" n_regions=2,\n",
" data=value_arr,\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 2: Islands"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"islands_geometry = [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(3) for x in range(3)\n",
"] + [\n",
" Polygon([(x, y),\n",
" (x, y+1),\n",
" (x+1, y+1),\n",
" (x+1, y)]) for y in range(4,6) for x in range(5,8)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"islands_gdf = gpd.GeoDataFrame(\n",
" {\"values\": [726.7, 623.6, 487.3,\n",
" 200.4, 245.0, 481.0,\n",
" 170.9, 225.9, 226.9] +\n",
" [100, 120, 190,\n",
" 175, 185, 210]},\n",
" geometry=islands_geometry)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\ngpKaZglKapolKKlplqCkplmCkppmCUpqmiUoqWmWoKSmWYKSmmYJSmqaJSipaZagpKZZgpKaZglK\napolKKlplqCkplmCkppmCUpq2lQXX0/yLPAy8DrwWlWNugwlSX2ZqgTHPlRVL3aWRJIG4HJYUtOm\nLcEC7kmykGSuy0CS1KdU1eRByfqq2pXkPcC9wFVV9eABY+aAOYDZ2dkzFxcXu8gr9SLJ0BE0loS9\ne/eu9D4L0x67mGqfYFXtGv+7O8kW4CzgwQPGzAPzAKPRaHKzSoe5G//s7wed/5NXfpgb/+Ifhs3w\nW+ez+dpvD5rhil/7hU4ff+JyOMnRSY7Z9znwEWBbp6kkqSfTbAm+F9gyXh6sBb5eVXd3mkqSejKx\nBKvqGeBnesgiSb3zJTKSmmYJSmqaJSipaZagpKZZgpKaZglKapolKKlplqCkplmCkppmCUpqmiUo\nqWmWoKSmWYKSmmYJSmqaJSipaZagpKZZgpKaZglKapolKKlplqCkplmCkppmCUpqmiUoqWmWoKSm\nTVWCSY5LcluSp5LsSPKBroNJUh/WTjnuGuDuqvrlJO8E3tVhJknqzcQSTPITwDnApwCq6lXg1W5j\nSVI/plkOnwy8AHw1yeNJrk1ydMe5JKkXqao3HpCMgIeBs6vqkSTXAC9V1R8dMG4OmAOYnZ09c3Fx\nsaPIUvfWrVvHnj17Bs2QhEnPzxYyzMzMsLS0tKL7JFmoqtE0Y6fZJ7gT2FlVj4xv3wZ8/sBBVTUP\nzAOMRqNhf2rSm7TSJ53euiYuh6vq34Hnkpwy/tL5wJOdppKknkx7dPgq4KbxkeFngE93F0mS+jNV\nCVbVE8BU62tJeivxjBFJTbMEJTXNEpTUNEtQUtMsQUlNm3jGyCE9aPICsNJTRo4HXlz1MGYww1tz\nfjO8uQw/VVUnTDOwkxI8FEkem/Y0FzOY4e0+vxn6y+ByWFLTLEFJTTucSnB+6ACYYR8zDD8/mGGf\nTjMcNvsEJWkIh9OWoCT1bvASTHJhkh8keTrJ/3ufwp4yXJ9kd5JtA81/UpL7kzyZZHuSTQNkODLJ\nd5N8b5zh6r4z7JdlzfhdzO8caP5nk3w/yRNJHhsow6AXN0tyyvj/v+/jpSSf7TPDOMfvjn8ftyW5\nOcmRqz7HkMvhJGuAfwYuYPnNWx8FLquqXt+vMMk5wCvAjVV1Wp9zj+c/ETixqrYmOQZYAH6xz59D\nkgBHV9UrSY4AHgI2VdXDfWXYL8vvsfyuRcdW1cUDzP8sMKqqwV4fl2Qz8I9Vde2+i5tV1Y8GyrIG\n2AW8v6p6e8v4JOtZ/j08tar+O8mtwF1VdcNqzjP0luBZwNNV9cz4Ak63AB/vO0RVPQgM9lbCVfV8\nVW0df/4ysANY33OGqqpXxjePGH/0/hcyyQbgY8C1fc99uNjv4mbXwfLFzYYqwLHzgX/pswD3sxY4\nKslalq9y+W+rPcHQJbgeeG6/2zvp+cl/uEmyETgdeOSNR3Yy95okTwC7gXv3u6RCn74CfA7YO8Dc\n+xRwT5KF8bVz+na4XdzsUuDmvietql3AHwM/BJ4H/rOq7lnteYYuQe0nybuB24HPVtVLfc9fVa9X\n1c8CG4CzkvS6ayDJxcDuqlroc96D+GBVnQFcBPz2eHdJn9YCZwB/WVWnA//FQa7r04fxUvwS4G8H\nmHuG5ZXhycBPAkcn+cRqzzN0Ce4CTtrv9obx15oz3g93O3BTVd0xZJbx0ut+4MKepz4buGS8T+4W\n4LwkX+s5w74tEKpqN7CF5d02fTrYxc3O6DnDPhcBW6vqPwaY+8PAv1bVC1X1v8AdwM+v9iRDl+Cj\nwPuSnDz+i3Mp8M2BM/VufFDiOmBHVX15oAwnJDlu/PlRLB+seqrPDFX1haraUFUbWf5duK+qVv0v\n/xtJcvT44BTjJehHgF5fNXCYXdzsMgZYCo/9EPi5JO8aP0fOZ3l/+aqa9kJLnaiq15JcCXwLWANc\nX1Xb+86R5GbgXOD4JDuBL1bVdT1GOBu4HPj+eJ8cwB9U1V09ZjgR2Dw+EvgO4NaqGuQlKgN7L7Bl\n+TnHWuDrVXX3ADkGv7jZ+I/ABcBv9D03wPg657cBW4HXgMfp4OwRzxiR1LShl8OSNChLUFLTLEFJ\nTbMEJTXNEpTUNEtQUtMsQUlNswQlNe3/AIZAYntpT0xsAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71ad44e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"islands_gdf.plot(column=\"values\")\n",
"plt.gca().invert_yaxis()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering: AZP-SA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### &nbsp;&nbsp;&nbsp;&nbsp;without initial solution"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAUEAAAD8CAYAAADpLRYuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADLZJREFUeJzt3W+IZfV9x/H3J7MGjTF1xGmwu05XQhCk0KoX09YSrNag\niSR90AcKCbQUpoRGTFsISaGUPOizEpIHRRjUxhKjWP9AEGsUorVCY9xZTbPumqLWjbu13ZUxjZZS\nq/vtgzkbpltxzqxzzhnze79gcO7smfv77jrznnPOvXdOqgpJatV7ph5AkqZkBCU1zQhKapoRlNQ0\nIyipaUZQUtOMoKSmGUFJTTOCkpq2Y4g7Pfvss2v37t1D3LUkbWhlZeXlqlros+0gEdy9ezd79uwZ\n4q4laUNJDvbd1sNhSU0zgpKaZgQlNc0ISmqaEZTUtF4RTHJVkh8meTbJF4ceSpLGsmEEk8wBfwVc\nDVwAXJfkgqEHk6Qx9NkTvAR4tqqer6rXgTuATw07liSNo8+TpXcCL667fQj4yIkbJVkClgAWFxc3\nPUiSTX+OhjE/P8/q6urUY0ij2LJXjFTVMrAMMJvNTurqTW/uv2+rxjkpcxdc4wzdDFIr+hwOHwbO\nXXd7V/cxSXrX6xPBJ4APJzkvyXuBa4FvDTuWJI1jw8PhqnojyeeAbwNzwC1V9fTgk0nSCHqdE6yq\n+4H7B55FkkbnK0YkNc0ISmqaEZTUNCMoqWlGUFLTjKCkphlBSU0zgpKaZgQlNc0ISmqaEZTUNCMo\nqWlGUFLTjKCkphlBSU0zgpKaZgQlNc0ISmqaEZTUNCMoqWlGUFLTjKCkphlBSU0zgpKatmEEk9yS\n5EiSfWMMJElj6rMn+HXgqoHnkKRJbBjBqnoUWB1hFkka3Y6tuqMkS8ASwOLi4kndx9wF12zVOCfN\nGSDJpOtLY9qyCFbVMrAMMJvN6mTu48ZHntuqcU7KZy/70LaY4c399006w9QRlsbko8OSmmYEJTWt\nz1Nkbgf+ETg/yaEkvz/8WJI0jg3PCVbVdWMMIklT8HBYUtOMoKSmGUFJTTOCkppmBCU1zQhKapoR\nlNQ0IyipaUZQUtOMoKSmGUFJTTOCkppmBCU1zQhKapoRlNQ0IyipaUZQUtOMoKSmGUFJTTOCkppm\nBCU1zQhKapoRlNS0PhdfPzfJw0n2J3k6yQ1jDCZJY9jw4uvAG8CfVNXeJGcAK0keqqr9A88mSYPb\ncE+wql6qqr3d+68CB4CdQw8mSWPY1DnBJLuBC4HHhxhGksaWquq3YfJ+4O+Bv6iqe97iz5eAJYDF\nxcWLDx48uLlBkk1tr+Ek4dixY1OPIZ20JCtVNeuzbZ9zgiQ5BbgbuO2tAghQVcvAMsBsNutX1hPc\n+MhzJ/NpW+azl33IGboZpFb0eXQ4wM3Agar6yvAjSdJ4+pwTvBT4DHB5kqe6t48PPJckjWLDw+Gq\negzwhJ2kn0m+YkRS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KS\nmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpG0YwyalJ\nvpfk+0meTvLlMQaTpDHs6LHNfwOXV9VrSU4BHkvyd1X13YFnk6TBbRjBqirgte7mKd1bDTmUJI2l\n1znBJHNJngKOAA9V1ePDjiVJ48jajl7PjZMzgXuB66tq3wl/tgQsASwuLl588ODBTQ1y1lln8cor\nr2zqc7ZaEjbz7/GzOsP8/Dyrq6uTziC9E0lWqmrWZ9s+5wR/qqp+nORh4Cpg3wl/tgwsA8xms01/\nF/tNJ2kKfR4dXuj2AElyGnAl8MzQg0nSGPrsCZ4D3JpkjrVo3llV9w07liSNo8+jw/8EXDjCLJI0\nOl8xIqlpRlBS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KSmmYE\nJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1LTeEUwyl+TJJPcNOZAk\njWkze4I3AAeGGkSSptArgkl2AZ8Abhp2HEkaV989wa8CXwCODTiLJI1ux0YbJLkGOFJVK0kue5vt\nloAlgMXFxS0bUJpCkqlHUGd+fp7V1dXB7n/DCAKXAp9M8nHgVOADSb5RVZ9ev1FVLQPLALPZrLZ8\nUmlke/e8OOn6F83O3RYzHD16dNIZFhYWBr3/DQ+Hq+pLVbWrqnYD1wLfOTGAkvRu5fMEJTWtz+Hw\nT1XVI8Ajg0wiSRNwT1BS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlN\nM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpvS6+\nnuQF4FXgTeCNqpoNOZQkjaVXBDu/WVUvDzaJJE3Aw2FJTesbwQIeTLKSZGnIgSRpTKmqjTdKdlbV\n4SQ/DzwEXF9Vj56wzRKwBLC4uHjxwYMHh5hXGkWSqUdQJwnHjh3b7Oes9H3sotc5wao63P33SJJ7\ngUuAR0/YZhlYBpjNZhuXVdrmjh49Oun6CwsLztDNMKQND4eTnJ7kjOPvAx8D9g06lSSNpM+e4AeB\ne7vDgx3AN6vqgUGnkqSRbBjBqnoe+OURZpGk0fkUGUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS\n04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU1DQjKKlpRlBS04ygpKYZQUlNM4KSmmYEJTXNCEpqmhGU\n1DQjKKlpRlBS04ygpKb1imCSM5PcleSZJAeS/NrQg0nSGHb03O5rwANV9TtJ3gu8b8CZJGk0G0Yw\nyc8BHwV+F6CqXgdeH3YsSRpHn8Ph84CjwF8neTLJTUlOH3guSRpFn8PhHcBFwPVV9XiSrwFfBP5s\n/UZJloAlgMXFxa2eUxrV/Pw8CwsLk86QxBlY+38xpD4RPAQcqqrHu9t3sRbB/6OqloFlgNlsVls2\noTSB1dXVqUfQSDY8HK6qfwNeTHJ+96ErgP2DTiVJI+n76PD1wG3dI8PPA7833EiSNJ5eEayqp4DZ\nwLNI0uh8xYikphlBSU0zgpKaZgQlNc0ISmpaqrb+ec1JjgIHN/lpZwMvb/kwzuAM7871neGdzfCL\nVdXrpS6DRPBkJNlTVZM+DccZnGG7rO8M483g4bCkphlBSU3bThFcnnoAnOE4Z5h+fXCG4wadYduc\nE5SkKWynPUFJGt3kEUxyVZIfJnk2yf/7PYUjzXBLkiNJ9k20/rlJHk6yP8nTSW6YYIZTk3wvyfe7\nGb489gzrZpnrfov5fROt/0KSHyR5KsmeiWaY9OJmSc7v/v7H336S5PNjztDN8Ufd1+O+JLcnOXXL\n15jycDjJHPDPwJWs/fLWJ4DrqmrU31eY5KPAa8DfVNUvjbl2t/45wDlVtTfJGcAK8Ntj/jskCXB6\nVb2W5BTgMeCGqvruWDOsm+WPWfutRR+oqmsmWP8FYFZVkz0/LsmtwD9U1U3HL25WVT+eaJY54DDw\nkara7PN/38m6O1n7Orygqv4ryZ3A/VX19a1cZ+o9wUuAZ6vq+e4CTncAnxp7iKp6FJjsVwlX1UtV\ntbd7/1XgALBz5Bmqql7rbp7SvY3+EzLJLuATwE1jr71drLu42c2wdnGzqQLYuQJ4bswArrMDOC3J\nDtaucvmvW73A1BHcCby47vYhRv7m326S7AYuBB5/+y0HWXsuyVPAEeChdZdUGNNXgS8AxyZY+7gC\nHkyy0l07Z2zb7eJm1wK3j71oVR0G/hL4EfAS8B9V9eBWrzN1BLVOkvcDdwOfr6qfjL1+Vb1ZVb8C\n7AIuSTLqqYEk1wBHqmplzHXfwm9U1UXA1cAfdqdLxnT84mY3VtWFwH/yFtf1GUN3KP5J4G8nWHue\ntSPD84BfAE5P8umtXmfqCB4Gzl13e1f3seZ05+HuBm6rqnumnKU79HoYuGrkpS8FPtmdk7sDuDzJ\nN0ae4fgeCFV1BLiXtdM2Y3qri5tdNPIMx10N7K2qf59g7d8C/qWqjlbV/wD3AL++1YtMHcEngA8n\nOa/7iXMt8K2JZxpd96DEzcCBqvrKRDMsJDmze/801h6sembMGarqS1W1q6p2s/a18J2q2vKf/G8n\nyendg1N0h6AfA0Z91sA2u7jZdUxwKNz5EfCrSd7XfY9cwdr58i3V90JLg6iqN5J8Dvg2MAfcUlVP\njz1HktuBy4CzkxwC/ryqbh5xhEuBzwA/6M7JAfxpVd0/4gznALd2jwS+B7izqiZ5isrEPgjcu/Y9\nxw7gm1X1wARzTH5xs+6HwJXAH4y9NkB3nfO7gL3AG8CTDPDqEV8xIqlpUx8OS9KkjKCkphlBSU0z\ngpKaZgQlNc0ISmqaEZTUNCMoqWn/CybEOmJuk9kXAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71af25940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1, max_iterations=2,\n",
" random_state=1)\n",
"azpsa.fit_from_geodataframe(gdf=islands_gdf,\n",
" n_regions=4, \n",
" data=[\"values\"],\n",
" contiguity=\"rook\",\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, islands_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example 3: A tricky toy example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inputs"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fe71e7a9908>"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nGKteEXakAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71aead7b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"squares = [\n",
" Polygon([(x, 0),\n",
" (x, 1),\n",
" (x+1, 1),\n",
" (x+1, 0)]) for x in range(3)\n",
"]\n",
"values = [0, 1, 0]\n",
"squares_gdf = gpd.GeoDataFrame({\"values\": values},\n",
" geometry=squares)\n",
"squares_gdf.plot(column=\"values\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Clustering"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fe71accb780>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"azpsa = AZPSimulatedAnnealing(init_temperature=1,\n",
" max_iterations=3, random_state=0,\n",
" repetitions_before_termination=2)\n",
"azpsa.fit_from_geodataframe(gdf=squares_gdf,\n",
" n_regions=2,\n",
" data=[\"values\"],\n",
" contiguity=\"rook\",\n",
" cooling_factor=0.85)\n",
"draw_results(azpsa.azp, squares_gdf)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.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