Skip to content

Instantly share code, notes, and snippets.

@yogabonito
Last active April 21, 2020 01:23
Show Gist options
  • Save yogabonito/9612dc53d2a313561c59dacdbe839f97 to your computer and use it in GitHub Desktop.
Save yogabonito/9612dc53d2a313561c59dacdbe839f97 to your computer and use it in GitHub Desktop.
Max-p-Regions heuristic
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from region.max_p_regions.heuristics import MaxPHeu\n",
"from region.p_regions.azp import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import geopandas as gpd\n",
"import numpy as np\n",
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"from shapely.geometry import Polygon\n",
"import libpysal.api as ps_api"
]
},
{
"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": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\nCfg/Oqq8QAVy9TUAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0557522f28>"
]
},
"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",
"areas_gdf = gpd.GeoDataFrame(geometry=geometry)\n",
"\n",
"attr = np.array([350.2, 400.5, 430.8,\n",
" 490.4, 410.9, 450.4,\n",
" 560.1, 500.7, 498.6])\n",
"attr_dict = {area: value \n",
" for area, value in zip(areas_gdf.index,\n",
" attr)}\n",
"\n",
"spatially_extensive_attr = np.array([30, 25, 31,\n",
" 28, 32, 30,\n",
" 35, 27, 33])\n",
"spatially_extensive_attr_dict = {area: value\n",
" for area, value in zip(areas_gdf.index,\n",
" spatially_extensive_attr)}\n",
"\n",
"areas_gdf[\"attr\"] = attr\n",
"areas_gdf[\"spatially_extensive_attr\"] = spatially_extensive_attr\n",
"\n",
"areas_gdf.plot(column=\"attr\")\n",
"plt.gca().invert_yaxis()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"adj, graph, neighbor_dict, w = convert_from_geodataframe(areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solving the Max-p-Regions Problem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Local Search: AZP"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n6zdDIvbbAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0557534da0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"maxp = MaxPHeu(random_state=1)\n",
"maxp.fit_from_scipy_sparse_matrix(adj=adj,\n",
" attr=attr,\n",
" spatially_extensive_attr=spatially_extensive_attr,\n",
" threshold=120,\n",
" max_it=3)\n",
"draw_results(maxp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Local Search: AZP-SA"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n6zdDIvbbAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0557534390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"local_search = AZPSimulatedAnnealing(\n",
" init_temperature=1, max_iterations=float(\"inf\"),\n",
" min_sa_moves=0, nonmoving_steps_before_stop=3,\n",
" random_state=None)\n",
"maxp = MaxPHeu(local_search=local_search, random_state=1)\n",
"maxp.fit_from_scipy_sparse_matrix(adj=adj,\n",
" attr=attr,\n",
" spatially_extensive_attr=spatially_extensive_attr,\n",
" threshold=120,\n",
" max_it=3)\n",
"draw_results(maxp, areas_gdf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Local Search: AZP-Basic-Tabu"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n6zdDIvbbAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0553a99a58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"local_search = AZPBasicTabu(\n",
" tabu_length=3,\n",
" repetitions_before_termination=5,\n",
" random_state=None)\n",
"maxp = MaxPHeu(local_search=local_search, random_state=1)\n",
"maxp.fit_from_scipy_sparse_matrix(adj=adj,\n",
" attr=attr,\n",
" spatially_extensive_attr=spatially_extensive_attr,\n",
" threshold=120,\n",
" max_it=3)\n",
"draw_results(maxp, areas_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