Для хорошо распределенных данных, я ожидаю, что наиболее эффективным способом будет начать с кластеризации k-средних. Если каждый полученный кластер соответствует возможностям школы, у вас есть решение.
Однако ваш случай "беспокойства" - это когда по крайней мере одна школа переполнена. Например, у вас 20 детей на северной стороне широкой реки, 90 на южной стороне, а вместимость школ - 40: вам нужно назначить по крайней мере 10 детей с юга на север.
Алгоритмический способ решения этой проблемы заключается в реализации другой функции ошибок: добавьте предложение, которое влечет за собой серьезные штрафы (т.е. + бесконечность стоимости), добавив 41-го студента в этот кластер.
Другим способом является нормальное агрегирование кластеров, но затем их корректировка. Скажем, что в школе SE 46 учеников, а в SW 44: отправьте 6 и 4 учеников, ближайших к северной школе, в эту школу.
Достаточно ли этого руководства для вас? Есть ли у вас случаи, когда у вас было бы несколько школ как с избыточной, так и с недостаточной нагрузкой? Я не хочу чрезмерно разрабатывать решение.