Есть два вида точек на плоскости: добывающие скважины и нагнетательные скважины.
Т.е. у каждой точки есть три свойства: координата Х, координата Y и тип (принимающий два значения).
Нужно какое-то выражение (целевая функция), которое оценивает степень равномерности расстановки точек на плоскости (в заданной области), и имеет максимум при наиболее равномерной расстановке точек. При этом нужно, чтобы каждую нагнетательную скважину окружало по возможности одинаковое количество добывающих скважин, а не так, что в одной области оказывались только добывающие, а в другой - только нагнетательные скважины.
В идеале максимум целевой функции (при заданном количестве точек в соотношении типов 3 к 1) должна давать при расположении как на картинке:

Искомое выражение будет использоваться как целевая функция в генетическом алгоритме, который будет расставлять скважины в области. Помимо равномерности, есть и другие условия (свойства пласта), с которыми то всё более менее ясно, но первая часть задачи состоит в том, чтобы предполагая полностью однородный пласт получать равномерную расстановку.
Первое, что я сделал, чтобы получить просто равномерную расстановку одного вида точек - это считать сумму обратных квадратов расстояний от каждой точки для всех других. Если брать её со знаком минус, то расстановка получается достаточно равномерной для максимума этой функции и устойчиво находится (при любой начальной расстановке), однако уже здесь возникает проблема, что все точки стремятся к краям области, и в центре их оказывается меньше, у краёв:

Если же рассматривать уже второй вид точек, то к тому значению целевой функции, что я описал выше, я прибавлял следующее. Я считал расстояние от каждой нагнетательной скважины до ближайшей добывающей, а дальше считал среднее отклонение расстояний до остальных трёх (или другого числа) самых ближайших добывающих скважин от расстояния до ближайшей скважины и брал его со знаком минус (сумма по всем нагнетательным скважинам). И этот метод немного работает, но решения даёт совершенно неустойчивые (т.е. самые разнообразные) и далёкие от того, что ожидаешь, а также начинает нарушаться равномерность.

Чтобы исключить смещение скважин к краям и отталкивание их от центра я попытался использовать в качестве целевой функции сумму расстояний от i-й скважины до ближайшей соседней. При этом выразил его так, что обо возрастало нелинейно, а затухающе (и имело предел):

где R - расстояние до ближайшей скважины, а b - положительная постоянная.
Такой подход также приводит к неверным решениям (по всей видимости из-за неустойчивости):
