[ ]:
import geopandas as gpd

blocks = gpd.read_parquet('./../data/blocks.parquet')
columns = [c for c in blocks.columns if 'capacity_' in c]
blocks = blocks[['geometry', 'population', 'site_area', *columns]].copy()
blocks.head(3)
[ ]:
import pandas as pd

accessibility_matrix = pd.read_pickle('./../data/accessibility_matrix.pickle')
accessibility_matrix.head()

Simulated annealing

[ ]:
from blocksnet.enums import LandUse

blocks_lus = {
    # 1 : LandUse.INDUSTRIAL,
    # 2 : LandUse.RECREATION,
    1536 : LandUse.RESIDENTIAL
}

service_types = {
    "kindergarten": 0.2,
    "school": 0.2,
    "pharmacy": 0.2,
    "polyclinic": 0.3,
    "convenience": 0.2,
    "cafe": 0.15,
    "playground": 0.2,
    "post": 0.1,
    "hairdresser": 0.1
}
[ ]:
from blocksnet.optimization.services import ServicesOptimizer

so = ServicesOptimizer(blocks[['site_area', 'population']], accessibility_matrix)
for service_type, weight in service_types.items():
    so.add_service_type(service_type, weight, blocks.rename(columns={f'capacity_{service_type}': 'capacity'})[['capacity']])

so.service_types
[ ]:
variables_df, objective_value = so.run(blocks_lus, iterations=1000)
[ ]:
variables_df