ฉันได้รับงานเพื่อสร้างการประมาณค่าจัดส่งซึ่งแสดงให้เห็นว่ามีที่พักที่ดีที่สุดในกล่องน้อยที่สุด:
มีชุดกล่องสี่เหลี่ยมขนาดเท่าจำนวน จำกัด ที่ทราบ
มีหลายรายการ retangular โดยพลการที่จะบรรจุภายในกล่อง
ควรใช้กล่องให้น้อยที่สุดเท่าที่จะทำได้ เนื่องจากการจัดส่งสองกล่อง 1x1x1 มีราคาแพงกว่ากล่องหนึ่ง 1x2x1 นี่ควรเป็นลำดับความสำคัญที่นี่
ควรปรับให้เหมาะสมเพื่อใช้กล่องขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ตามลำดับความสำคัญในระดับที่สอง (เช่น: หากนำเสนอด้วยตัวเลือกระหว่างหนึ่งกล่องที่ใหญ่กว่าและสองกล่องเล็กควรเลือกกล่องที่ใหญ่กว่า)
รายการสามารถหมุนได้เพื่อให้พอดีกับกล่อง แต่การหมุนต้องถูก จำกัด ด้วยการเพิ่มขึ้นที่ 45 °เป็นอย่างน้อย (ในงานวิจัยของฉันดูเหมือนว่าการกำหนดค่าบางอย่างอนุญาตให้การหมุน 45 องศาเพื่อให้พอดีกับกล่องสี่เหลี่ยมในกล่องสี่เหลี่ยมขนาดใหญ่ขึ้น) เป็น 90 °การหมุนมาตรฐานที่จะต้องดำเนินการ
กล่องมีขีด จำกัด น้ำหนักและรายการมีน้ำหนักโดยพลการ (เช่น: รายการที่มีขนาด 1x1x1 สามารถมีขนาดเล็กกว่ารายการ 2x2x2 อื่น ๆ )
ฉันได้ทำการวิจัยเล็กน้อยและพบว่ามีอัลกอริทึมที่เป็นนามธรรมบางอย่างเกี่ยวกับ bin bin และปัญหาเป้หลัง
เรียงลำดับรายการตามลำดับที่ลดลง (ใหญ่กว่าก่อน) ในรายการ "รายการที่จะแพ็ค"
สำหรับแต่ละรายการในรายการนี้:
เลือกกล่องขนาดเล็กที่อยู่ในรายการ "กล่องที่ใช้แล้ว" และมีปริมาณและน้ำหนักที่เหลือเพียงพอเพื่อให้พอดีกับรายการ (ฉันจะใช้พอดีที่นี่เพื่อปรับขนาดและน้ำหนักให้เหมาะสม)
หากไม่มีกล่องดังกล่าวให้สร้างกล่องใหม่จากชุดรู้ขนาดกล่องที่เป็นไปได้ซึ่งเป็นขนาดที่เล็กที่สุดที่สามารถพอดีกับขนาดและน้ำหนักของรายการและเพิ่มลงในรายการ "กล่องที่ใช้แล้ว"
หากกล่องมีขนาดพอดีกับรายการ (ใช้การปรับการทำงานของเสียงร้อง) ให้เพิ่มไปยังรายการ "รายการของกล่องนี้" และลบออกจากรายการ "รายการที่พอดี" โดยทำเครื่องหมายตำแหน่ง 3d ที่สัมพันธ์กันภายในกล่อง
ทำซ้ำตั้งแต่ 2.1 จนกระทั่งไม่มีรายการที่จะทำการติดตั้งในรายการ "items to pack"
ฟังก์ชั่นตรวจสอบอุปกรณ์ที่ใช้ในขั้นตอนที่ 2 ด้านบน
ตรวจสอบว่าระดับเสียงที่เหลือของกล่องนั้นเหมาะกับระดับเสียงของรายการหรือไม่ ถ้าไม่กลับเท็จ
ตรวจสอบว่าน้ำหนักรวมของ "รายการของกล่อง" บวกกับน้ำหนักรายการปัจจุบันน้อยกว่าหรือเท่ากับขีด จำกัด น้ำหนักของกล่อง ถ้าไม่กลับเท็จ
ทำเครื่องหมายรายการ "รายการของกล่อง" เพื่อเลือกพิกัดกล่องแรกที่มีองค์ประกอบ Y ที่เล็กที่สุดและมีพื้นที่เพียงพอสำหรับความกว้างความลึกและความสูงของรายการโดยพิจารณารายการอื่น ๆ ที่วางเป็นพื้นที่ว่าง
หากรายการไม่พอดีกับทิศทางการหมุนปัจจุบันของมันในหนึ่งใน 6 การหมุนที่เป็นไปได้ไม่ใช่การหมุนแบบ 45 °เพื่อความเรียบง่าย (การหมุนที่ส่งผลให้มีขนาดที่ทดสอบแล้วสามารถข้ามไปได้เช่น: การหมุนกล่อง 180 °ให้ขนาดเดียวกันกับตำแหน่งเดิมเนื่องจากกล่องและรายการทั้งหมดมีขนาดเท่ากันสำหรับใบหน้าตรงข้ามและสามารถข้ามไปได้)
หากรายการไม่ได้หมุนตามวิธีที่เป็นไปได้ทั้งหมดกลับไปที่การวางแนวดั้งเดิมลองอีกครั้งจากขั้นตอนที่ 3
หากการหมุนทั้งหมดที่พยายามแล้วและไม่พอดีให้พิจารณาพิกัดปัจจุบันเป็นพื้นที่ไม่พร้อมใช้งาน
หากไม่มีพื้นที่ว่างในการตรวจสอบให้คืนค่าเป็นเท็จ ลองอีกครั้งจากขั้นตอนที่ 3
ฉันต้องการทราบว่าอาจมีทางออกที่ดีที่สุดสำหรับปัญหาของฉันตามข้อ จำกัด ที่นำเสนอหรือไม่
ดูเหมือนว่าจะทำงานได้ในทางทฤษฎี แต่ฉันไม่ได้ลองใช้กับรหัส ฉันอยากรู้ว่าฉันไปในทิศทางที่ถูกต้องหรือมีวิธีที่ดีกว่าในการทำสิ่งนี้
การอ้างอิงจะดีมาก
แก้ไข:
ฉันพบ API บุคคลที่สามที่น่าสนใจซึ่งทำในสิ่งที่ฉันต้องการ แต่จะต้องยกเลิกการเชื่อมต่อดังนั้นฉันจะไม่สามารถเข้าถึงสิ่งเหล่านี้ได้
ตัวอย่างบางส่วนคือ:
แก้ไข 2:
ตัวอย่างปัญหาที่แท้จริงของการแก้ปัญหาคือ:
- ฉันมี 4 ขนาดกล่อง WxHxD: 10x12x18, 12x16x24, 16x20x30, 24x32x40
- ฉันมีคำสั่งซื้อ 4 รายการเป็น 1 ขนาด 6x8x10, 2x22x14x30 และ 1x22x4x20
ฉันจะใส่ไอเท็มนี้ลงในกล่องที่มีขนาดตั้งแต่หนึ่งขนาดขึ้นไปโดยใช้กล่องที่น้อยที่สุดเท่าที่จะเป็นไปได้โดยใช้กล่องที่เล็กที่สุดเท่าที่จะเป็นไปได้และปล่อยให้มีพื้นที่ว่างน้อยที่สุดเท่าที่จะทำได้
packing
แท็กที่เกี่ยวข้องalgorithms
พอ :)