ปัญหาการเพิ่มประสิทธิภาพ combinatorial นี้คล้ายกับปัญหาที่ทราบหรือไม่?


10

ปัญหาดังต่อไปนี้:

เรามีอาร์เรย์ / ตารางจำนวนสองมิติแต่ละอันแสดงถึง "ผลประโยชน์" หรือ "ผลกำไร" นอกจากนี้เรายังมีสองจำนวนเต็มคงและ (สำหรับ "กว้าง" และ "ความสูง".) และเป็นจำนวนเต็มคงnH nwhn

ตอนนี้เราต้องการที่จะซ้อนทับสี่เหลี่ยมขนาดในตารางดังกล่าวว่าผลรวมของค่าของเซลล์ในรูปสี่เหลี่ยมเหล่านี้เป็น maximizedw × hnw×h

ภาพต่อไปนี้เป็นตัวอย่างของตารางสองมิติที่มีรูปสี่เหลี่ยมผืนผ้าสองรูปซ้อนทับอยู่บนภาพ (รูปภาพไม่ได้แสดงวิธีแก้ปัญหาที่ดีที่สุดเพียงหนึ่งภาพซ้อนทับที่เป็นไปได้โดยที่และ )n = 2w=h=2n=2

ตัวอย่างตาราง

รูปสี่เหลี่ยมผืนผ้าไม่สามารถตัดกันได้ (ไม่เช่นนั้นเราแค่ต้องการหาตำแหน่งที่เหมาะสมที่สุดสำหรับหนึ่งรูปสี่เหลี่ยมผืนผ้าแล้วใส่รูปสี่เหลี่ยมทั้งหมดในตำแหน่งนั้น)

ในตัวอย่างข้างต้นผลรวมของค่าทั้งหมดในเซลล์จะเป็น2+4.2+2.4+3.14+2.31.4+13.1

สิ่งนี้คล้ายกับปัญหาใด ๆ ที่ทราบกันดีในการเพิ่มประสิทธิภาพ combinatorial หรือไม่? เพื่อให้ฉันสามารถเริ่มอ่านและพยายามหาวิธีแก้ไข

พื้นหลังเพิ่มเติมสำหรับผู้ที่สนใจ:

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

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

ไชโย!


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

ฉันสามารถจินตนาการได้ว่าต้องการใช้แน่นอนหมายความว่าบางครั้งค่า "ท้องถิ่น" สูงสุดไม่ได้ใช้ แต่มีวงแหวนอยู่รอบ ๆ ฉันจินตนาการถึงรูปทรงโดมที่เรียบง่ายตรงจุดนี้ซึ่งการ "โลภ" เข้ามาในใจกลางโดมหมายความว่าคุณไม่สามารถใส่รอบตัวได้ n - 1nn1
Mark Hurd

ความคิดแรกของฉันคือลองโปรแกรมแบบไดนามิก หมายเลขสี่เหลี่ยมตามระยะทางแมนฮัตตันของพวกเขาจากซ้ายบน ปัญหาย่อยคือ: จำนวนของสแควร์; รายการสี่เหลี่ยมคุณได้เลือกที่มี Corder บนซ้ายมีจำนวนน้อยกว่า ; และมีเป้าหมายที่จะขยายไปยังชุดที่ดีที่สุดของการไม่ทับซ้อนกันสี่เหลี่ยมโดยการเพิ่มส่วนย่อยบางส่วนของสี่เหลี่ยมที่มีมุมบนซ้ายมีตัวเลขs คุณสามารถแก้ปัญหาย่อยแต่ละรายการได้อย่างรวดเร็วหากคุณมีวิธีแก้ปัญหาสำหรับปัญหาย่อยในภายหลังทั้งหมด คำถามเดียวก็คือมีปัญหาย่อยมากมายที่คุณต้องสำรวจ L s L ssLsLs
DW

คำตอบ:


2

การกำหนดครั้งสุดท้ายของฉันมีข้อบกพร่องร้ายแรงที่ต้องการจำนวน จำกัด ของ "ข้อ จำกัด " โหนด

อีกสูตรกราฟิกตามธรรมชาติของปัญหาที่เกิดขึ้นจะสร้างกราฟที่แต่ละจุดสุดยอดหมายถึงรูปสี่เหลี่ยมผืนผ้ามีw_rคู่ของรูปสี่เหลี่ยมผืนผ้าที่ทับซ้อนกันมีขอบในกราฟนี้ ด้วยการแก้ปัญหาชุดอิสระขนาดน้ำหนักสูงสุดเรามีวิธีแก้ไขปัญหาดั้งเดิมของคุณ มีฮิวริสติกที่ดีและอัลกอริธึมการประมาณจำนวนมากสำหรับสิ่งนี้w r r , r k = nrwrr,rk=n


นี่คือทิศทางที่ฉันกำลังโน้มตัวไปข้างหน้าฉันจะทดลองกับสิ่งนี้และยอมรับวิธีแก้ปัญหาถ้ามันเป็นสิ่งที่ฉันใช้
Fiftyeight

2

คุณสามารถกำหนดสิ่งนี้เป็นอินสแตนซ์จำนวนเต็มขนาดใหญ่การเขียนโปรแกรมเชิงเส้น (ILP) จากนั้นใช้ตัวแก้ ILP แบบปิด (lp_solve, CPLEX, ฯลฯ ) พวกเขาจะให้ทางออกที่ดีที่สุดแก่คุณ เมื่อพิจารณาถึงขนาดปัญหาของคุณฉันไม่ทราบว่าจะมีประสิทธิภาพเพียงพอหรือไม่ แต่จะลองได้ง่าย

นี่คือสูตรของ ILP เรามีตัวแปรที่เป็นศูนย์หรือหนึ่งสำหรับสี่เหลี่ยมแต่ละอันที่เป็นไปได้พร้อมการตีความที่ตั้งใจว่าหมายความว่าคุณรวมสี่เหลี่ยมไว้ในชุดของคุณและหมายความว่าคุณไม่ได้รวมมันไว้ คุณต้องการเพิ่มฟังก์ชั่นวัตถุประสงค์ (โดยที่คือผลกำไรของ rectangle ) ภายใต้ข้อ จำกัด ที่และไม่มีรูปสี่เหลี่ยมผืนผ้าสองรูปซ้อนทับกัน ข้อ จำกัด หลังสามารถแสดงเป็นอสมการเชิงเส้นได้โดยกำหนดให้สำหรับทุกคู่ของ rectangles R x R = 1 R x R = 0 Σ R R x R R R Σ R x R = n x R + x s1 R , sxrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,sที่ทับซ้อนกัน ด้วยวิธีนี้คุณจะได้รับ ILP


คุณคิดว่าปัญหานี้เป็นปัญหาหรือไม่ ฉันไม่มั่นใจว่ามันไม่มีทางออกเวลาโพลีและตัวแก้ปัญหา ILP ไม่น่าจะเสร็จสิ้นแม้แต่กรณีที่มีขนาดปานกลาง
RB

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