อัลกอริทึมการบรรจุ 3d สำหรับการจัดส่งของรายการ


24

ฉันได้รับงานเพื่อสร้างการประมาณค่าจัดส่งซึ่งแสดงให้เห็นว่ามีที่พักที่ดีที่สุดในกล่องน้อยที่สุด:

  1. มีชุดกล่องสี่เหลี่ยมขนาดเท่าจำนวน จำกัด ที่ทราบ

  2. มีหลายรายการ retangular โดยพลการที่จะบรรจุภายในกล่อง

  3. ควรใช้กล่องให้น้อยที่สุดเท่าที่จะทำได้ เนื่องจากการจัดส่งสองกล่อง 1x1x1 มีราคาแพงกว่ากล่องหนึ่ง 1x2x1 นี่ควรเป็นลำดับความสำคัญที่นี่

  4. ควรปรับให้เหมาะสมเพื่อใช้กล่องขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ตามลำดับความสำคัญในระดับที่สอง (เช่น: หากนำเสนอด้วยตัวเลือกระหว่างหนึ่งกล่องที่ใหญ่กว่าและสองกล่องเล็กควรเลือกกล่องที่ใหญ่กว่า)

  5. รายการสามารถหมุนได้เพื่อให้พอดีกับกล่อง แต่การหมุนต้องถูก จำกัด ด้วยการเพิ่มขึ้นที่ 45 °เป็นอย่างน้อย (ในงานวิจัยของฉันดูเหมือนว่าการกำหนดค่าบางอย่างอนุญาตให้การหมุน 45 องศาเพื่อให้พอดีกับกล่องสี่เหลี่ยมในกล่องสี่เหลี่ยมขนาดใหญ่ขึ้น) เป็น 90 °การหมุนมาตรฐานที่จะต้องดำเนินการ

  6. กล่องมีขีด จำกัด น้ำหนักและรายการมีน้ำหนักโดยพลการ (เช่น: รายการที่มีขนาด 1x1x1 สามารถมีขนาดเล็กกว่ารายการ 2x2x2 อื่น ๆ )

ฉันได้ทำการวิจัยเล็กน้อยและพบว่ามีอัลกอริทึมที่เป็นนามธรรมบางอย่างเกี่ยวกับ bin bin และปัญหาเป้หลัง

  1. เรียงลำดับรายการตามลำดับที่ลดลง (ใหญ่กว่าก่อน) ในรายการ "รายการที่จะแพ็ค"

  2. สำหรับแต่ละรายการในรายการนี้:

    1. เลือกกล่องขนาดเล็กที่อยู่ในรายการ "กล่องที่ใช้แล้ว" และมีปริมาณและน้ำหนักที่เหลือเพียงพอเพื่อให้พอดีกับรายการ (ฉันจะใช้พอดีที่นี่เพื่อปรับขนาดและน้ำหนักให้เหมาะสม)

    2. หากไม่มีกล่องดังกล่าวให้สร้างกล่องใหม่จากชุดรู้ขนาดกล่องที่เป็นไปได้ซึ่งเป็นขนาดที่เล็กที่สุดที่สามารถพอดีกับขนาดและน้ำหนักของรายการและเพิ่มลงในรายการ "กล่องที่ใช้แล้ว"

    3. หากกล่องมีขนาดพอดีกับรายการ (ใช้การปรับการทำงานของเสียงร้อง) ให้เพิ่มไปยังรายการ "รายการของกล่องนี้" และลบออกจากรายการ "รายการที่พอดี" โดยทำเครื่องหมายตำแหน่ง 3d ที่สัมพันธ์กันภายในกล่อง

    4. ทำซ้ำตั้งแต่ 2.1 จนกระทั่งไม่มีรายการที่จะทำการติดตั้งในรายการ "items to pack"

ฟังก์ชั่นตรวจสอบอุปกรณ์ที่ใช้ในขั้นตอนที่ 2 ด้านบน

  1. ตรวจสอบว่าระดับเสียงที่เหลือของกล่องนั้นเหมาะกับระดับเสียงของรายการหรือไม่ ถ้าไม่กลับเท็จ

  2. ตรวจสอบว่าน้ำหนักรวมของ "รายการของกล่อง" บวกกับน้ำหนักรายการปัจจุบันน้อยกว่าหรือเท่ากับขีด จำกัด น้ำหนักของกล่อง ถ้าไม่กลับเท็จ

  3. ทำเครื่องหมายรายการ "รายการของกล่อง" เพื่อเลือกพิกัดกล่องแรกที่มีองค์ประกอบ Y ที่เล็กที่สุดและมีพื้นที่เพียงพอสำหรับความกว้างความลึกและความสูงของรายการโดยพิจารณารายการอื่น ๆ ที่วางเป็นพื้นที่ว่าง

  4. หากรายการไม่พอดีกับทิศทางการหมุนปัจจุบันของมันในหนึ่งใน 6 การหมุนที่เป็นไปได้ไม่ใช่การหมุนแบบ 45 °เพื่อความเรียบง่าย (การหมุนที่ส่งผลให้มีขนาดที่ทดสอบแล้วสามารถข้ามไปได้เช่น: การหมุนกล่อง 180 °ให้ขนาดเดียวกันกับตำแหน่งเดิมเนื่องจากกล่องและรายการทั้งหมดมีขนาดเท่ากันสำหรับใบหน้าตรงข้ามและสามารถข้ามไปได้)

  5. หากรายการไม่ได้หมุนตามวิธีที่เป็นไปได้ทั้งหมดกลับไปที่การวางแนวดั้งเดิมลองอีกครั้งจากขั้นตอนที่ 3

  6. หากการหมุนทั้งหมดที่พยายามแล้วและไม่พอดีให้พิจารณาพิกัดปัจจุบันเป็นพื้นที่ไม่พร้อมใช้งาน

  7. หากไม่มีพื้นที่ว่างในการตรวจสอบให้คืนค่าเป็นเท็จ ลองอีกครั้งจากขั้นตอนที่ 3

ฉันต้องการทราบว่าอาจมีทางออกที่ดีที่สุดสำหรับปัญหาของฉันตามข้อ จำกัด ที่นำเสนอหรือไม่

ดูเหมือนว่าจะทำงานได้ในทางทฤษฎี แต่ฉันไม่ได้ลองใช้กับรหัส ฉันอยากรู้ว่าฉันไปในทิศทางที่ถูกต้องหรือมีวิธีที่ดีกว่าในการทำสิ่งนี้

การอ้างอิงจะดีมาก

แก้ไข:

ฉันพบ API บุคคลที่สามที่น่าสนใจซึ่งทำในสิ่งที่ฉันต้องการ แต่จะต้องยกเลิกการเชื่อมต่อดังนั้นฉันจะไม่สามารถเข้าถึงสิ่งเหล่านี้ได้

ตัวอย่างบางส่วนคือ:

แก้ไข 2:

ตัวอย่างปัญหาที่แท้จริงของการแก้ปัญหาคือ:

  • ฉันมี 4 ขนาดกล่อง WxHxD: 10x12x18, 12x16x24, 16x20x30, 24x32x40
  • ฉันมีคำสั่งซื้อ 4 รายการเป็น 1 ขนาด 6x8x10, 2x22x14x30 และ 1x22x4x20

ฉันจะใส่ไอเท็มนี้ลงในกล่องที่มีขนาดตั้งแต่หนึ่งขนาดขึ้นไปโดยใช้กล่องที่น้อยที่สุดเท่าที่จะเป็นไปได้โดยใช้กล่องที่เล็กที่สุดเท่าที่จะเป็นไปได้และปล่อยให้มีพื้นที่ว่างน้อยที่สุดเท่าที่จะทำได้


4
ไม่จำเป็นต้องมีpackingแท็กที่เกี่ยวข้อง algorithmsพอ :)
Chris Cirefice

ฉันอยากรู้อยากเห็นหุ่นยนต์หรือมนุษย์จะทำการบรรจุหีบห่อจริงหรือไม่? ถ้าเป็นอย่างหลังการเพิ่มประสิทธิภาพของพื้นที่จะคุ้มค่ากับเวลาที่ต้องใช้ในการหาวิธีหมุนแต่ละกล่องให้พอดีหรือไม่?
foraidt

คำถามที่ดี. การบรรจุจริงจะดำเนินการโดยมนุษย์ แต่ซอฟต์แวร์จะแนะนำลำดับการบรรจุและตำแหน่งของแต่ละกล่อง มันไม่จำเป็นต้องมีประสบการณ์ในการบรรจุเพื่อดูเลย์เอาต์ที่ให้ไว้และวางสินค้าไว้ในกล่อง ในตอนแรกจะใช้เวลาในการทำความคุ้นเคย แต่จะไม่ต้องใช้ความคิดที่ดีที่สุด
Ricardo Souza

1
ฉันคิดว่า @msw ทั้งหมดกำลังพูดถึงว่าปัญหาประเภทนี้ไม่น่าจะเหมาะสำหรับการแก้ปัญหา "สมบูรณ์แบบ" แต่จะเหมาะกว่าสำหรับวิธีการแก้ปัญหาที่ยอมรับได้ในเวลาที่เหมาะสมกับการวิเคราะห์พฤติกรรมตามกฎที่คุณกำหนด ให้. จากมุมมองทางคณิตศาสตร์นี่มักหมายความว่าคุณเข้าใกล้มันด้วยชุดอัลกอริธึมและเครื่องมือที่แตกต่างกันดังนั้นฉันคิดว่าเขาแนะนำแค่นั้น ตัวอย่างเช่นอัลกอริทึมทางพันธุกรรมการหลอมจำลองและวิธีการอื่น ๆ ในการทำตามเส้นโค้งการไล่ระดับสีไล่ระดับโดยประมาณพื้นที่การแก้ปัญหาสำหรับฮิวริสติกของคุณอาจให้ประโยชน์ที่นี่
J Trana

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

คำตอบ:


4

ถังขยะนั้นยากต่อการคำนวณ นึกถึงครึ่งหนึ่งของปัญหา: คุณต้องการบรรจุสินค้าในกล่องการจัดส่งโดยไม่สูญเปล่าในกล่อง ทางออกที่ดีที่สุดสำหรับการที่จะต้องผ่านชุดย่อยที่เป็นไปได้ทั้งหมดและการจัดเรียงแบบ 3 มิติที่เป็นไปได้ทั้งหมดของผลิตภัณฑ์ที่ต้องการจัดส่งในรถบรรทุกคันเดียว ฉันจะให้ทางออกที่ดีที่สุดแก่คุณเพราะฉันมีเพื่อนที่ทำสิ่งที่เป็นไปไม่ได้หกอย่างก่อนอาหารเช้า

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

ฉันพบว่าคู่มือการออกแบบอัลกอริทึมของ Skiena มีประโยชน์สำหรับการคิดว่าคลาสของอัลกอริทึมใดเหมาะกับปัญหาประเภทใด แต่ฉันส่วนใหญ่ได้เรียนรู้ว่าการแก้ปัญหาที่ดีสำหรับปัญหาทางโลกที่เกิดขึ้นทำให้คุณเผชิญกับความยากลำบากในการคำนวณ ส่วนใหญ่ของสิ่งที่คุณต้องการพอดีกับระดับของปัญหาถังขยะและบทความนั้นเป็นจุดกระโดดที่ดี เป็นที่น่าสังเกตว่าอัลกอริธึมที่ดีที่สุดสำหรับผลิตภัณฑ์นี้เป็นผลิตภัณฑ์เชิงพาณิชย์เพราะงานนี้ปรากฏขึ้นทุกหนทุกแห่งในด้านโลจิสติกส์ (รถรถไฟจำนวนน้อยที่สุดที่ฉันสามารถนำสินค้าของฉันเข้ามาได้) มีเงินจำนวนมากที่ต้องทำหากการวิเคราะห์พฤติกรรมที่ถูกต้องสามารถประหยัดผู้ผลิตรถไฟได้ 100 คันต่อเดือน

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

ขอบคุณ @JTrana สำหรับการขยายความคิดเห็นของฉัน


ขอบคุณสำหรับความคิดเห็นของคุณ. อย่างที่ฉันได้บอกไปแล้วว่าฉันได้ทำการวิจัยเกี่ยวกับเรื่องนี้แล้วและได้ผสมผสานอัลกอริธึมสองสามข้อเพื่อนำเสนอสิ่งที่กล่าวมาข้างต้น ฉันกังวลเฉพาะเกี่ยวกับการบรรจุเท่านั้น กล่องทั้งหมดนี้จะถูกส่งผ่านบริการการโพสต์สำนักงาน โชคดีที่ฉันไม่ต้องจัดการกับรถบรรทุก
Ricardo Souza

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

1
ฉันคิดว่าเรามีการ miscomunication ที่นี่ ฉันอาจไม่ได้แสดงออกมาอย่างดี (อย่างที่คุณอาจสังเกตเห็นว่าภาษาอังกฤษไม่ใช่ภาษาบ้านของฉัน) ฉันไม่ได้ขอให้ขโมยอัลกอริทึม ฉันมาที่นี่เพื่อชี้แจงเกี่ยวกับเรื่องนี้ ฉันได้ทำการวิจัยและวางไว้บนตัวอย่างด้านบนสำหรับ analisys อาจมีบางคนที่เจอกับปัญหาเดียวกันที่สามารถบอกทิศทางที่ดีกว่าให้ฉันได้ หากวิธีการแก้ปัญหาของฉันใช้ไม่ได้ฉันควรทำอย่างไรเพื่อให้ได้ผลลัพธ์ที่ดีกว่า นี่คือคำถามจริงของฉันที่นั่น ฉันหวังว่าฉันทำให้ฉันชัดเจนขึ้นในขณะนี้
Ricardo Souza

ภาษาอังกฤษของคุณดี ฉันคิดว่าปัญหาคือเรากำลังพูดถึงเลเยอร์ที่แตกต่างกันของงาน คุณกำลังคิดที่จะนำไปใช้และฉันกำลังคิดว่าการระเบิดแบบ combinatorial ฉันคิดว่าการแก้ไข 2ของคุณจะช่วยให้คุณเข้าใจปัญหาได้ดีขึ้นจากวิธีที่ฉันดู คุณช่วยแก้ปัญหาดังกล่าวได้ไหม? หากไม่มีการสูญเสียโดยมีกล่องขนาดเล็กที่สุดจำนวนน้อยที่สุดใช่หรือไม่ นั่นเป็นปัญหาการเพิ่มประสิทธิภาพหลายอย่างที่ฉันพูดถึงก่อนหน้านี้ซึ่งฉันบอกว่าเป็นไปไม่ได้ที่จะทำ: คุณจะต้องเสียสละอย่างน้อยหนึ่งในปัจจัยเหล่านั้นเพื่อเพิ่มประสิทธิภาพอีกครั้ง
msw

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

1

เมื่อสร้างอัลกอริทึมใหม่และฉันเพิ่งทำอัลกอริทึมการจัดทำด้วยตัวเอง (ฉันรู้ว่ามันยังมีศักยภาพในการเพิ่มประสิทธิภาพ) ฉันมักจะทำตามวิธีที่ง่ายที่สุด:

ฉันจะเป็นมนุษย์ได้อย่างไรและลองแปลมันเป็นอัลกอริทึม: จากอาจารย์ AI ของฉัน (วิทยาการหุ่นยนต์) Rolf Pfeifer ฉันยังจำได้ว่าปัญญาบางครั้งอาจถูกสร้างขึ้นด้วยกฎง่าย ๆ แทนการ overengineering ฉันพยายามที่จะ underengineer

  1. ระบุรายการที่ใหญ่เกินไป (รายการที่ไม่พอดีกับกล่องที่ระบุ)
  2. พยายามหากล่องที่ดีที่สุดเท่าที่จะเป็นไปได้ (โดยการเปรียบเทียบปริมาณทั้งหมดและขนาดรายการ)
  3. สั่งซื้อรายการจากใหญ่ไปเล็กและกล่อง (เว้นวรรค) จากเล็กไปใหญ่
  4. ติดตั้งรายการที่ใหญ่ที่สุดในพื้นที่ที่เล็กที่สุด
  5. หากรายการที่ใหญ่ที่สุดไม่พบการกระโดดข้ามและลองรายการถัดไปจนกว่าจะไม่มีอะไรเหมาะ
  6. สำหรับรายการที่เหลือให้ค้นหาช่องใหม่ที่ดีที่สุด ...

    X. คิดถึงเหตุการณ์พิเศษเสมอ (ไอเท็มที่มากเกินไปรูปแบบแปลก ๆ ถ้ากล่องมีเพียง 1 ไอเท็มจะไม่เป็นการดีกว่าถ้าส่งไอเท็มที่ไม่มีกล่อง?) แต่คุณสามารถสร้างฮิวริสติกในรูปแบบของการตัดสินใจ ต้นไม้.

นอกหลักสูตรมีคำเตือนเพิ่มเติมที่คุณได้รับฉันเพียงแค่ให้แนวคิดเหล่านี้เป็นจุดเริ่มต้น จากนั้นมีหลายวิธีที่เป็นไปได้ อีกทางเลือกหนึ่งคือการแบ่งกล่องเป็นลูกบาศก์เล็ก ๆ (เช่น 5cmx5cmx5cm) และติดตามพวกเขาในฐานะที่ครอบครอง / ฟรีอีกวิธีหนึ่งอาจเรียกว่า 3d tetris เป็นต้น

ด้วยวิธีการนี้คุณไม่จำเป็นต้องกังวลเกี่ยวกับการระเบิดแบบคอมบิเนชั่น ในทางกลับกันการระเบิดแบบ combinatory อาจเกิดขึ้นได้หากเรากำลังพูดถึงเรื่องของสิ่งของ แต่หลังจากนั้นอีกครั้ง: คุณคิดว่า บริษัท จะตรวจสอบรายการบรรจุภัณฑ์ตามรายการหรือไม่? ไม่มีพวกเขาจะเข้าใกล้โซลูชันการหารและการพิชิต: แบ่งความซับซ้อนโดยใช้ปริมาณมาตรฐาน (เช่นจานสีหรือกล่องขนาดคงที่) ดังนั้นเพื่อประโยชน์ในทางปฏิบัติให้คำนึงถึงว่าไม่เพียง แต่ฝึกฝนบางครั้งเวลาของพนักงานก็เป็นเงินเช่นกัน รถไฟสามารถโหลด x palets ทุก palet มีปริมาตรคงที่ดังนั้นแพ็คสินค้าลงใน palet แต่แล้วอีกครั้งบางที palet ประกอบด้วยหลายออเดอร์ดังนั้นให้ใช้ fixed box สำหรับไอเท็มซึ่งจะโหลดเป็นพาเลตซึ่งโหลดแล้ว เข้าไปในรถไฟ

อย่างน้อยนั่นคือวิธีที่ฉันเป็นมนุษย์จะจัดการกับงานรับกล่องที่ดีที่สุดแล้วใส่รายการที่ใหญ่ที่สุดทีละรายการในพื้นที่ที่เล็กที่สุดที่มีอยู่ (และเพิ่มการแสดงตัวอย่างเล็กน้อย)

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

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

แต่ในขณะที่ฉันเรียนรู้จากอาจารย์ AI ของฉัน (Rolf Pfeifer ขอโทษที่ต้องทำเช่นนั้นอีกครั้ง): บางครั้งคุณสามารถสร้างพฤติกรรมที่ชาญฉลาดอย่างเห็นได้ชัดด้วยกฎง่าย ๆ และกฎไม่กี่อย่าง> พฤติกรรมที่เกิดขึ้นในตัวอย่างดังกล่าว พวกเขาตรวจพบสิ่งกีดขวางทางด้านขวาเลี้ยวขวาหากมีสิ่งกีดขวางทางด้านซ้ายและตรงไปหากไม่มีสิ่งกีดขวางหรือหากมีสิ่งกีดขวางอยู่ข้างหน้า หุ่นยนต์ 3 หรือ 4 ตัววางในสี่เหลี่ยมขนาด 3 x 3 เมตรพร้อมลูกปิงปองจำนวนมากนำไปสู่ความจริงที่น่าอัศจรรย์ที่หุ่นยนต์ดูเหมือนจะล้างทำความสะอาดผลักดันลูกปิงปองไปที่มุมแม้ว่าหุ่นยนต์จะ ตั้งโปรแกรมให้หลีกเลี่ยงอุปสรรคเท่านั้น

PD: ความคลาดเคลื่อนในโลกแห่งความจริงเพียงอย่างเดียวที่ฉันพบจากวิธีการนี้คือเมื่อฉันทำงานพาร์ทไทม์เป็นเวทีสำหรับคอนเสิร์ตใหญ่เช่นเมทัลลิก้าสาวเหล็กหอกบริตนีย์พอล mcCartney คุณชื่อ ... นักขับรถทำงานบน ทัวร์ต่างประเทศมีรายการบรรจุภัณฑ์ที่แม่นยำตามรายการ การคำนวณเสร็จสิ้นครั้งเดียว (ฉันไม่ทราบด้วยมนุษย์หรือเครื่องจักร) จากนั้นทำซ้ำ บางครั้งเมื่อพวกเขาบรรจุเป็นครั้งแรกพวกเขาก็ทำภาพเป็นชั้น ๆ และติดไว้ในรถบรรทุกเพื่อให้ลูกเรือในท้องถิ่นรู้ได้อย่างแม่นยำว่าจะต้องชาร์จกล่องใดเมื่อใดและที่ไหน แต่นี่เป็นความต้องการหีบห่อที่เฉพาะเจาะจงสำหรับทัวร์หนึ่งเที่ยวที่พวกเขามักจะใช้กล่องและรถบรรทุก


1

ฮิวริสติกที่คุณพูดถึงในโพสต์ของคุณน่าสนใจ

ฉันอยากจะแนะนำการแก้ไขสองสามครั้งเพื่อปรับปรุงการแก้ปัญหาขั้นสุดท้าย

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

หรือทุกครั้งที่คุณเริ่มกล่องใหม่แทนที่จะใช้กล่องที่เล็กที่สุดที่สามารถรองรับรายการปัจจุบันคุณสามารถเลือกกล่องที่ใหญ่ที่สุดที่สามารถรองรับได้และเมื่อทุกรายการถูกกำหนดให้กับกล่องลองกำหนดรายการทั้งหมดของ กล่องไปยังกล่องขนาดเล็ก

นอกจากนี้ในฟังก์ชั่นการสวมใส่ของคุณแทนที่จะพิจารณาตำแหน่งของกล่องอื่น ๆ ของคุณตามที่กำหนดคุณสามารถจินตนาการถึงการเปลี่ยนลำดับการโหลด วิธีนี้จะช่วยให้คุณค้นหาวิธีแก้ปัญหาที่ดีกว่าโดยเสียเวลาทำงานนานขึ้น


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