Матричне множення ланцюга та експоненціація


13

Якщо у мене є дві матриці і розмірами та відповідно, і хочеться обчислити , то більш ефективно спочатку переписати вираз як і лише тоді оцінюйте числово, тому що має розмірність а має розмірність .B 1000 × 2 2 × 1000 ( A B ) 5000 A ( B A ) 4999 B A B 1000 × 1000 B A 2 × 2AB1000×22×1000(AB)5000A(BA)4999BAB1000×1000BA2×2

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

  • Вільні матричні змінні відомих розмірів
  • Продукти довільних підвиражень
  • Довільні підекспресії, підняті до природної сили

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

Проблема множення матричного ланцюга є особливим випадком моєї проблеми.


Редагувати:

Це попередня відповідь. Мені це здається інтуїтивно зрозумілим, але я не маю доказів того, що це правильно. Якщо воно виявиться правильним, мене все-таки цікавить доказ. (Якщо це неправильно, звичайно, будь ласка, виправте мене.)

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

  • (A1A2Ak)n
  • A1(A2AkA1)n1A2Ak
  • A1A2(A3AkA1A2)n1A3Ak
  • ...
  • A1A2Ak1(AkA1A2Ak1)n1Ak

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


Редагувати:

Ідея, викладена в моїй попередній редакції, все ще дещо неоптимальна. Експонентація алгоритмом квадратування насправді оцінює вирази форми або , де не обов'язково є матрицею ідентичності. Але мій алгоритм не розглядає можливості використання експонентації шляхом порівняння алгоритму з не рівним матриці тотожності.А н К К КKAnAnKKK


@ gnasher729: Вибачте, я мав би бути більш чітким. Я не хочу, щоб грубими силами застосовували всі можливості, саме з тієї ж причини, ви б не хотіли вирішувати множення матричного ланцюга на грубу силу. Я відповідним чином редагував це питання.
піон

Зверніть увагу , що навіть після того, як ви вміли фактор вираз це ще більш розумному фактор її як . Справа в тому, що вам, мабуть, доведеться змішати між множенням матричного ланцюга та іншим стандартним алгоритмом для швидкої експоненції. A(BA)4999B
A(BA)2(21249+1)+1B
Apiwat Chantawibul

@Billiska: Дійсно, саме це я і хочу зробити: поєднати множення матричного ланцюга та експоненціацію шляхом складання в єдиний алгоритм комбінованої задачі. Але є деякі набридливі проблеми. З огляду на , як я заважаю алгоритму додатково пробувати , тощо? A(BA)n1BAB(AB)n2ABABA(BA)n3BAB
піон

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

@DeepJoshi Вибачте, я вважаю ваш коментар досить лаконічним. Але, якщо я правильно зрозумів вашу ідею, я боюся, що вона не працюватиме в загальному випадку, оскільки розміри власних просторів матриці не повинні дорівнювати . Іншими словами, не завжди буває так, що кожен вектор може бути виражений як лінійна комбінація власних векторів. n×nn
піон

Відповіді:


3

Відмова від відповідальності: Наступний метод не був жорстко підтверджений як оптимальний. Надається неофіційний доказ.

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

Наприклад, дивлячись наприклад , нам потрібно лише оптимально вирішити оскільки це поширюється на . Користувальна інформація про замовлення не додається шляхом повторного об'єднання . Інтуїція тут полягає в тому, що оскільки проблема оптимального впорядкування може бути вирішена знизу вгору, більш високі впорядкування, що складаються з більшої кількості елементів, що використовують однакові матриці, не мають значення.(ABC)50(ABC)2ABCABCABC

Пошук найкращого впорядкування зводиться до проблеми множення матричного ланцюга. Знайшовши оптимальне впорядкування, застосуйте експоненцію до триплета (загалом n-кортеж) у впорядкуванні.ABCABC

Наприклад, якщо оптимальне впорядкування для квадрата дорівнює , рішення початкової задачі .A(B(CA))BCA(B(CA))49BC

Підсумовуючи це:
1) Першим кроком у вирішенні є вирішення . 2) Розв’язування найкраще підходить як екземпляр задачі множення матричного ланцюга. 3) Використання впорядкування n-кортежу з розчину в (2) дасть нам рішення для (1) як деякий аромат (зауважте, що будь-який інший також слід застосовувати групування з розв’язування (2).(A1A2An)m(A1A2An)2
(A1A2An)2
GA1A2Gm1An

Неформальне доведення
Розглядаючи найпростіший випадок з використанням двох матриць , зазначимо, що і мають розмірність і відповідно. Будь-який продукт, що використовує і має один із таких розмірів:(AB)nABX×YY×XAB

X×Y
Y×X
Y×Y
X×X

Ми маємо або або .X<YYX

Припущення 1a): має розмір , і це впорядкування гарантується оптимальним при підході знизу вгору. Будь-яка інша конфігурація і є однаково хорошою, або гіршою. Таким чином, задача оптимально вирішується як .X<Y
ABX×XAB(AB)n

Припущення 1b): має розмірність . Це оптимальне розташування для всіх продуктів , пов'язаних і . Таким чином, рішення оптимально знайдено як .YX
BAY×YABA(BA)n1B

Це завершує доказ, і ми лише розглянули два впорядкування, знайдені в , проблему квадрата.ABAB

Використовуючи більше матриць, аргумент подібний. Можливо, можливий індуктивний доказ? Загальна ідея полягає в тому, що розв’язуючи МСМ для квадрата, знайдемо оптимальний розмір для операцій з усіма розглянутими матрицями.

Приклад:

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
Чи можете ви обґрунтувати твердження, що достатньо врахувати ? Мені це не здається очевидним. (ABC)2
Девід Річербі

@DavidRicherby Я не маю доказів для цього, але це здається інтуїтивним, оскільки проблема має циклічний характер, і кожне унікальне циклічне впорядкування відбувається в і більше ніяких нових умов не передбачено жодної нової циклічної групи. Моя гіпотеза полягає в тому, що оптимально обчислюється як одне з наступних дій : , або . Я спробую довести це завтра, якщо буде час. ( A B C ) n ( A B C ) n A ( B C A ) n - 1 B C A B ( C A B ) n - 1 CABCABC(ABC)n(ABC)nA(BCA)n1BCAB(CAB)n1C
matteyas

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

@matteyas: Це більш-менш те, що я сказав у першій редакції свого питання, правда?
піон

@matteyas ОК, тож я гадаю, що справа в тому, що у нас є послідовність, що повторюється, є лише фіксована кількість розмірів проміжних матриць, і ви все це бачили до того моменту, як ви подивилися на . ABCABC
Девід Річербі

-1

Якщо ви хочете обчислити добуток з n матриць від до в найкращий можливий час, ви можете легко обчислити, скільки операцій потрібно, щоб обчислити добуток від до для всіх 1 ≤ i ≤ j ≤ n в кроки.A n A i A j O ( n 3 )A1AnAiAjO(n3)


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