Матрица цепочек умножения и возведения в степень


13

Если у меня есть две матрицы A и В с размерами 1000×2 и 2×1000 , соответственно, и я хочу вычислить (AВ)5000 , более эффективно сначала переписать выражение как A(ВA)4999В и только потом оценивать численно, потому что AВ имеет размер 1000×1000 а BA имеет размер 2×2 .

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

  • Свободные матричные переменные известных размеров
  • Произведения произвольных подвыражений
  • Произвольные подвыражения, возведенные в естественную силу

... так что для числовой оценки требуется меньше всего работы после замены переменных свободной матрицы конкретными значениями матрицы?

Задача умножения цепочки матриц является частным случаем моей проблемы.


Редактировать:

Это предварительный ответ. Это кажется мне интуитивно правильным, но у меня нет доказательств, что это правильно. Если это окажется правильным, я все еще заинтересован в доказательстве. (Если это не правильно, пожалуйста, исправьте меня.)

Для каждого произведения, возведенного в степень, скажем, , рассмотрим каждую циклическую перестановку факторов:(A1A2Ak)n

  • (A1A2Ak)n
  • A1(A2AkA1)n1A2Ak
  • A1A2(A3...AКA1A2)N-1A3...AК
  • ...
  • A1A2...AК-1(AКA1A2...AК-1)N-1AК

... рекурсивно. Каждая мощность должна быть рассчитана с использованием возведения в степень путем возведения в квадрат (очевидно), а все остальные произведения должны быть рассчитаны с использованием оптимального порядка, возвращаемого алгоритмом умножения цепочки матриц.


Редактировать:

Идея, изложенная в моем предыдущем редактировании, все еще неоптимальна. Алгоритм возведения в степень по квадрату фактически оценивает выражения вида или A n K , где K не обязательно является единичной матрицей. Но мой алгоритм не учитывает возможность использования возведения в степень при помощи алгоритма возведения в квадрат с K, не равным единичной матрице.КANANККК


@ gnasher729: Извините, мне следовало быть более откровенным. Я не хочу грубо форсировать все возможности, по той же причине, по которой вы не хотите решать умножение цепочки матриц методом грубой силы. Я просто редактировал вопрос соответствующим образом .
Пены

Обратите внимание , что даже после ухищрен экспрессии фактора это еще более умный фактор , как это ( Б ) 2 * ( 2 * 1249 + 1 ) + - B . Дело в том, что для быстрого возведения в степень вам, вероятно, придется смешивать умножение цепочек матриц и другие стандартные алгоритмы. A(ВA)4999В
A(ВA)2*(2*1249+1)+1В
Апиват Чантавибул

@Billiska: Действительно, это именно то, что я хочу сделать: объединить умножение и возведение в степень цепочки матриц путем возведения в квадрат в единый алгоритм для объединенной задачи. Но есть некоторые неприятные проблемы. Учитывая , как я могу предотвратить дальнейшую попытку алгоритма A B ( A B ) n - 2 A B , A B A ( B A ) n - 3 B A B и так далее? A(ВA)N-1ВAВ(AВ)N-2AВAВA(ВA)N-3ВAВ
пион

Мы изменяем базис на Собственный вектор для возведения в степень матрицы, и когда все матрицы имеют степень 1, тогда мы можем использовать умножение цепочки матриц.
Глубокий Джоши

@DeepJoshi Извините, я нахожу ваш комментарий довольно лаконичным. Но, если я правильно понимаю вашу идею, я боюсь, что она не сработает в общем случае, потому что размеры собственных пространств матрицы не должны складываться в n . Другими словами, не всегда так, что каждый вектор может быть выражен как линейная комбинация собственных векторов. N×NN
Пен

Ответы:


3

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

Проблема сводится к поиску наиболее эффективного заказа при рассмотрении площади изделия.

Например, при рассмотрении , например , , нам нужно только , чтобы оптимально решить ( A B C ) 2 , так как это расширяется до В C A B C . Никакая полезная информация для заказа не добавляется путем объединения A B C снова. Интуиция здесь заключается в том, что, поскольку проблема оптимального упорядочения может быть решена снизу вверх, более высокие упорядочения, состоящие из большего числа элементов, использующих одинаковые матрицы, не имеют значения.(AВС)50(AВС)2AВСAВСAВС

Нахождение наилучшего порядка сводится к задаче умножения матричной цепи. После нахождения оптимального порядка примените возведение в степень к триплету (обычно n-кортежу) в порядке.AВСAВС

В качестве например, если оптимальное упорядочение для квадрата ( В ( С ) ) В С , решение исходной задачи ( В ( С ) ) 49 В С .A(В(СA))ВСA(В(СA))49ВС

В итоге:
1) Первый шаг в решении - это решение ( A 1 A 2A n ) 2 . 2) Решение ( A 1 A 2A n ) 2 лучше всего рассматривать как пример задачи умножения матричных цепей. 3) Использование порядка n-кортежей G из решения в (2) даст нам решение (1) в виде некоторого аромата A 1A(A1A2AN)м(A1A2AN)2
(A1A2AN)2
грамм (обратите внимание, что любые другие группировки из решения (2) также должны применяться).A1A2граммм-1AN

Неформальное доказательство
Рассматривая простейший случай с использованием двух матриц , отметим, что A и B имеют размерность X × Y и Y × X соответственно. Любой продукт, использующий A и B, имеет одно из следующих измерений:(AВ)NAВИкс×YY×ИксAВ

Y × X Y × Y X × XИкс×Y
Y×Икс
Y×Y
Икс×Икс

Икс<YYИкс

Икс<Y
AВИкс×ИксAВ(AВ)N

YИкс
ВAY×YAВA(ВA)N-1В

AВAВ

Используя больше матриц, аргумент похож. Возможно, индуктивное доказательство возможно? Общая идея состоит в том, что решение MCM для квадрата найдет оптимальный размер для операций со всеми рассматриваемыми матрицами.

Тематическое исследование:

julia> a=rand(1000,2);
julia> b=rand(2,1000);
julia> c=rand(1000,100);
julia> d=rand(100,1000);
julia> e=rand(1000,1000);

julia> @time (a*b*c*d*e)^30;
  0.395549 seconds (26 allocations: 77.058 MB, 1.58% gc time)

# Here I use an MCM solver to find out the optimal ordering for the square problem
julia> Using MatrixChainMultiply
julia> matrixchainmultiply("SOLVE_SQUARED", a,b,c,d,e,a,b,c,d,e)
Operation: SOLVE_SQUARED(A...) = begin  # none, line 1:
    A[1] * (((((A[2] * A[3]) * (A[4] * (A[5] * A[6]))) * (A[7] * A[8])) * A[9]) * A[10])
  end
Cost: 6800800

# Use the ordering found, note that exponentiation is applied to the group of 5 elements
julia> @time a*(((((b*c)*(d*(e*a)))^29*(b*c))*d)*e);
  0.009990 seconds (21 allocations: 7.684 MB)

# I also tried using the MCM for solving the problem directly
julia> @time matrixchainmultiply([30 instances of a,b,c,d,e]);
  0.094490 seconds (4.02 k allocations: 9.073 MB)

1
(AВС)2

@DavidRicherby У меня нет никаких доказательств, но это , кажется интуитивным , поскольку проблема цикличности в природе, и каждое уникальное циклическое упорядочение происходит в AВСAВС(AВС)N(AВС)NA(ВСA)N-1ВСAВ(СAВ)N-1С

@DavidRicherby является дополнительным неофициальным доказательством какого-либо использования?
matteyas

@matteyas: Это более или менее то, что я сказал в первом редактировании моего вопроса, верно?
Пены

AВСAВС

-1

A1ANAяAJО(N3)


3
Это не принимает во внимание подвыражения , которые были выращены в силу (если сила велика , это может быть очень неэффективно), и он не принимает во внимание возможности использовать быстрое возведение в степень для достижения лучших ускорений , так что я подозреваю , что это не является оптимальным ответом еще.
DW
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.