ปัญหาการบรรจุแบบแถบ
ปัญหาการบรรจุแถบเป็นปัญหาการลดรูปทรงเรขาคณิต 2 มิติ กำหนดให้ชุดของสี่เหลี่ยมผืนผ้าที่เรียงตัวตามแกนและแถบที่มีความกว้างจำกัดและความสูงอนันต์ กำหนดการบรรจุสี่เหลี่ยมผืนผ้าลงในแถบโดยไม่ทับซ้อนกัน โดยลดความสูงให้น้อยที่สุด ปัญหานี้เป็นปัญหาการตัดและการบรรจุ และจัดอยู่ในประเภทปัญหามิติเปิดตาม Wäscher et al. [ 1 ]
ปัญหานี้เกิดขึ้นในด้านการจัดตารางเวลา ซึ่งเป็นการจำลองงานที่ต้องการใช้หน่วยความจำส่วนต่อเนื่องกันในช่วงเวลาที่กำหนด อีกตัวอย่างหนึ่งคือในด้านการผลิตทางอุตสาหกรรม ที่ต้องตัดชิ้นส่วนสี่เหลี่ยมผืนผ้าออกจากแผ่นวัสดุ (เช่น ผ้าหรือกระดาษ) ที่มีความกว้างคงที่แต่ความยาวไม่จำกัด และต้องการลดปริมาณวัสดุที่สูญเสียให้น้อยที่สุด
ปัญหานี้ได้รับการศึกษาครั้งแรกในปี พ.ศ. 2523 [ 2 ]เป็นปัญหา NP-hard อย่างมาก และไม่มีอัลกอริทึมการประมาณค่าแบบพหุนามที่มีอัตราส่วนน้อยกว่า เว้นเสียแต่ว่าอย่างไรก็ตาม อัตราส่วนการประมาณที่ดีที่สุดที่ทำได้จนถึงปัจจุบัน (โดยอัลกอริทึมเวลาพหุนามโดย Harren et al. [ 3 ] ) คือซึ่งก่อให้เกิดคำถามเปิดว่ามีอัลกอริทึมใดที่มีอัตราส่วนการประมาณค่าหรือไม่.
คำนิยาม
ตัวอย่างเช่นปัญหาการบรรจุแถบประกอบด้วยแถบที่มีความกว้างและความสูงที่ไม่มีที่สิ้นสุด รวมทั้งเซตด้วยประกอบด้วยสิ่งของรูปสี่เหลี่ยมผืนผ้า แต่ละชิ้นมีความกว้างและความสูง การจัดเรียงสิ่งของเป็นแผนที่ที่แสดงตำแหน่งมุมล่างซ้ายของสิ่งของแต่ละชิ้นไปยังตำแหน่ง ภายในแถบ จุดภายในของสิ่งของที่วางไว้เป็นคะแนนจากชุดสิ่งของสองชิ้น (ที่วางแล้ว) จะทับซ้อนกันหากมีจุดร่วมภายใน ความสูงของการบรรจุจะกำหนดโดยเป้าหมายคือการหาวิธีจัดเรียงสิ่งของภายในแถบให้ไม่ทับซ้อนกัน ในขณะเดียวกันก็ลดความสูงของการจัดเรียงให้น้อยที่สุด
นิยามนี้ใช้สำหรับอัลกอริธึมเวลาพหุนามทั้งหมด สำหรับอัลกอริธึมเวลาเสมือนพหุนามและ อัลกอริธึม FPTนิยามจะเปลี่ยนแปลงเล็กน้อยเพื่อความง่ายในการเขียน ในกรณีนี้ ขนาดที่ปรากฏทั้งหมดเป็นจำนวนเต็ม โดยเฉพาะอย่างยิ่งความกว้างของแถบจะกำหนดโดยจำนวนเต็มใดๆที่มากกว่า 1 โปรดทราบว่านิยามทั้งสองนี้เทียบเท่ากัน
ตัวแปร
มีการศึกษารูปแบบต่างๆ ของปัญหาการบรรจุแถบหลายรูปแบบ รูปแบบเหล่านี้เกี่ยวข้องกับรูปทรงเรขาคณิตของวัตถุ มิติของปัญหา ความสามารถในการหมุนของสิ่งของ และโครงสร้างของการบรรจุ[ 4 ]
เรขาคณิต:ในรูปแบบมาตรฐานของปัญหานี้ ชุดของรายการที่กำหนดประกอบด้วยสี่เหลี่ยมผืนผ้า ในกรณีย่อยที่มักพิจารณา รายการทั้งหมดจะต้องเป็นสี่เหลี่ยมจัตุรัส รูปแบบนี้ได้รับการพิจารณาแล้วในเอกสารฉบับแรกเกี่ยวกับการบรรจุแถบ[ 2 ] นอกจากนี้ ยังมีการศึกษารูปแบบที่รูปร่างเป็นวงกลมหรือแม้แต่รูปร่างไม่สม่ำเสมอ ในกรณีหลังนี้เรียกว่า การบรรจุแถบที่ ไม่สม่ำเสมอ
มิติ: หากไม่ได้ระบุไว้เป็นอย่างอื่น ปัญหาการจัดเรียงแถบเป็นปัญหา 2 มิติ อย่างไรก็ตาม ปัญหานี้ได้รับการศึกษาในสามมิติหรือมากกว่านั้นด้วย ในกรณีนี้ วัตถุจะเป็นรูปสี่เหลี่ยมผืนผ้าหลายมิติและแถบนั้นจะเปิดปลายในมิติหนึ่งและถูกจำกัดในมิติที่เหลือ
การหมุน:ในปัญหาการบรรจุแบบแถบคลาสสิกนั้น ไม่อนุญาตให้หมุนสิ่งของ อย่างไรก็ตาม มีการศึกษาถึงรูปแบบต่างๆ ที่อนุญาตให้หมุนได้ 90 องศา หรือแม้แต่ในมุมใดๆ ก็ตาม
โครงสร้าง: ในปัญหาการบรรจุแบบแถบโดยทั่วไป โครงสร้างของการบรรจุไม่สำคัญ อย่างไรก็ตาม มีการใช้งานบางอย่างที่มีข้อกำหนดที่ชัดเจนเกี่ยวกับโครงสร้างของการบรรจุ หนึ่งในข้อกำหนดเหล่านั้นคือความสามารถในการตัดสิ่งของออกจากแถบโดยการตัดขอบชนขอบในแนวนอนหรือแนวตั้ง การบรรจุที่อนุญาตให้มีการตัดแบบนี้เรียกว่าการบรรจุแบบกิโยติน
ความแข็ง
ปัญหาการบรรจุแบบแถบ (Strip Packing Problem) ประกอบด้วยปัญหาการบรรจุแบบกล่อง (Bin Packing Problem)เป็นกรณีพิเศษเมื่อสิ่งของทั้งหมดมีความสูงเท่ากันคือ 1 ด้วยเหตุนี้ ปัญหานี้จึงเป็นปัญหา NP-hard อย่างมาก และไม่มีอัลกอริทึมประมาณค่า แบบเวลาพหุนามใด ที่มีอัตราส่วนการประมาณค่าน้อยกว่าเว้นเสียแต่ว่านอกจากนี้ เว้นแต่ว่าไม่มี อัลกอริทึม เวลาเสมือนพหุนามใดที่มีอัตราส่วนการประมาณค่าที่น้อยกว่า[ 5 ]ซึ่งสามารถพิสูจน์ได้โดยการลดจากปัญหา 3-partition ที่สมบูรณ์แบบ NP อย่างมาก โปรดทราบว่าขอบเขตล่างทั้งสองและนอกจากนี้ยังใช้ได้กับกรณีที่อนุญาตให้หมุนรายการได้ 90 องศา ยิ่งไปกว่านั้น Ashok et al. [ 6 ] ได้พิสูจน์แล้ว ว่าการบรรจุแบบแถบนั้นยากแบบ W[1]เมื่อกำหนดพารามิเตอร์ด้วยความสูงของการบรรจุที่เหมาะสมที่สุด
คุณสมบัติของคำตอบที่เหมาะสมที่สุด
มีขอบเขตล่างที่ไม่สำคัญสองประการสำหรับคำตอบที่เหมาะสมที่สุด ประการแรกคือความสูงของสิ่งของที่ใหญ่ที่สุด กำหนดให้ดังนั้นจึงถือได้ว่า
.
ขอบเขตล่างอีกประการหนึ่งกำหนดโดยพื้นที่รวมของสิ่งของ กำหนดดังนั้นจึงถือว่า
.
ขอบเขตล่างสองค่าต่อไปนี้คำนึงถึงข้อเท็จจริงที่ว่าสิ่งของบางอย่างไม่สามารถวางติดกันในแถบได้ และสามารถคำนวณได้ใน[ 7 ] สำหรับขอบล่างแรก ให้ถือว่ารายการต่างๆ เรียงลำดับตามความสูงที่ไม่เพิ่มขึ้นกำหนดสำหรับแต่ละกำหนดดัชนีแรกเช่นนั้นดังนั้นจึงถือได้ว่า
สำหรับขอบล่างที่สอง ให้แบ่งเซตของรายการออกเป็นสามเซต ให้และกำหนด, , และดังนั้นจึงถือได้ว่า
ในทางกลับกัน Steinberg [ 8 ]ได้แสดงให้เห็นว่าความสูงของโซลูชันที่เหมาะสมที่สุดสามารถถูกจำกัดไว้ด้านบนโดย
กล่าวโดยละเอียดกว่านั้น เขาได้แสดงให้เห็นว่า เมื่อกำหนดและจากนั้นจึงนำสิ่งของเหล่านั้นมาสามารถวางไว้ภายในกล่องที่มีความกว้างได้และความสูงถ้า
, ที่ไหน .
อัลกอริทึมการประมาณค่าในเวลาพหุนาม
เนื่องจากปัญหานี้เป็นปัญหา NP-hard จึงมีการศึกษาอัลกอริทึมประมาณค่า สำหรับปัญหานี้ วิธีการเชิงฮิวริสติก ส่วนใหญ่ มีอัตราส่วนการประมาณค่าระหว่างและการค้นหาอัลกอริทึมที่มีอัตราส่วนต่ำกว่าดูเหมือนจะซับซ้อน และความซับซ้อนของอัลกอริธึมที่เกี่ยวข้องจะเพิ่มขึ้นตามเวลาการทำงานและคำอธิบาย อัตราส่วนการประมาณค่าที่น้อยที่สุดที่ทำได้จนถึงขณะนี้คือ.
| ปี | ชื่อ | การรับประกันโดยประมาณ | แหล่งที่มา |
|---|---|---|---|
| 1980 | จัดชิดซ้ายจากล่างขึ้นบน (BL) | เบเกอร์และคณะ[ 2 ] | |
| 1980 | Next-Fit Decreasing-Height (NFDH) | คอฟฟ์แมนและคณะ[ 9 ] | |
| การปรับความสูงแบบ First-Fit Decreasing-Height (FFDH) | |||
| สปลิตฟิต (SF) | |||
| 1980 | สลีเตอร์[ 10 ] | ||
| 1981 | อัลกอริทึมการแบ่ง (SP) | โกลัน[ 11 ] | |
| อัลกอริทึมแบบผสม | |||
| 1981 | ขึ้น-ลง (UD) | เบเกอร์และคณะ[ 12 ] | |
| พ.ศ. 2537 | การติดตั้งแบบกลับด้าน | Schiermeyer [ 13 ] | |
| พ.ศ. 2540 | สไตน์เบิร์ก[ 8 ] | ||
| 2000 | เคนยอน, เรมิลา[ 14 ] | ||
| 2009 | แฮร์เรน, แวน สตี[ 15 ] | ||
| 2009 | แจนเซน, โซลิส-โอบา[ 16 ] | ||
| 2011 | Bougeret et al. [ 17 ] | ||
| 2012 | สวิริเดนโก[ 18 ] | ||
| 2014 | Harren et al. [ 3 ] |
จัดชิดซ้ายจากล่างขึ้นบน (BL)

อัลกอริทึมนี้ได้รับการอธิบายครั้งแรกโดย Baker et al. [ 2 ]โดยทำงานดังนี้:
อนุญาตเป็นลำดับของสิ่งของรูปสี่เหลี่ยมผืนผ้า อัลกอริทึมจะวนซ้ำลำดับนั้นตามลำดับที่กำหนด สำหรับสิ่งของแต่ละชิ้นที่พิจารณาโดยจะค้นหาตำแหน่งล่างสุดที่จะวาง แล้วเลื่อนไปทางซ้ายให้มากที่สุดเท่าที่จะเป็นไปได้ ดังนั้นจึงวางตำแหน่งนั้นที่พิกัดล่างสุดซ้ายสุดที่เป็นไปได้ในแถบนั้น
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
- อัตราส่วนการประมาณค่าของอัลกอริทึมนี้ไม่สามารถจำกัดด้วยค่าคงที่ได้ กล่าวโดยละเอียดกว่านั้น พวกเขาแสดงให้เห็นว่าสำหรับแต่ละมีรายการอยู่ ของสิ่งของรูปสี่เหลี่ยมผืนผ้าที่เรียงลำดับตามความกว้างจากน้อยไปมาก ดังนี้, ที่ไหนคือความสูงของการบรรจุที่สร้างขึ้นโดยอัลกอริทึม BL และคือความสูงของวิธีแก้ปัญหาที่เหมาะสมที่สุดสำหรับ[ 2 ]
- หากเรียงลำดับสินค้าตามความกว้างที่ลดลงแล้ว[ 2 ]
- ถ้าสิ่งของทั้งหมดเป็นรูปสี่เหลี่ยมจัตุรัสและเรียงลำดับตามความกว้างที่ลดลงแล้ว[ 2 ]
- สำหรับใดๆมีรายการอยู่ของสี่เหลี่ยมผืนผ้าที่เรียงลำดับตามความกว้างที่ลดลง โดยที่[ 2 ]
- สำหรับใดๆมีรายการอยู่ของสี่เหลี่ยมจัตุรัสที่เรียงลำดับตามความกว้างที่ลดลง โดยที่[ 2 ]
- สำหรับแต่ละรายการมีกรณีหนึ่งที่ประกอบด้วยเฉพาะรูปสี่เหลี่ยมจัตุรัส โดยที่ลำดับของรูปสี่เหลี่ยมจัตุรัสแต่ละแบบมีอัตราส่วนของกล่าวคือ มีบางกรณีที่ BL ไม่พบค่าที่เหมาะสมที่สุด แม้ว่าจะวนซ้ำลำดับที่เป็นไปได้ทั้งหมดของรายการก็ตาม[ 2 ]ในปี 2024 ขอบเขตล่างนี้ได้รับการปรับปรุงโดย Hougardy และ Zondervan เป็น[ 19 ]
- ในปี 2025 ฮูการ์ดีและซอนเดอร์แวนได้สร้างลำดับของสี่เหลี่ยมผืนผ้า (เรียกว่า(การเรียงลำดับ) โดยที่[ 20 ]
Next-fit decreasing-height (NFDH)

อัลกอริทึมนี้ได้รับการอธิบายครั้งแรกโดย Coffman et al. [ 9 ]ในปี 1980 และทำงานดังนี้:
อนุญาตกำหนดให้เป็นเซตของสิ่งของรูปสี่เหลี่ยมผืนผ้า ก่อนอื่น อัลกอริทึมจะเรียงลำดับสิ่งของตามลำดับความสูงที่ไม่เพิ่มขึ้น จากนั้น เริ่มต้นที่ตำแหน่งอัลกอริทึมจะวางสิ่งของต่างๆ ติดกันในแถบจนกว่าสิ่งของชิ้นถัดไปจะทับซ้อนกับขอบด้านขวาของแถบ เมื่อถึงจุดนี้ อัลกอริทึมจะกำหนดระดับใหม่ที่ด้านบนของสิ่งของที่สูงที่สุดในระดับปัจจุบัน และวางสิ่งของต่างๆ ติดกันในระดับใหม่นี้
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
- ระยะเวลาการทำงานสามารถจำกัดได้โดยและหากสินค้าได้รับการจัดเรียงไว้แล้ว แม้กระทั่งโดย.
- สำหรับสินค้าทุกชุดซึ่งจะทำให้เกิดการบรรจุที่มีความสูง, ที่ไหนความสูงสูงสุดของสิ่งของใน[ 9 ]
- สำหรับทุกๆมีเซตของสี่เหลี่ยมผืนผ้าอยู่โดยที่[ 9 ]
- บรรจุภัณฑ์ที่ได้จะเป็นแบบตัดด้วยเครื่องตัดแบบกิโยติน ซึ่งหมายความว่าสามารถแยกชิ้นส่วนได้โดยการตัดขอบชนขอบในแนวนอนหรือแนวตั้งตามลำดับ
การปรับความสูงแบบลดหลั่นตามความเหมาะสมครั้งแรก (FFDH)
อัลกอริทึมนี้ ซึ่งอธิบายครั้งแรกโดย Coffman et al. [ 9 ]ในปี 1980 ทำงานคล้ายกับอัลกอริทึม NFDH อย่างไรก็ตาม เมื่อวางรายการถัดไป อัลกอริทึมจะสแกนระดับจากล่างขึ้นบนและวางรายการในระดับแรกที่พอดี ระดับใหม่จะถูกเปิดก็ต่อเมื่อรายการนั้นไม่พอดีกับระดับก่อนหน้าใดๆ เท่านั้น
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
- ระยะเวลาการทำงานสามารถจำกัดได้โดยเนื่องจากมีอย่างมากที่สุดระดับต่างๆ
- สำหรับสินค้าทุกชุดมันสร้างการบรรจุที่มีความสูง, ที่ไหนความสูงสูงสุดของสิ่งของใน[ 9 ]
- อนุญาตสำหรับชุดสินค้าใดๆ ก็ตามและแถบที่มีความกว้างโดยที่สำหรับแต่ละคนโดยถือว่านอกจากนี้ สำหรับแต่ละมีชุดสิ่งของดังกล่าวอยู่จริง กับ [ 9 ]
- หากสิ่งของทั้งหมดในเป็นรูปสี่เหลี่ยมจัตุรัส จึงถือว่านอกจากนี้ สำหรับแต่ละมีเซตของสี่เหลี่ยมจัตุรัสอยู่ โดยที่ [ 9 ]
- บรรจุภัณฑ์ที่ได้จะเป็นแบบตัดด้วยเครื่องตัดแบบกิโยติน ซึ่งหมายความว่าสามารถแยกชิ้นส่วนได้โดยการตัดขอบชนขอบในแนวนอนหรือแนวตั้งตามลำดับ
อัลกอริทึมการแบ่งและปรับให้เหมาะสม (SF)
อัลกอริทึมนี้ได้รับการอธิบายครั้งแรกโดย Coffman et al. [ 9 ] สำหรับชุดรายการที่กำหนดและแถบที่มีความกว้างวิธีการทำงานมีดังนี้:
- กำหนดจำนวนเต็มที่มากที่สุดที่ทำให้สี่เหลี่ยมผืนผ้าที่กำหนดมีความกว้างหรือน้อยกว่านั้น
- แบ่งแบ่งเป็นสองชุดและโดยที่ประกอบด้วยสิ่งของทั้งหมดด้วยความกว้างในขณะที่ประกอบด้วยสิ่งของทั้งหมดที่มี.
- คำสั่งและโดยที่ความสูงไม่เพิ่มขึ้น
- บรรจุสิ่งของลงในโดยใช้อัลกอริธึม FFDH
- จัดเรียงลำดับชั้น/ชั้นวางที่สร้างโดย FFDH ใหม่ โดยให้ชั้นวางทั้งหมดที่มีความกว้างรวมมากกว่าอยู่ด้านล่างของส่วนที่แคบกว่า
- ซึ่งทำให้ได้พื้นที่สี่เหลี่ยมผืนผ้าของกับถัดจากชั้นวางที่แคบกว่า ซึ่งไม่มีสิ่งของใดๆ วางอยู่
- ใช้ขั้นตอนวิธี FFDH ในการจัดเรียงสิ่งของลงในกล่องโดยใช้พื้นที่เช่นกัน.
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
อัลกอริทึมของสลีเตอร์
สำหรับชุดรายการที่กำหนดและแถบที่มีความกว้างวิธีการทำงานมีดังนี้:
- ค้นหารายการทั้งหมดที่มีความกว้างมากกว่าแล้ววางซ้อนกันไว้ที่ด้านล่างของแถบ (ในลำดับแบบสุ่ม) เรียกความสูงรวมของสิ่งของเหล่านี้ว่า...สิ่งของอื่นๆ ทั้งหมดจะถูกวางไว้ด้านบน.
- จัดเรียงสิ่งของที่เหลือทั้งหมดตามลำดับความสูงจากน้อยไปมาก สิ่งของจะถูกจัดวางตามลำดับนี้
- พิจารณาเส้นแนวนอนที่เปรียบเสมือนชั้นวางของ โดยอัลกอริทึมจะวางสิ่งของลงบนชั้นวางนี้เรียงลำดับจากสูงไปต่ำ จนกว่าจะไม่มีสิ่งของเหลืออยู่ หรือจนกว่าจะวางสิ่งของชิ้นต่อไปไม่ได้
- ลากเส้นแนวตั้งที่ซึ่งจะตัดแถบนั้นออกเป็นสองส่วนเท่าๆ กัน
- อนุญาตเป็นจุดที่สูงที่สุดที่ถูกปกคลุมด้วยสิ่งของใดๆ ในครึ่งซีกซ้าย และจุดที่สอดคล้องกันบนครึ่งขวา ลากเส้นตรงแนวนอนสองเส้นที่มีความยาวเท่ากันที่และลากเส้นแบ่งครึ่งซ้ายและขวาของแถบ เส้นทั้งสองนี้จะสร้างชั้นวางใหม่ ซึ่งอัลกอริทึมจะวางสิ่งของลงไป ดังเช่นในขั้นตอนที่ 3 เลือกครึ่งที่มีชั้นวางต่ำกว่า และวางสิ่งของลงบนชั้นวางนั้นจนกว่าจะไม่มีสิ่งของอื่นวางได้อีก ทำซ้ำขั้นตอนนี้จนกว่าจะไม่มีสิ่งของเหลืออยู่
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
อัลกอริทึมการแบ่ง (SP)
อัลกอริทึมนี้เป็นส่วนขยายของแนวทางของ Sleator และได้รับการอธิบายครั้งแรกโดย Golan [ 11 ] โดยจะวางรายการตามลำดับความกว้างที่ไม่เพิ่มขึ้น แนวคิดหลักคือการแบ่งแถบออกเป็นแถบย่อยในขณะที่วางรายการบางรายการ เมื่อใดก็ตามที่เป็นไปได้ อัลกอริทึมจะวางรายการปัจจุบันวางเคียงข้างกับสิ่งของที่วางไว้แล้วในกรณีนี้ ระบบจะแบ่งแถบย่อยที่เกี่ยวข้องออกเป็นสองส่วน ส่วนหนึ่งประกอบด้วยรายการแรกและอีกอันหนึ่งบรรจุสิ่งของปัจจุบันหากเป็นไปไม่ได้ ระบบจะวางตำแหน่งใหม่วางทับบนสิ่งของที่วางไว้แล้ว และไม่แบ่งแถบย่อยออก
อัลกอริทึมนี้สร้างเซตเอสของแถบย่อย สำหรับแต่ละแถบย่อยs ∈ Sเราทราบว่ามันคือมุมล่างซ้ายs.xpositionและs.ypositionความกว้างของมันs.widthเส้นแนวนอนที่ขนานกับขอบบนและขอบล่างของสิ่งของที่วางไว้ชิ้นสุดท้ายภายในแถบย่อยนี้s.upperและs.ล่างรวมถึงความกว้างของมันด้วยs.itemWidth.
ฟังก์ชัน Split Algorithm (SP) รับอินพุตเป็นรายการต่างๆ ฉันความกว้างของแถบวผลลัพธ์: การบรรจุสิ่งของ เรียงลำดับ I ตามลำดับความกว้างจากน้อยไปมาก; กำหนดรายการว่าง S ของแถบย่อย; กำหนดแถบย่อยใหม่ s โดยกำหนดค่า s.xposition = 0, s.yposition = 0, s.width = W, s.lower = 0, s.upper = 0, s.itemWidth = W; เพิ่ม s ลงใน S; ในขณะที่ I ยังไม่ว่างเปล่าให้เรียกใช้ i := I.pop(); เพื่อลบรายการที่กว้างที่สุดออกจาก I กำหนดลิสต์ใหม่ S_2 ซึ่งประกอบด้วยซับสตริปทั้งหมดที่มีความกว้าง s - ความกว้างของรายการ s ≥ ความกว้างของรายการ i; S_2 ประกอบด้วยแถบย่อยทั้งหมดที่ i พอดีกับสิ่งของที่วางไว้แล้วหากS_2ว่างเปล่าในกรณีนี้ ให้วางสิ่งของนั้นทับสิ่งของอื่น ค้นหาแถบย่อย s ใน S ที่มีค่า s.upper น้อยที่สุดนั่นคือแถบย่อยที่บรรจุสิ่งของน้อยที่สุด วาง i ที่ตำแหน่ง (s.xposition, s.upper); อัปเดต s: s.lower := s.upper; s.upper := s.upper+i.height; s.itemWidth := i.width; ในกรณี นี้ให้วางสิ่งของนั้นไว้ข้างๆ อีกสิ่งของหนึ่งในระดับเดียวกัน แล้วแบ่งแถบย่อยที่เกี่ยวข้อง ณ ตำแหน่งนั้น หาค่า s ∈ S_2 ที่มีค่า s.lower น้อยที่สุด วาง i ที่ตำแหน่ง (s.xposition + s.itemWidth, s.lower); ลบ s ออกจาก S; กำหนดแถบย่อยใหม่สองแถบคือ s1 และ s2 ด้วย s1.xposition = s.xposition, s1.yposition = s.upper, s1.width = s.itemWidth, s1.lower = s.upper, s1.upper = s.upper, s1.itemWidth = s.itemWidth; s2.xposition = s.xposition + s.itemWidth, s2.yposition = s.lower, s2.width = s.width - s.itemWidth, s2.lower = s.lower, s2.upper = s.lower + i.height, s2.itemWidth = i.width; S.add(s1,s2); ฟังก์ชันส่งกลับ สิ้นสุด
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
การติดตั้งแบบย้อนกลับ (RF)
อัลกอริทึมนี้ได้รับการอธิบายครั้งแรกโดย Schiermeyer [ 13 ] คำอธิบายของอัลกอริทึมนี้ต้องการสัญลักษณ์เพิ่มเติมบางอย่าง สำหรับรายการที่วางไว้โดยมุมล่างซ้ายของมันถูกระบุด้วยและมุมบนขวาโดย.
เมื่อกำหนดชุดสิ่งของแล้วและแถบความกว้างวิธีการทำงานมีดังนี้:
- เรียงซ้อนสี่เหลี่ยมผืนผ้าทั้งหมดที่มีความกว้างมากกว่าเรียงซ้อนกัน (ในลำดับแบบสุ่ม) ที่ด้านล่างของแถบ กำหนดให้เป็นความสูงของกองนี้ สิ่งของอื่นๆ จะถูกบรรจุไว้ด้านบน.
- จัดเรียงสิ่งของที่เหลือตามลำดับความสูงจากน้อยไปมาก และพิจารณาสิ่งของตามลำดับนี้ในขั้นตอนต่อไป ให้ให้มีความสูงเท่ากับสิ่งของที่สูงที่สุดในบรรดาสิ่งของที่เหลืออยู่เหล่านี้
- วางสิ่งของทีละชิ้นเรียงชิดซ้ายบนชั้นวางที่กำหนดไว้จนกว่าจะไม่มีสิ่งของอื่นใดวางบนชั้นนี้ได้ หรือจนกว่าจะไม่มีสิ่งของเหลืออยู่แล้ว เรียกชั้นวางนี้ว่าชั้นแรก
- อนุญาตให้ความสูงเท่ากับความสูงของสิ่งของที่ยังไม่ได้แกะกล่องที่สูงที่สุด กำหนดชั้นวางใหม่ที่อัลกอริทึมจะจัดเรียงสิ่งของลงบนชั้นวางนี้จากขวาไปซ้าย โดยจัดวางให้ชิดขวาจนส่วนบนของสิ่งของสัมผัสกับชั้นวางนี้ เรียกชั้นวางนี้ว่าชั้นวางระดับย้อนกลับที่สอง
- จัดวางสิ่งของลงบนชั้นวางทั้งสองชั้นโดยใช้หลักการจัดวางแบบ First-Fit กล่าวคือ วางสิ่งของไว้ที่ชั้นแรกหากพอดี และวางไว้ที่ชั้นที่สองหากไม่พอดี ทำเช่นนี้ต่อไปจนกว่าจะไม่มีสิ่งของเหลือ หรือจนกว่าความกว้างรวมของสิ่งของในชั้นที่สองจะมีขนาดอย่างน้อย.
- เลื่อนระดับย้อนกลับที่สองลงมาจนกว่าสิ่งของจากระดับนั้นจะสัมผัสกับสิ่งของจากระดับแรก กำหนดเนื่องจากตำแหน่งแนวตั้งใหม่ของชั้นวางที่เลื่อนออกไปและเป็นคู่สิ่งของที่สัมผัสกันที่ถูกต้องที่สุดด้วยวางไว้ที่ชั้นแรกและในระดับย้อนกลับที่สอง กำหนด.
- ถ้าแล้วคือสี่เหลี่ยมผืนผ้าชิ้นสุดท้ายที่วางอยู่ในระดับย้อนกลับที่สอง เลื่อนสิ่งของอื่นๆ ทั้งหมดจากระดับนี้ลงไปอีก (ในปริมาณเท่ากันทั้งหมด) จนกว่าชิ้นแรกจะสัมผัสกับสิ่งของจากระดับแรก อีกครั้งที่อัลกอริทึมจะกำหนดคู่สิ่งของที่สัมผัสกันทางด้านขวาสุดและ. กำหนดเนื่องจากชั้นวางถูกเลื่อนลงมาเป็นปริมาณหนึ่ง
- ถ้าจากนั้นเปลี่ยนไปทางซ้ายจนกระทั่งสัมผัสกับสิ่งอื่นหรือขอบของแถบ กำหนดระดับที่สามที่ด้านบนสุดของ.
- ถ้าจากนั้นเปลี่ยนกำหนดระดับที่สามที่ด้านบนสุดของ. สถานที่จัดวางชิดซ้ายในระดับที่สามนี้ โดยให้สัมผัสกับสิ่งของจากระดับแรกทางด้านซ้าย
- จัดเรียงสิ่งของต่อไปโดยใช้หลักการจัดวางแบบ First-Fit แต่ละระดับถัดไป (เริ่มจากระดับที่สาม) จะถูกกำหนดโดยเส้นแนวนอนที่ลากผ่านด้านบนของสิ่งของที่ใหญ่ที่สุดในระดับก่อนหน้า โปรดทราบว่าสิ่งของชิ้นแรกที่วางในระดับถัดไปอาจไม่แตะขอบของแถบด้วยด้านซ้าย แต่สิ่งของจากระดับแรกหรือสิ่งของจากระดับถัดไปอาจแตะขอบได้.
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
อัลกอริทึมของสไตน์เบิร์ก (ST)
อัลกอริทึมของสไตน์เบิร์กเป็นอัลกอริทึมแบบเรียกซ้ำ โดยกำหนดชุดของสิ่งของรูปสี่เหลี่ยมผืนผ้ามาให้และพื้นที่เป้าหมายรูปสี่เหลี่ยมผืนผ้าที่มีความกว้างและความสูงโดยเสนอหลักเกณฑ์การลดขนาดสี่ข้อ ซึ่งจะจัดวางสิ่งของบางส่วนและเหลือพื้นที่สี่เหลี่ยมผืนผ้าขนาดเล็กกว่าที่มีคุณสมบัติเหมือนเดิมสำหรับสิ่งของที่เหลืออยู่ พิจารณาสัญลักษณ์ต่อไปนี้: กำหนดชุดของสิ่งของเราใช้สัญลักษณ์แทนด้วยความสูงของสิ่งของที่สูงที่สุดใน ,ความกว้างของรายการที่ใหญ่ที่สุดที่ปรากฏใน และโดยพื้นที่ทั้งหมดของสิ่งของเหล่านี้ สไตน์เบิร์กแสดงให้เห็นว่าถ้า
,, และ, ที่ไหน,
จากนั้นจึงสามารถวางสิ่งของทั้งหมดไว้ภายในพื้นที่เป้าหมายที่มีขนาดที่กำหนดได้กฎการลดขนาดแต่ละข้อจะสร้างพื้นที่เป้าหมายที่เล็กลงและชุดย่อยของรายการที่จะต้องจัดวาง เมื่อเงื่อนไขข้างต้นเป็นจริงก่อนเริ่มกระบวนการ ปัญหาย่อยที่สร้างขึ้นก็จะมีคุณสมบัตินี้เช่นกัน
ขั้นตอนที่ 1 : สามารถนำไปใช้ได้หาก.
- ค้นหาสินค้าทั้งหมดด้วยความกว้างและนำออกจาก.
- เรียงลำดับตามความกว้างที่ไม่เพิ่มขึ้น และจัดวางไว้ชิดซ้ายที่ด้านล่างของพื้นที่เป้าหมายคือความสูงรวมของพวกเขา
- ค้นหาสินค้าทั้งหมดด้วยความกว้างนำออกจากและนำไปใส่ไว้ในชุดใหม่.
- ถ้าหากว่างเปล่า ให้กำหนดพื้นที่เป้าหมายใหม่เป็นพื้นที่ด้านบนกล่าวคือ มันมีความสูงและความกว้างแก้ปัญหาที่ประกอบด้วยพื้นที่เป้าหมายใหม่นี้และชุดรายการที่ลดลงโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
- ถ้าถ้าไม่ว่างเปล่า ให้เรียงลำดับตามความสูงที่ไม่เพิ่มขึ้น และวางสิ่งของเรียงชิดขวาทีละชิ้นในมุมบนขวาของพื้นที่เป้าหมายให้ความกว้างทั้งหมดของรายการเหล่านี้ กำหนดพื้นที่เป้าหมายใหม่ที่มีความกว้างและความสูงในมุมบนซ้าย แก้ปัญหาที่ประกอบด้วยพื้นที่เป้าหมายใหม่นี้และชุดรายการที่ลดลงโดยใช้วิธีใดวิธีหนึ่ง
ขั้นตอนที่ 2 : สามารถนำไปใช้ได้หากตรงตามเงื่อนไขต่อไปนี้:,และมีสิ่งของที่แตกต่างกันสองอย่างกับ,,,และ.
- หาและและนำออกจาก.
- วางแผ่นที่กว้างกว่าไว้ที่มุมล่างซ้ายของพื้นที่เป้าหมาย และวางแผ่นที่แคบกว่าชิดซ้ายไว้ด้านบนของแผ่นแรก
- กำหนดพื้นที่เป้าหมายใหม่ทางด้านขวาของทั้งสองรายการนี้ โดยให้มีความกว้างตามที่กำหนดและความสูง.
- วางสิ่งของที่เหลือลงในเข้าสู่พื้นที่เป้าหมายใหม่โดยใช้วิธีใดวิธีหนึ่ง
ขั้นตอนที่ 3 : สามารถนำไปใช้ได้หากตรงตามเงื่อนไขต่อไปนี้:,,และเมื่อเรียงลำดับรายการตามความกว้างที่ลดลง จะมีดัชนีอยู่ดังนั้นเมื่อกำหนดในฐานะคนแรกสิ่งของที่บรรจุอยู่ภายในนั้น รวมถึง
- ชุด.
- กำหนดพื้นที่เป้าหมายรูปสี่เหลี่ยมผืนผ้าใหม่สองพื้นที่ โดยพื้นที่หนึ่งอยู่ที่มุมล่างซ้ายของพื้นที่เดิม และมีความสูงและความกว้างและอีกด้านทางซ้ายที่มีความสูงและความกว้าง.
- ใช้วิธีการใดวิธีการหนึ่งเพื่อจัดวางสิ่งของเหล่านั้นเข้าสู่พื้นที่เป้าหมายใหม่แห่งแรกและรายการต่างๆ ในนั้นไปยังอันที่สอง
โปรดทราบว่าขั้นตอนที่ 1 ถึง 3 มีเวอร์ชันสมมาตรเมื่อสลับความสูงและความกว้างของรายการและพื้นที่เป้าหมาย
ขั้นตอนที่ 4 : สามารถนำไปใช้ได้หากตรงตามเงื่อนไขต่อไปนี้:,และมีสิ่งของอยู่ชิ้นหนึ่งโดยที่.
- วางสิ่งของในมุมล่างซ้ายของพื้นที่เป้าหมาย แล้วลบออก.
- กำหนดพื้นที่เป้าหมายใหม่ทางด้านขวาของรายการนี้ โดยให้มีความกว้างตามที่กำหนดและความสูงและนำสิ่งของที่เหลือไปวางไว้ในบริเวณนี้โดยใช้วิธีใดวิธีหนึ่ง
อัลกอริทึมนี้มีคุณสมบัติดังต่อไปนี้:
อัลกอริทึมการประมาณค่าแบบเวลาพсевโดพหุนาม
เพื่อปรับปรุงขอบเขตล่างของสำหรับอัลกอริทึมเวลาพหุนาม ได้มีการพิจารณาอัลกอริทึมเวลาพсевдоพหุนามสำหรับปัญหาการบรรจุแถบ เมื่อพิจารณาอัลกอริทึมประเภทนี้ ขนาดของชิ้นส่วนและแถบทั้งหมดจะถูกกำหนดเป็นจำนวนเต็ม นอกจากนี้ ความกว้างของแถบอนุญาตให้ปรากฏเป็นพหุนามในเวลาการทำงาน โปรดทราบว่าในกรณีนี้จะไม่ถือว่าเป็นเวลาการทำงานแบบพหุนามอีกต่อไป เนื่องจากความกว้างของแถบต้องการขนาดการเข้ารหัสเท่ากับ.
อัลกอริทึมเวลาเสมือนพหุนามที่พัฒนาขึ้นมาส่วนใหญ่ใช้วิธีการเดียวกัน แสดงให้เห็นว่าแต่ละวิธีแก้ปัญหาที่ดีที่สุดสามารถลดรูปและแปลงเป็นวิธีแก้ปัญหาที่มีโครงสร้างจำนวนคงที่ได้ จากนั้นอัลกอริทึมจะวนซ้ำโครงสร้างทั้งหมดเหล่านี้และวางรายการไว้ภายในโดยใช้การเขียนโปรแกรมเชิงเส้นและแบบไดนามิกอัตราส่วนที่ดีที่สุดที่ทำได้จนถึงขณะนี้คือ[ 21 ]ในขณะที่ไม่มีอัลกอริทึมเวลาพсевдопоминомил ที่มีอัตราส่วนที่ดีกว่าเว้นเสียแต่ว่า[ 5 ]
| ปี | อัตราส่วนการประมาณค่า | แหล่งที่มา | ความคิดเห็น |
|---|---|---|---|
| 2010 | Jansen, Thöle [ 22 ] | ||
| 2016 | Nadiradze, Wiese [ 23 ] | ||
| 2016 | กัลเวซ, แกรนโดนี, อิงกาลา, ข่าน[ 24 ] | รวมถึงการหมุน 90 องศาด้วย | |
| 2017 | แจนเซน เรา[ 25 ] | ||
| 2019 | แจนเซน เรา[ 21 ] | รวมถึงสำหรับการหมุน 90 องศาและงานขึ้นรูปต่อเนื่องด้วย |
อัลกอริทึมออนไลน์
ในรูปแบบการบรรจุแบบแถบออนไลน์สินค้าจะทยอยมาถึงตามเวลา เมื่อสินค้ามาถึง จะต้องนำไปวางทันที ก่อนที่จะทราบว่ามีสินค้าชิ้นต่อไปมาถึงหรือไม่ มีอัลกอริทึมออนไลน์สองประเภทที่ได้รับการพิจารณา ในรูปแบบแรก ไม่อนุญาตให้เปลี่ยนแปลงการบรรจุเมื่อวางสินค้าไปแล้ว ในรูปแบบที่สอง สามารถบรรจุสินค้าใหม่ได้เมื่อมีสินค้าชิ้นต่อไปมาถึง รูปแบบนี้เรียกว่าแบบจำลองการย้ายตำแหน่ง
คุณภาพของอัลกอริทึมออนไลน์วัดได้จากอัตราส่วนการแข่งขัน (สัมบูรณ์)
,
ที่ไหนสอดคล้องกับคำตอบที่สร้างขึ้นโดยอัลกอริธึมออนไลน์และสอดคล้องกับขนาดของคำตอบที่เหมาะสมที่สุด นอกจากอัตราส่วนการแข่งขันสัมบูรณ์แล้ว ยังมีการศึกษาอัตราส่วนการแข่งขันเชิงอะซิมโทติกของอัลกอริธึมออนไลน์ด้วย ตัวอย่างเช่นกับมันถูกนิยามว่า
.
โปรดทราบว่าอินสแตนซ์ทั้งหมดสามารถปรับขนาดได้ดังนี้.
| ปี | อัตราส่วนการแข่งขัน | อัตราส่วนการแข่งขันเชิงอะซิมโทติก | แหล่งที่มา |
|---|---|---|---|
| พ.ศ. 2526 | 6.99 | เบเกอร์และชวาร์ซ[ 26 ] | |
| พ.ศ. 2540 | Csirik และ Woeginger [ 27 ] | ||
| 2007 | 6.6623 | ฮูริงค์และเปาโลส[ 28 ] | |
| 2009 | 6.6623 | เย่ ฮั่น และจาง[ 29 ] | |
| 2007 | ฮัน และคณะ[ 30 ] + เซเดน[ 31 ] |
กรอบงานของ Han et al. [ 30 ]สามารถนำไปใช้ได้ในสภาพแวดล้อมออนไลน์หากอัลกอริทึมการบรรจุถังออนไลน์เป็นของคลาส Super Harmonic ดังนั้น อัลกอริทึมการบรรจุถังออนไลน์ Harmonic++ ของ Seiden [ 31 ]จึงหมายถึงอัลกอริทึมสำหรับการบรรจุแถบออนไลน์ที่มีอัตราส่วนเชิงเส้นกำกับ 1.58889
| ปี | อัตราส่วนการแข่งขัน | อัตราส่วนการแข่งขันเชิงอะซิมโทติก | แหล่งที่มา | ความคิดเห็น |
|---|---|---|---|---|
| พ.ศ. 2525 | บราวน์ เบเกอร์ และแคทเซฟ[ 32 ] | |||
| 2006 | 2.25 | โยฮันเนส[ 33 ] | นอกจากนี้ยังใช้ได้กับปัญหาการจัดตารางงานแบบขนานด้วย | |
| 2007 | 2.43 | ฮูริงค์และเปาโลส[ 34 ] | นอกจากนี้ยังใช้ได้กับปัญหาการจัดตารางงานแบบขนานด้วย | |
| 2009 | 2.457 | เคิร์นและพอลลัส[ 35 ] | ||
| 2012 | บาโลห์และเบเกซี[ 36 ] | ขอบล่างเนื่องจากปัญหาการบรรจุลงถังที่เป็นพื้นฐาน | ||
| 2016 | 2.618 | หยู เหมา และเซียว[ 37 ] |