Получи случайную криптовалюту за регистрацию!

Недавно в своем разговоре с научным руководителем из Глазго я | О городах и данных

Недавно в своем разговоре с научным руководителем из Глазго я упомянула, что по работе часто решаю задачи связанные с зонированием и размещением объектов, при этом метрики для оптимизации могут отличаться в зависимости от кейса. Он посоветовал мне познакомиться с одним модулем библиотеки pysal на python, в создании которого он сам принимал участие и с помощью которого, можно автоматизировать часть из моих задач. Называется модуль spopt. Вот ссылка на документацию, где также есть питоновские ноутбуки с примерами, а вот на ссылка на статью, где описана общая логика алгоритмов.

На этих выходных, я, наконец - спасибо простуде - нашла достаточно времени, чтобы потестисть один из методов, и результат вполне устроил. Метод : Max-p regionalisation. Его задача - сгруппировать пространственные единицы в как можно большее число кластеров так, чтобы эти кластеры были как можно более однородными по характеристикам, чтобы каждый элемент внутри соприкосался хотя бы с одним другим элементом и чтобы суммарное значение какого-то показателя, например, численности населения, было не меньше установленного порога. Подробный алгоритм описан здесь, а пример можно найти здесь

Метод подходит, когда у вас не очень большое число полигонов( 200 алгоритм еще считал при условии 4 ед в кластере ,а вот на 300 падал с ошибкой) и при этом они хорошо связаны друг с другом - нет анклавов. Например, для задачи разделения города или района на участки в рамках 1 поликлинники. В отличие от применения k-means кластеры получатся не такими близкими по площади, но зато они будут максимально близки по числу квартир, обслуживаемых одним врачом.

Единственное ограничение, которое мне удалось обнаружить - это ошибка в расчетах, если в данных есть анклав, где сумма всех его элементов меньше заданного порога. Чтобы избавиться от ошибки, мне пришлось исключать эту область из расчета и потом вручную добавлять ее как отдельный кластер.