Я должен написать недифференцируемую функцию, которая оптимизирует перекрытие прямоугольников. Цель состоит в том, чтобы начать с двух прямоугольников, но в конце функция должна быть в состоянии рассчитать перекрытие нескольких прямоугольников. Функция должна оптимизировать положение и / или форму прямоугольников так, чтобы в конце они больше не перекрывались. Я работаю с IPOPT без оптимизатора. Я уже придумал следующую функцию: f (x) = \ sqrt ((x_0 - x_4) ^ 2 + (x_1 - x_5) ^ 2) + (x_0 + x_2 - x_4) ^ 2 + (x_4 + x_6 -x_0 ) ^ 2 + (x_1 + x_3 - x_5) ^ 2 + (x_5 + x_7 - x_1) ^ 2
Эта функция должна представлять два прямоугольника. x_0 и x_4 - нижние левые координаты x, x_1 и x_5 - нижние левые координаты y, x_2 и x_6 - ширина, а x_3 и x_7 - высота прямоугольников. Но эта функция не очень полезна в моей ситуации. Мне нужна недифференцируемая функция.
В этой функции я должен иметь возможность просто реализовывать координаты так, чтобы прямоугольники накладывались друг на друга или один лежал в другой, или они даже не касались друг друга. Но цель состоит в том, чтобы в конце они соприкасались друг с другом, но не пересекались. Ясно, что если бы я реализовал 5 прямоугольников, не все они касаются всех остальных, но каждый прямоугольник касается другого, и все они связаны. И эту функцию следует выполнять методом штрафа, а не ограничениями.
Кто-нибудь имеет представление, как может выглядеть функция для моей задачи?