Backup Coverage Location Problem (BCLP)
Description
This model aims to cover every demand unit at least once, while trying to increase the amount backup/secondary coverage. For example, you want to implement a new bus system and ensure that every neighborhood has access to at least one bus. You also want to maximize the number of neighborhoods that have 2 buses. You could apply the BCLP to solve this problem.
When to use this model:
You want to cover 100% of the demand and increase the demand units that are covered twice
You have point (or polygon) demand
Source
Hogan, Kathleen, and Charles Revelle. 1986. Concepts and Applications of Backup Coverage. Management Science 32 (11):1434-1444.
Example
The following example show how an BCLP can be created and solved.
from allagash import Coverage, Problem
import pulp
import geopandas
d = geopandas.read_file("sample_data/demand_point.shp")
s = geopandas.read_file("sample_data/facility_service_areas.shp")
s2 = geopandas.read_file("sample_data/facility2_service_areas.shp")
coverage1 = Coverage.from_geodataframes(d, s, "GEOID10", "ORIG_ID", demand_col="Population")
coverage2 = Coverage.from_geodataframes(d, s2, "GEOID10", "ORIG_ID", demand_col="Population")
problem = Problem.bclp([coverage1, coverage2], max_supply={coverage1: 5, coverage2: 19})
problem.solve(pulp.GLPK())