การคูณเมทริกซ์โซ่และการยกกำลัง


13

ถ้าฉันมีเมทริกซ์และสองขนาดและตามลำดับและต้องการคำนวณมันมีประสิทธิภาพมากกว่าที่จะเขียนนิพจน์ใหม่เป็นและเพียงแล้วประเมินตัวเลขเพราะเป็นมิติแต่เป็นของมิติ2B 1,000 × 2 2 × 1,000 ( A B ) 5,000 A ( B A ) 4999 B A B 1,000 × 1000 B A 2 × 2AB1000×22×1000(AB)5000A(BA)4999BAB1000×1000BA2×2

ฉันต้องการแก้ปัญหานี้โดยทั่วไป มีอัลกอริธึมที่มีประสิทธิภาพพอสมควร (ไม่ใช่แรงเดรัจฉาน) เพื่อปรับการแสดงออกที่มี:

  • ตัวแปรเมทริกซ์อิสระของขนาดที่รู้จัก
  • ผลิตภัณฑ์ของ subexpressions โดยพลการ
  • subexpressions โดยพลการยกกำลังธรรมชาติ

... เพื่อที่จะใช้เวลาน้อยที่สุดในการประเมินตัวเลขหลังจากการแทนที่ตัวแปรเมทริกซ์อิสระด้วยค่าเมทริกซ์คอนกรีต?

ห่วงโซ่คูณเมทริกซ์ปัญหาเป็นกรณีพิเศษของปัญหาของฉัน


แก้ไข:

นี่คือคำตอบเบื้องต้น ดูเหมือนว่าเหมาะสมกับฉัน แต่ฉันก็ไม่มีข้อพิสูจน์ว่าถูกต้อง หากปรากฎว่าถูกต้องฉันยังคงสนใจในการพิสูจน์ (หากมันไม่ถูกต้องแน่นอนโปรดแก้ไขให้ถูกต้อง)

สำหรับทุกผลิตภัณฑ์ที่ยกระดับพลังงานให้พูดว่าให้พิจารณาการเปลี่ยนรูปแบบวนรอบของปัจจัยทั้งหมด:(A1A2Ak)n

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

... วนซ้ำ พลังงานแต่ละอันจะถูกคำนวณโดยใช้การยกกำลังด้วยการยกกำลังสอง (ชัด) และผลิตภัณฑ์อื่น ๆ ทั้งหมดจะถูกคำนวณโดยใช้ลำดับที่ดีที่สุดที่ส่งคืนโดยอัลกอริทึมการคูณเมทริกซ์โซ่


แก้ไข:

แนวคิดที่ระบุไว้ในการแก้ไขครั้งก่อนของฉันยังค่อนข้างไม่เหมาะสม การยกกำลังด้วยอัลกอริทึมกำลังสองจริงประเมินนิพจน์ของรูปแบบหรือโดยที่ไม่จำเป็นต้องเป็นเมทริกซ์เอกลักษณ์ แต่อัลกอริทึมของฉันไม่ได้พิจารณาถึงความเป็นไปได้ในการใช้การยกกำลังด้วยวิธีกำลังสองกับไม่เท่ากับเมทริกซ์เอกลักษณ์A n K K KKAnAnKKK


@ gnasher729: ขออภัยฉันควรชัดเจนกว่านี้ ฉันไม่ต้องการให้เกิดความเป็นไปได้ทั้งหมดด้วยเหตุผลเดียวกันกับที่คุณไม่ต้องการแก้ปัญหาการคูณเมทริกซ์เชนด้วยแรงเดรัจฉาน ฉันเพิ่งแก้ไขคำถามตาม
pyon

โปรดทราบว่าแม้หลังจากที่คุณปัจจัยที่ชาญฉลาดแสดงออกก็ยังคงเป็นที่ฉลาดมากขึ้นในปัจจัยที่เป็น B ประเด็นก็คือคุณอาจต้องผสมระหว่างการคูณเมทริกซ์เชนกับอัลกอริธึมมาตรฐานอื่น ๆ เพื่อการยกกำลังอย่างรวดเร็ว A(BA)4999B
A(BA)2(21249+1)+1B
อภิวัฒน์จันทวิบูลย์

@Billiska: แน่นอนว่านั่นคือสิ่งที่ฉันต้องการจะทำ: รวมการคูณเมทริกซ์เชนและการยกกำลังด้วยการยกกำลังเป็นอัลกอริทึมเดียวสำหรับปัญหาที่รวมกัน แต่มีปัญหาที่น่ารำคาญอยู่บ้าง ให้ฉันจะป้องกันอัลกอริทึมจากการลองA B ( A B ) n - 2 A B ,และอื่น ๆ ได้อย่างไร A(BA)n1BAB(AB)n2ABABA(BA)n3BAB
pyon

เราเปลี่ยนพื้นฐานของเวกเตอร์ Eigen สำหรับการยกกำลังเมทริกซ์และเมื่อเมทริกซ์ทั้งหมดมีกำลัง 1 แล้วเราสามารถใช้การคูณเมทริกซ์เชน
Deep Joshi

@ ลึก Joshi ขออภัยฉันพบความคิดเห็นของคุณค่อนข้างสั้น แต่ถ้าผมเข้าใจความคิดของคุณอย่างถูกต้องฉันเกรงว่ามันจะไม่ทำงานในกรณีทั่วไปเนื่องจากขนาดของ eigenspaces ของที่เมทริกซ์ไม่จำเป็นที่จะต้องเพิ่มขึ้นถึงn กล่าวอีกนัยหนึ่งมันไม่ใช่กรณีที่เวกเตอร์ทุกตัวสามารถแสดงเป็นการรวมเชิงเส้นของ eigenvector n×nn
pyon

คำตอบ:


3

ข้อสงวนสิทธิ์: วิธีการต่อไปนี้ยังไม่ได้รับการพิสูจน์อย่างเข้มงวดว่าเหมาะสมที่สุด มีการพิสูจน์อย่างไม่เป็นทางการ

ปัญหาจะลดลงเพื่อค้นหาการสั่งซื้อที่มีประสิทธิภาพสูงสุดเมื่อพิจารณาถึงกำลังสองของผลิตภัณฑ์

ตัวอย่างเช่นเมื่อมองเช่นเราจะต้องดีที่สุดแก้( B C ) 2นับตั้งแต่นี้เพื่อขยายB C B C ไม่มีการเพิ่มข้อมูลการสั่งซื้อที่เป็นประโยชน์โดยต่อA B Cอีกครั้ง สัญชาตญาณที่นี่คือเนื่องจากปัญหาของการเรียงลำดับที่ดีที่สุดสามารถแก้ไขจากล่างขึ้นบนได้ลำดับที่สูงขึ้นประกอบด้วยองค์ประกอบมากขึ้นโดยใช้เมทริกซ์เดียวกันจึงไม่เกี่ยวข้อง(ABC)50(ABC)2ABCABCABC

การค้นหาลำดับที่ดีที่สุดของช่วยลดปัญหาการคูณเมทริกซ์เชน หลังจากค้นหาคำสั่งที่ดีที่สุดให้ใช้การยกกำลังกับ triplet (โดยทั่วไปแล้วจะเป็น n-tuple) ในการสั่งซื้อABCABC

ในฐานะที่เป็นเช่นถ้าสั่งซื้อที่เหมาะสมที่สุดสำหรับตารางคือ( B ( C ) ) B C , วิธีการแก้ปัญหาที่เกิดขึ้นเป็นครั้งแรก( B ( C ) ) 49 B CA(B(CA))BCA(B(CA))49BC

สรุป:
1) ขั้นตอนแรกในการแก้คือการแก้ปัญหา( 1 2n ) 2 2) การแก้ปัญหา( A 1 A 2A n ) 2เป็นวิธีที่ดีที่สุดที่จะเป็นตัวอย่างของปัญหาการคูณเมทริกซ์เชน 3) การใช้ n-tuple การสั่งซื้อGจากสารละลายใน (2) จะให้ทางออกแก่ (1) เป็นรสชาติของA 1A(A1A2An)m(A1A2An)2
(A1A2An)2
G (โปรดสังเกตว่าการจัดกลุ่มอื่น ๆ จากการแก้ (2) ควรใช้เช่นกัน)A1A2Gm1An

หลักฐานที่ไม่เป็นทางการ
เมื่อพิจารณากรณีที่ง่ายที่สุดโดยใช้เมทริกซ์สองตัวเราทราบว่าAและBมีมิติX × YและY × Xตามลำดับ ผลิตภัณฑ์ใด ๆ ที่ใช้AและBมีหนึ่งในมิติต่อไปนี้:(AB)nABX×YY×XAB

Y × X Y × Y X × XX×Y
Y×X
Y×Y
X×X

เรามีทั้งหรือY XX<YYX

สมมติฐาน 1a): A BมีมิติX × Xและการสั่งซื้อนี้รับประกันว่าจะดีที่สุดจากวิธีการจากล่างขึ้นบน การกำหนดค่าอื่น ๆ ของAและBนั้นดีไม่แพ้กัน ดังนั้นปัญหาจะแก้ไขได้อย่างดีที่สุดเท่าที่( B ) nX<Y
ABX×XAB(AB)n

อัสสัมชั 1b): BมีขนาดY × Y นี่คือการสั่งซื้อที่เหมาะสมสำหรับผลิตภัณฑ์ทั้งหมดที่เกี่ยวข้องกับและB ดังนั้นวิธีการแก้ปัญหาที่พบได้อย่างดีที่สุดเท่าที่( B ) n - 1 BYX
BAY×YABA(BA)n1B

นี่เป็นการสรุปหลักฐานและเราได้ดูเพียงสองลำดับที่พบในซึ่งเป็นปัญหากำลังสองABAB

การใช้เมทริกซ์เพิ่มเติมอาร์กิวเมนต์จะคล้ายกัน บางทีการพิสูจน์อุปนัยเป็นไปได้? แนวคิดทั่วไปคือการแก้ 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
คุณสามารถปรับการอ้างสิทธิ์ที่เพียงพอที่จะพิจารณาหรือไม่ ดูเหมือนจะไม่ชัดเจนสำหรับฉัน (ABC)2
David Richerby

@DavidRicherby ฉันไม่มีข้อพิสูจน์สำหรับเรื่องนี้ แต่ดูเหมือนว่าสัญชาตญาณเพราะปัญหาคือวงจรในธรรมชาติและการสั่งซื้อวงจรที่ไม่ซ้ำกันเกิดขึ้นในและไม่มีเงื่อนไขเพิ่มเติมให้กลุ่มวงจรใหม่ สมมติฐานของฉันคือ( A B C ) nคำนวณอย่างเหมาะสมเป็นหนึ่งในสิ่งต่อไปนี้: ( A B C ) n , A ( B C A ) n - 1 B CหรือA B ( C A B ) nABCABC(ABC)n(ABC)nA(BCA)n1BC C ฉันจะลองพิสูจน์พรุ่งนี้ถ้ามีเวลา AB(CAB)n1C
matteyas

@DavidRicherby เป็นหลักฐานเพิ่มเติมอย่างไม่เป็นทางการจากการใช้งานหรือไม่?
matteyas

@matteyas: นั่นคือสิ่งที่ฉันพูดมากหรือน้อยในการแก้ไขครั้งแรกสำหรับคำถามของฉันใช่ไหม?
pyon

@atteyas ตกลงดังนั้นฉันคิดว่าประเด็นก็คือเพราะเรามีลำดับการทำซ้ำมีเพียงจำนวนขนาดกลางของเมทริกซ์กลางและคุณได้เห็นสิ่งเหล่านี้ทั้งหมดเมื่อคุณดู C ABCABC
David Richerby

-1

A1AnAiAjO(n3)


3
สิ่งนี้ไม่ได้คำนึงถึง subexpressions ที่ยกมาเป็นพลังงาน (ถ้าพลังงานมีขนาดใหญ่สิ่งนี้อาจไม่มีประสิทธิภาพมาก) และไม่คำนึงถึงโอกาสที่จะใช้การยกกำลังอย่างรวดเร็วเพื่อให้ได้ความเร็วสูงสุดที่ดีกว่าดังนั้นฉันจึงสงสัยว่า ยังไม่ได้คำตอบที่ดีที่สุด
DW
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.