Я ищу алгоритм для поиска пар соседних узлов на шестиугольном (сотовом) графе, который минимизирует функцию стоимости.
- каждый узел соединен с тремя соседними узлами
- каждый узел "i" должен быть связан с ровно одним соседним узлом "j".
каждая пара узлов определяет функцию стоимости
с = цена пары ( я , j )
Тогда общая стоимость рассчитывается как
totalCost = 1/2 sum_{i=1:N} (pairCost(i, пара(i)) )
Где пара(i) возвращает индекс узла, с которым связан "i". (Сумма делится на два, потому что сумма учитывает каждый узел дважды). У меня вопрос: как мне найти пары узлов, которые минимизируют общую стоимость?
Связанное изображение должно прояснить, как будет выглядеть решение (толстая красная линия указывает на пару):
Некоторые дополнительные примечания:
- Меня не волнуют крайние узлы
- Моя функция стоимости что-то вроде || v(i) - v(j) || (расстояние между векторами, связанными с узлами)
- Я предполагаю, что проблема может быть NP-сложной, но мне действительно не нужно действительно оптимальное решение, достаточно хорошего.
- Наивные алгоритмы, как правило, получают узлы, которые «заблокированы», то есть все их соседи заняты.
Примечание: я не знаком с обычной номенклатурой в этой области (это теория графов?). Если бы вы могли помочь с этим, то, возможно, это позволило бы мне найти решение в литературе.