This project applies data-driven optimization to determine the best ATM placements for maximizing population coverage within a 15-minute walking distance.
Using Pyomo for optimization and the HiGHS solver, we efficiently solve the location-allocation problem while leveraging isochrone analysis for accessibility assessment.
The population dataset is sourced from Meta Data for Good, ensuring a real-world, data-driven approach.
This project consists of two Jupyter Notebooks, which must be executed in sequence.
Ensure you have Python 3.8+ installed. Then, install the required dependencies.
pip install pyomo osmnx geopandas highspy numpy pandas matplotlib folium jupyterMake sure the HiGHS solver is installed. Alternatively, you can download it manually from the HiGHS GitHub repository.
conda install -c conda-forge highsStart Jupyter Notebook, then open and run the following notebooks in order:
-
eda.ipynb- Exploratory Data Analysis (EDA)- Loads the dataset from Meta Data for Good.
- Generates population density heatmaps.
- Computes existing ATM coverage using isochrones.
-
optimize.ipynb- Optimization Model for ATM Placement- Implements the Pyomo-based mathematical model.
- Uses HiGHS solver to find the best ATM locations.
- Visualizes the optimized ATM placements and coverage improvements.
The project generates:
- Optimized ATM Locations: The most efficient placements based on population accessibility.
- Isochrone Maps: Accessibility heatmaps before and after optimization.
- Comparative Analysis: Evaluating ATM efficiency before and after applying optimization.
For a detailed explanation of the methodology, dataset, and results, please refer to the report folder.
I would like to express my gratitude to the author of the article "Optimizing Retail Location Selection Using Spatial Interpolation: Part 1,2,3". Their research provided valuable insights into using Isochrone Analysis for location optimization, serving as a critical reference for this project.
We welcome contributions! If you'd like to improve the model, optimize performance, or enhance the visualization, feel free to:
- Fork the repository:
- Create a feature branch:
git checkout -b feature-branch- Commit your changes:
git commit -m "Describe your changes"- Push to your branch:
git push origin feature-branch- Submit a pull request for review.
For inquiries or suggestions, feel free to open an issue! 🚀