├── .gitignore ├── LICENSE.TXT ├── README.md ├── demo.ipynb ├── img ├── example1.png ├── example2.png └── mclp_math.png └── mclp.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Mac files 2 | 3 | .DS_Store 4 | *.log 5 | 6 | # Byte-compiled / optimized / DLL files 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | 11 | # IDE files 12 | 13 | .kdev4/ 14 | input/ 15 | output/ 16 | case_study/data/ 17 | *.kdev4 18 | 19 | 20 | # C extensions 21 | *.so 22 | 23 | # Distribution / packaging 24 | .Python 25 | env/ 26 | build/ 27 | develop-eggs/ 28 | dist/ 29 | downloads/ 30 | eggs/ 31 | .eggs/ 32 | lib/ 33 | lib64/ 34 | parts/ 35 | sdist/ 36 | var/ 37 | *.egg-info/ 38 | .installed.cfg 39 | *.egg 40 | 41 | # shp files generated 42 | sql/PartitionMerge/trip_shp/ 43 | validation/shp/ 44 | results/ 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .coverage 60 | .coverage.* 61 | .cache 62 | nosetests.xml 63 | coverage.xml 64 | *,cover 65 | .hypothesis/ 66 | 67 | # Translations 68 | *.mo 69 | *.pot 70 | 71 | # Django stuff: 72 | *.log 73 | local_settings.py 74 | 75 | # Flask instance folder 76 | instance/ 77 | 78 | # Scrapy stuff: 79 | .scrapy 80 | 81 | # Sphinx documentation 82 | docs/_build/ 83 | 84 | # PyBuilder 85 | target/ 86 | 87 | # IPython Notebook 88 | .ipynb_checkpoints 89 | 90 | # pyenv 91 | .python-version 92 | 93 | # celery beat schedule file 94 | celerybeat-schedule 95 | 96 | # dotenv 97 | .env 98 | 99 | # Spyder project settings 100 | .spyderproject 101 | 102 | # Object files 103 | *.o 104 | *.ko 105 | *.obj 106 | *.elf 107 | 108 | # Precompiled Headers 109 | *.gch 110 | *.pch 111 | 112 | # Libraries 113 | *.lib 114 | *.a 115 | *.la 116 | *.lo 117 | 118 | # Shared objects (inc. Windows DLLs) 119 | *.dll 120 | *.so 121 | *.so.* 122 | *.dylib 123 | 124 | # Executables 125 | *.exe 126 | *.out 127 | *.app 128 | *.i*86 129 | *.x86_64 130 | *.hex 131 | 132 | # Debug files 133 | *.dSYM/ 134 | *.su 135 | 136 | # CPP ignores 137 | 138 | # Prerequisites 139 | *.d 140 | 141 | # Compiled Object files 142 | *.slo 143 | *.lo 144 | *.o 145 | *.obj 146 | 147 | # Precompiled Headers 148 | *.gch 149 | *.pch 150 | 151 | # Compiled Dynamic libraries 152 | *.so 153 | *.dylib 154 | *.dll 155 | 156 | # Fortran module files 157 | *.mod 158 | *.smod 159 | 160 | # Compiled Static libraries 161 | *.lai 162 | *.la 163 | *.a 164 | *.lib 165 | 166 | # Executables 167 | *.exe 168 | *.out 169 | *.app 170 | 171 | bin/ 172 | -------------------------------------------------------------------------------- /LICENSE.TXT: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Can Yang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Maximum coverage location problem (MCLP) 2 | 3 | This repository provides a Python implementation of solving a classical instance of 4 | the **maximum coverage location problem** described in Church 1974. 5 | 6 | The problem is defined as: given **N** points, find **K** circles with radius of **r** 7 | to cover as many points as possible. 8 | 9 | - Example 1: Select 20 circles with radius of 0.1 to cover 300 points (uniform distribution) 10 | 11 | ![example1](img/example1.png) 12 | 13 | (M is the number of candidate sites and C is the number of points covered) 14 | 15 | - Example 2: Select 20 circles with radius of 0.2 to cover 300 points (moon distribution) 16 | 17 | ![example2](img/example2.png) 18 | 19 | 20 | ### Problem formulation 21 | 22 | The method randomly generates a set of candidate sites within the region 23 | of the input points. The problem is then solved by integer programming. 24 | 25 | The mathematical formulation is given below: 26 | 27 | ![math](img/mclp_math.png) 28 | 29 | 30 | ### Demo and usage 31 | 32 | ``` 33 | from mclp import * 34 | import numpy as np 35 | Npoints = 300 36 | from sklearn.datasets import make_moons 37 | points,_ = make_moons(Npoints,noise=0.15) 38 | 39 | # Number of sites to select 40 | K = 20 41 | 42 | # Service radius of each site 43 | radius = 0.2 44 | 45 | # Candidate site size (random sites generated) 46 | M = 100 47 | 48 | # Run mclp 49 | # opt_sites is the location of optimal sites 50 | # f is the number of points covered 51 | opt_sites,f = mclp(points,K,radius,M) 52 | 53 | # Plot the result 54 | plot_result(points,opt_sites,radius) 55 | ``` 56 | 57 | Check the jupyter-notebook [demo.ipynb](demo.ipynb). 58 | 59 | To run the example interactively, inside the project directory type the command 60 | ``` 61 | jupyter-notebook 62 | ``` 63 | 64 | ### Requirements 65 | 66 | - Python 2.7 67 | - Scipy, Numpy (available as part of [Anaconda](https://www.anaconda.com/)) 68 | - [Shapely](https://github.com/Toblerity/Shapely) 69 | - [Gurobi](https://www.gurobi.com/), commercial software (free for academic usage) 70 | 71 | It is recommended to use Anaconda directly, where the packages can be installed with `pip` or `conda`. 72 | 73 | ``` 74 | pip install shapely 75 | conda config --add channels http://conda.anaconda.org/gurobi 76 | conda install gurobi 77 | ``` 78 | 79 | ### Contact 80 | 81 | Can Yang, Ph.D. student at KTH, Royal Institute of Technology in Sweden 82 | 83 | Email: cyang(at)kth.se 84 | 85 | Homepage: https://people.kth.se/~cyang/ 86 | 87 | ### Reference 88 | 89 | - [Church R, ReVelle C. The maximal covering location problem. Papers in regional science, 1974, 32(1): 101-118.](https://link.springer.com/article/10.1007/BF01942293) 90 | - http://examples.gurobi.com/facility-location/ 91 | -------------------------------------------------------------------------------- /demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from mclp import *" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 2, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "%matplotlib inline" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": {}, 24 | "source": [ 25 | "### Generate input data" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 3, 31 | "metadata": {}, 32 | "outputs": [], 33 | "source": [ 34 | "import numpy as np\n", 35 | "Npoints = 300\n", 36 | "# Generate points in uniform distribution \n", 37 | "# points = np.random.rand(Npoints,2)\n", 38 | "\n", 39 | "# Generate points in moon distribution\n", 40 | "from sklearn.datasets import make_moons\n", 41 | "points,_ = make_moons(Npoints,noise=0.15)" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 4, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "image/png": "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\n", 52 | "text/plain": [ 53 | "
" 54 | ] 55 | }, 56 | "metadata": {}, 57 | "output_type": "display_data" 58 | } 59 | ], 60 | "source": [ 61 | "# Plot input data\n", 62 | "plot_input(points)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "markdown", 67 | "metadata": {}, 68 | "source": [ 69 | "### Run the optimization" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": 5, 75 | "metadata": {}, 76 | "outputs": [ 77 | { 78 | "name": "stdout", 79 | "output_type": "stream", 80 | "text": [ 81 | "----- Configurations -----\n", 82 | " Number of points 300\n", 83 | " K 20\n", 84 | " Radius 0.2\n", 85 | " M 100\n", 86 | "Academic license - for non-commercial use only\n", 87 | "----- Output -----\n", 88 | " Running time : 0.063560962677 seconds\n", 89 | " Optimal coverage points: 208\n" 90 | ] 91 | }, 92 | { 93 | "data": { 94 | "image/png": "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\n", 95 | "text/plain": [ 96 | "
" 97 | ] 98 | }, 99 | "metadata": {}, 100 | "output_type": "display_data" 101 | } 102 | ], 103 | "source": [ 104 | "# Number of sites to select\n", 105 | "K = 20\n", 106 | "\n", 107 | "# Service radius of each site\n", 108 | "radius = 0.2\n", 109 | "\n", 110 | "# Candidate site size (random sites generated)\n", 111 | "M = 100\n", 112 | "\n", 113 | "# Run mclp opt_sites is the location of optimal sites and f is the points covered\n", 114 | "opt_sites,f = mclp(points,K,radius,M)\n", 115 | "\n", 116 | "# Plot the result\n", 117 | "plot_result(points,opt_sites,radius)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "### Run another configuration" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 6, 130 | "metadata": {}, 131 | "outputs": [ 132 | { 133 | "name": "stdout", 134 | "output_type": "stream", 135 | "text": [ 136 | "----- Configurations -----\n", 137 | " Number of points 300\n", 138 | " K 20\n", 139 | " Radius 0.2\n", 140 | " M 10000\n", 141 | "----- Output -----\n", 142 | " Running time : 1.27111291885 seconds\n", 143 | " Optimal coverage points: 264\n" 144 | ] 145 | }, 146 | { 147 | "data": { 148 | "image/png": "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\n", 149 | "text/plain": [ 150 | "
" 151 | ] 152 | }, 153 | "metadata": {}, 154 | "output_type": "display_data" 155 | } 156 | ], 157 | "source": [ 158 | "K = 20\n", 159 | "radius = 0.2\n", 160 | "M = 10000\n", 161 | "opt_sites,f = mclp(points,K,radius,M)\n", 162 | "plot_result(points,opt_sites,radius)" 163 | ] 164 | }, 165 | { 166 | "cell_type": "code", 167 | "execution_count": null, 168 | "metadata": {}, 169 | "outputs": [], 170 | "source": [] 171 | } 172 | ], 173 | "metadata": { 174 | "kernelspec": { 175 | "display_name": "Python 2", 176 | "language": "python", 177 | "name": "python2" 178 | }, 179 | "language_info": { 180 | "codemirror_mode": { 181 | "name": "ipython", 182 | "version": 2 183 | }, 184 | "file_extension": ".py", 185 | "mimetype": "text/x-python", 186 | "name": "python", 187 | "nbconvert_exporter": "python", 188 | "pygments_lexer": "ipython2", 189 | "version": "2.7.16" 190 | }, 191 | "toc": { 192 | "base_numbering": 1, 193 | "nav_menu": {}, 194 | "number_sections": true, 195 | "sideBar": true, 196 | "skip_h1_title": false, 197 | "title_cell": "Table of Contents", 198 | "title_sidebar": "Contents", 199 | "toc_cell": false, 200 | "toc_position": {}, 201 | "toc_section_display": true, 202 | "toc_window_display": true 203 | } 204 | }, 205 | "nbformat": 4, 206 | "nbformat_minor": 2 207 | } 208 | -------------------------------------------------------------------------------- /img/example1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyang-kth/maximum-coverage-location/bf7fd0bbf7fc2247a09b42e55e247aa8f72a0bee/img/example1.png -------------------------------------------------------------------------------- /img/example2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyang-kth/maximum-coverage-location/bf7fd0bbf7fc2247a09b42e55e247aa8f72a0bee/img/example2.png -------------------------------------------------------------------------------- /img/mclp_math.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyang-kth/maximum-coverage-location/bf7fd0bbf7fc2247a09b42e55e247aa8f72a0bee/img/mclp_math.png -------------------------------------------------------------------------------- /mclp.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | Python implementation of the maximum coverage location problem. 4 | 5 | The program randomly generates a set of candidate sites, among 6 | which the K optimal candidates are selected. The optimization 7 | problem is solved by integer programming. 8 | 9 | Author: Can Yang 10 | Date: 2019-11-22 11 | 12 | MIT License 13 | 14 | Copyright (c) 2019 Can Yang 15 | 16 | Permission is hereby granted, free of charge, to any person obtaining a copy 17 | of this software and associated documentation files (the "Software"), to deal 18 | in the Software without restriction, including without limitation the rights 19 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 20 | copies of the Software, and to permit persons to whom the Software is 21 | furnished to do so, subject to the following conditions: 22 | 23 | The above copyright notice and this permission notice shall be included in all 24 | copies or substantial portions of the Software. 25 | 26 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 29 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 31 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 | SOFTWARE. 33 | 34 | """ 35 | 36 | 37 | import numpy as np 38 | from scipy.spatial import distance_matrix 39 | from gurobipy import * 40 | from scipy.spatial import ConvexHull 41 | from shapely.geometry import Polygon, Point 42 | from numpy import random 43 | 44 | def generate_candidate_sites(points,M=100): 45 | ''' 46 | Generate M candidate sites with the convex hull of a point set 47 | Input: 48 | points: a Numpy array with shape of (N,2) 49 | M: the number of candidate sites to generate 50 | Return: 51 | sites: a Numpy array with shape of (M,2) 52 | ''' 53 | hull = ConvexHull(points) 54 | polygon_points = points[hull.vertices] 55 | poly = Polygon(polygon_points) 56 | min_x, min_y, max_x, max_y = poly.bounds 57 | sites = [] 58 | while len(sites) < M: 59 | random_point = Point([random.uniform(min_x, max_x), 60 | random.uniform(min_y, max_y)]) 61 | if (random_point.within(poly)): 62 | sites.append(random_point) 63 | return np.array([(p.x,p.y) for p in sites]) 64 | 65 | def mclp(points,K,radius,M): 66 | """ 67 | Solve maximum covering location problem 68 | Input: 69 | points: input points, Numpy array in shape of [N,2] 70 | K: the number of sites to select 71 | radius: the radius of circle 72 | M: the number of candidate sites, which will randomly generated inside 73 | the ConvexHull wrapped by the polygon 74 | Return: 75 | opt_sites: locations K optimal sites, Numpy array in shape of [K,2] 76 | f: the optimal value of the objective function 77 | """ 78 | print('----- Configurations -----') 79 | print(' Number of points %g' % points.shape[0]) 80 | print(' K %g' % K) 81 | print(' Radius %g' % radius) 82 | print(' M %g' % M) 83 | import time 84 | start = time.time() 85 | sites = generate_candidate_sites(points,M) 86 | J = sites.shape[0] 87 | I = points.shape[0] 88 | D = distance_matrix(points,sites) 89 | mask1 = D<=radius 90 | D[mask1]=1 91 | D[~mask1]=0 92 | # Build model 93 | m = Model() 94 | # Add variables 95 | x = {} 96 | y = {} 97 | for i in range(I): 98 | y[i] = m.addVar(vtype=GRB.BINARY, name="y%d" % i) 99 | for j in range(J): 100 | x[j] = m.addVar(vtype=GRB.BINARY, name="x%d" % j) 101 | 102 | m.update() 103 | # Add constraints 104 | m.addConstr(quicksum(x[j] for j in range(J)) == K) 105 | 106 | for i in range(I): 107 | m.addConstr(quicksum(x[j] for j in np.where(D[i]==1)[0]) >= y[i]) 108 | 109 | m.setObjective(quicksum(y[i]for i in range(I)),GRB.MAXIMIZE) 110 | m.setParam('OutputFlag', 0) 111 | m.optimize() 112 | end = time.time() 113 | print('----- Output -----') 114 | print(' Running time : %s seconds' % float(end-start)) 115 | print(' Optimal coverage points: %g' % m.objVal) 116 | 117 | solution = [] 118 | if m.status == GRB.Status.OPTIMAL: 119 | for v in m.getVars(): 120 | # print v.varName,v.x 121 | if v.x==1 and v.varName[0]=="x": 122 | solution.append(int(v.varName[1:])) 123 | opt_sites = sites[solution] 124 | return opt_sites,m.objVal 125 | 126 | def plot_input(points): 127 | ''' 128 | Plot the result 129 | Input: 130 | points: input points, Numpy array in shape of [N,2] 131 | opt_sites: locations K optimal sites, Numpy array in shape of [K,2] 132 | radius: the radius of circle 133 | ''' 134 | from matplotlib import pyplot as plt 135 | fig = plt.figure(figsize=(8,8)) 136 | plt.scatter(points[:,0],points[:,1],c='C0') 137 | ax = plt.gca() 138 | ax.axis('equal') 139 | ax.tick_params(axis='both',left=False, top=False, right=False, 140 | bottom=False, labelleft=False, labeltop=False, 141 | labelright=False, labelbottom=False) 142 | 143 | def plot_result(points,opt_sites,radius): 144 | ''' 145 | Plot the result 146 | Input: 147 | points: input points, Numpy array in shape of [N,2] 148 | opt_sites: locations K optimal sites, Numpy array in shape of [K,2] 149 | radius: the radius of circle 150 | ''' 151 | from matplotlib import pyplot as plt 152 | fig = plt.figure(figsize=(8,8)) 153 | plt.scatter(points[:,0],points[:,1],c='C0') 154 | ax = plt.gca() 155 | plt.scatter(opt_sites[:,0],opt_sites[:,1],c='C1',marker='+') 156 | for site in opt_sites: 157 | circle = plt.Circle(site, radius, color='C1',fill=False,lw=2) 158 | ax.add_artist(circle) 159 | ax.axis('equal') 160 | ax.tick_params(axis='both',left=False, top=False, right=False, 161 | bottom=False, labelleft=False, labeltop=False, 162 | labelright=False, labelbottom=False) 163 | --------------------------------------------------------------------------------