quadratic_assignment(method=’2opt’)#
- scipy.optimize.quadratic_assignment(A, B, метод='faq', опции=None)
Решить квадратичную задачу назначения (приближенно).
Эта функция решает квадратичную задачу о назначениях (QAP) и задачу сопоставления графов (GMP) с использованием алгоритма 2-opt [1].
Квадратичное назначение решает задачи следующего вида:
\[\begin{split}\min_P & \ {\ \text{trace}(A^T P B P^T)}\\ \mbox{s.t. } & {P \ \epsilon \ \mathcal{P}}\\\end{split}\]где \(\mathcal{P}\) является множеством всех матриц перестановок, \(A\) и \(B\) являются квадратными матрицами.
Сопоставление графов пытается максимизировать той же целевой функции. Этот алгоритм можно рассматривать как поиск выравнивания узлов двух графов, которое минимизирует количество индуцированных расхождений рёбер или, в случае взвешенных графов, сумму квадратов разностей весов рёбер.
Обратите внимание, что задача квадратичного назначения является NP-трудной. Результаты, приведённые здесь, являются приближениями и не гарантируют оптимальности.
- Параметры:
- A2-D массив, квадратный
Квадратная матрица \(A\) в целевой функции выше.
- B2-D массив, квадратный
Квадратная матрица \(B\) в целевой функции выше.
- методstr в {'faq', '2opt'} (по умолчанию: 'faq')
Алгоритм, используемый для решения задачи. Это специфичная для метода документация для '2opt'. ‘faq’ также доступен.
- Возвращает:
- resOptimizeResult
OptimizeResultсодержащий следующие поля.- col_indОдномерный массив
Индексы столбцов, соответствующие наилучшей найденной перестановке узлов B.
- funfloat
Целевое значение решения.
- nitint
Количество итераций, выполненных во время оптимизации.
Смотрите также
Для документации по остальным параметрам см.
scipy.optimize.quadratic_assignment- Опции:
- ——-
- максимизироватьbool (по умолчанию: False)
Максимизирует целевую функцию, если
True.- rng{None, int,
numpy.random.Generator, опционально Состояние генератора псевдослучайных чисел. См.
quadratic_assignmentподробности.- partial_match2-D массив целых чисел, опционально (по умолчанию: None)
Исправляет часть сопоставления. Также известен как "начальное значение" [2].
Каждая строка partial_match определяет пару сопряжённых узлов: узел
partial_match[i, 0]of A соответствует узлуpartial_match[i, 1]of B. Массив имеет форму(m, 2), гдеmне больше, чем количество узлов, \(n\).Примечание
partial_match должен быть отсортирован по первому столбцу.
- partial_guess2-D массив целых чисел, опционально (по умолчанию: None)
Предположение для сопоставления между двумя матрицами. В отличие от partial_match, partial_guess не фиксирует индексы; они все еще могут быть оптимизированы.
Каждая строка partial_guess определяет пару сопряжённых узлов: узел
partial_guess[i, 0]of A соответствует узлуpartial_guess[i, 1]of B. Массив имеет форму(m, 2), гдеmне больше, чем количество узлов, \(n\).Примечание
partial_guess должен быть отсортирован по первому столбцу.
Примечания
Это жадный алгоритм, который работает аналогично сортировке пузырьком: начиная с начальной перестановки, он итеративно меняет местами пары индексов для улучшения целевой функции, пока такие улучшения возможны.
Ссылки
[1]“2-opt,” Википедия. https://en.wikipedia.org/wiki/2-opt
[2]D. Fishkind, S. Adali, H. Patsolic, L. Meng, D. Singh, V. Lyzinski, C. Priebe, “Seeded graph matching”, Pattern Recognit. 87 (2019): 203-215, https://doi.org/10.1016/j.patcog.2018.09.014