Минимизировать максимальную составляющую суммы векторов

11

Я хотел бы кое-что узнать об этой задаче оптимизации: для заданных неотрицательных целых чисел ai,j,k найдите функцию f минимизирующую выражение

maxkiai,f(i),k

Пример, использующий другую формулировку, может прояснить ситуацию: вам дан набор наборов векторов, таких как

{
    {(3, 0, 0, 0, 0), (1, 0, 2, 0, 0)},
    {(0, 1, 0, 0, 0), (0, 0, 0, 1, 0)},
    {(0, 0, 0, 2, 0), (0, 1, 0, 1, 0)}
}

Выберите один вектор из каждого набора, чтобы максимальная составляющая их суммы была минимальной. Например, вы можете выбрать

(1, 0, 2, 0, 0) + (0, 1, 0, 0, 0) + (0, 1, 0, 1, 0) = (1, 1, 2, 1, 0)

с максимальным компонентом, равным 2, что здесь явно оптимально.

Мне интересно , если это хорошо известная проблема , и какие проблемы , специфичные приближенные методы решения доступны. Это должно быть быстро и легко программировать (без ЦЛПА решателя и т.д.). Нет точного решения не требуется , поскольку это всего лишь приближение реальной проблемы.


Я вижу, что я должен был добавить некоторые подробности о проблемах, которые меня интересуют:

  • i{0,1,,63} , т. е. всегда есть 64 строки (при записи, как в приведенном выше примере).
  • j{0,1} , то есть, там уже только 2 векторов в ряд.
  • Nk{0,1,,N1} , где (длина вектора) составляет от 10 до 1000.N

Более того, в каждой строке сумма элементов всех векторов одинакова, т.е.

i,j,j:kai,j,k=kai,j,k

и сумма элементов вектора суммы меньше его длины, т.е.

kiai,f(i),k<N
maaartinus
источник
4
Нетрудно свести проблему с 3 разделами к вашей проблеме. Это означает, что ваша задача является NP-полной, даже если числа даны в унарном порядке, и это исключает один из распространенных подходов для алгоритма аппроксимации.
Цуёси Ито
Спасибо за исправления и спасибо @Tsuyoshi Ito за понимание. Если я правильно понимаю, ограничение в два вектора на строку (о чем я забыл заявить) лишает законной силы сокращение и может значительно облегчить проблему.
maaartinus
Вы правы, сокращение от проблемы с 3 разделами, о которой я думал, не работает, если в строке только два вектора.
Цуоши Ито
Таким образом , существует сочетания для сравнения? ji
Джейсон Клебан
@ uosɐſ: Точнее, есть возможных комбинаций, где - количество возможностей для а - количество возможностей для . J = 2 J I = 64 IJI=264J=2jI=64i
Маартин

Ответы:

7

Снижение от 3sat к два вектора версии: дана формула, пусть индексные переменные, , и индексных оговорок. Пусть быть числом переменного раза оказываюсь положительно (если ) или отрицательно (если ) в пункте . OPT составляет менее тогда и только тогда формула выполнима (биекция очевидна).j { 0 , 1 } k a i , j , k i j = 0 j = 1 k 3ij{0,1}kai,j,kij=0j=1k3

Как бы атаковать эту проблему: большой поиск окрестностей. Начните с любым решением. Выбор строк в случайном порядке. Использование грубой силы , чтобы найти лучшее решение , где можно изменить только в тех строках-очень выполнимы даже для умеренных учитывая , что размер проблемы заключается строк. Повторение.ф к 64rfk64

привет моды
источник
1
Это красивое сокращение. Я не уверен, почему у этого нет никаких повышающих голосов. Во всяком случае, вот мой +1.
Цуоши Ито
1
Я думаю, что вы должны подробнее рассказать о сокращении. В частности, у вас есть спрятан хорошо, может быть , слишком хорошо, как это делает биекция немного трудно увидеть. f
Рафаэль
7

Мы не можем обсуждать сложность проблемы, когда размер проблемы зафиксирован на константе, потому что (большая часть) теория сложности имеет дело с асимптотическим поведением сложности проблемы, когда размер проблемы стремится к бесконечности. Здесь я рассматриваю как число строк, так и размерность векторов как переменных.

Тогда задача является NP-полной, даже если числа на входе даны в унарном виде. Это не ответ на ваш вопрос, потому что вы спрашиваете о приближении, но это нечто.

Определите проблему строго:

Экземпляр : n пар векторов a i , b i ∈ ℕ m ( i ∈ {1,…, n }) и K ∈ ℕ, все в унарном порядке.
Вопрос : Можем ли мы выбрать a i или b i для каждого i, чтобы сумма этих n векторов имела не более K в каждой координате?

Ниже приведена известная NP-полная проблема, называемая 3-разделом :


Экземпляр с 3 разделами : B ∈ ℕ и 3 k целых чисел c 1 ,…, c 3 k между B / 4 и B / 2, исключающие, такие, что ∑ i = 1 3 k c i = kB , все в унарном порядке.
Вопрос : Можно ли разбить мультимножество { c 1 ,…, c 3 k } на k мультимножеств S 1 ,…, S k так, чтобы сумма каждого S j была равнаБ ?

Учитывая случай ( B ; c 1 ,…, c 3 k ) задачи с 3 разделами, создайте пример вышеупомянутой проблемы следующим образом. Для каждого i = 1,…, 3 k и j = 1,…, k мы построим пару из 4 k -мерных векторов, представляющих выбор того, принадлежит ли c i к S j или нет:

  • Вектор, представляющий выбор « c iS j », имеет только одну ненулевую запись, которая равна ( k −1) c i в j- й координате.
  • Вектор, представляющий выбор « c iS j », также имеет только одну ненулевую запись, которая является B в ( k + i ) -й координате.

Не трудно видеть , что экземпляр ( B , C 1 , ..., с 3 к ) задачи 3-разбиения имеет решение тогда и только тогда , когда есть способ выбрать вектор из каждых из 3 к 2 , построенным пары , так что все координаты суммы этих векторов не превосходит ( к -1) B . (На самом деле, когда это происходит, все координаты суммы равны ( k −1) B. ) Таким образом, это сокращение от задачи с 3-мя разбиениями до задачи выше.

До сих пор я игнорировал два дополнительных ограничения, указанных в конце вопроса, но оба легко применить, слегка изменив это сокращение. Условие, что сумма элементов каждого вектора равна, может быть применено путем добавления фиктивных координат, которые содержат только 0 или 1. Условие, что эта сумма меньше, чем измерение, может быть выполнено путем добавления фиктивных координат, которые содержат только 0.

Цуёси Ито
источник
N