मुझे एक शिपिंग अनुमान बनाने का कार्य मिला है जो यथासंभव कुछ बक्से पर माल के सर्वोत्तम आवास का सुझाव देता है:
ज्ञात रिटेंगुलर बॉक्स आकारों का एक सीमित सेट है
बक्से के अंदर पैक किए जाने के लिए कई मनमाने रेटैंगुलर आइटम हैं
कम बक्से का सबसे अच्छा उपयोग किया जाना चाहिए। क्योंकि शिपिंग दो बॉक्स 1x1x1 एक बॉक्स 1x2x1 से अधिक महंगा है। यह यहां प्राथमिकता होनी चाहिए।
इसे दूसरे स्तर की प्राथमिकता के रूप में छोटे बक्से का उपयोग करने के लिए भी अनुकूलित किया जाना चाहिए। (उदाहरण: यदि एक बड़े बॉक्स और दो छोटे के बीच की पसंद के साथ प्रस्तुत किया जाता है, तो उसे बड़ा बॉक्स चुनना चाहिए)
आइटम को बॉक्स को फिट करने के लिए घुमाया जा सकता है, लेकिन रोटेशन को न्यूनतम 45 ° की वृद्धि तक सीमित करना पड़ता है (मेरे शोधों में ऐसा लगता है कि कुछ विन्यास 45 डिग्री रोटेशन के लिए एक बड़े प्रतिशोधी बॉक्स के अंदर बेहतर फिट करने के लिए अनुमति देते हैं) , होने के नाते 90 ° घुमाने के लिए मानक लिया जाता है।
बक्से की वजन सीमा होती है और आइटमों की मनमानी वज़न होती है (उदाहरण के लिए: एक आइटम जो आकार 1x1x1 है, अन्य 2x2x2 आइटम की तुलना में ह्वियर हो सकता है)
मैंने थोड़ा शोध किया है और बिन पैकिंग और नॅकैपैक समस्या पर कुछ अमूर्त एल्गोरिदम पाया है और निम्नलिखित कुछ बेहतरीन बदलाव के साथ आया है, जो सबसे अच्छा फिट एल्गोरिदम के समान है:
एक "आइटम पैक करने के लिए" सूची में decrescent वॉल्यूम ऑर्डर (पहले बड़ा) में आइटम सॉर्ट करें
इस सूची के प्रत्येक आइटम के लिए:
उस छोटे बॉक्स को चुनें, जो "यूज्ड बॉक्स" सूची में है और इसमें आइटम फिट करने के लिए पर्याप्त मात्रा और वजन की सीमा है (मैं आयाम और वजन को फिट करने के लिए यहां फिट का उपयोग करूंगा)
यदि ऐसा कोई बॉक्स नहीं है, तो संभव बॉक्स आकारों के सेट से एक नया बॉक्स बनाएं जो सबसे छोटा आकार है जो आइटम के आयाम और वजन को फिट कर सकता है और इसे "उपयोग किए गए बक्से" की सूची में जोड़ सकता है।
यदि कोई बॉक्स आइटम को फिट करता है (फिटिंग फ़ंक्शन बेलो का उपयोग करके), इसे "इस बॉक्स के आइटम" की सूची में जोड़ें और इसे "आइटम से फिट करने के लिए" सूची में हटा दें, यह बॉक्स के अंदर रिश्तेदार 3 डी स्थिति को चिह्नित करता है।
2.1 से दोहराएँ जब तक "आइटम टू पैक" सूची में फिट होने के लिए कोई आइटम नहीं है।
उपर्युक्त चरण 2 पर प्रयुक्त फिटिंग चेक फ़ंक्शन:
जाँच करें कि क्या बॉक्स की शेष मात्रा आइटम की मात्रा फिट बैठती है। यदि नहीं, तो झूठे लौटें।
जांचें कि क्या "बॉक्स की वस्तुओं" का वजन अधिक है और वर्तमान वस्तु का वजन बॉक्स की वजन सीमा के बराबर या कम है। यदि नहीं, तो झूठे लौटें।
पहले बॉक्स को चुनने के लिए "बॉक्स के आइटम" सूची की जांच करें जिसमें सबसे छोटा वाई घटक है और जिसमें आइटम की चौड़ाई, गहराई और ऊंचाई के लिए पर्याप्त स्थान है, अन्य वस्तुओं को अनुपलब्ध स्थान के रूप में देखते हुए।
यदि आइटम फिट नहीं है, तो यह वर्तमान अभिविन्यास है, इसे 6 संभावित घुमावों में से एक पर घुमाएं, सादगी के लिए 45 ° घुमाव नहीं मानते। (रोटेशन जो कि पहले से ही परीक्षण किए गए आकारों में परिणामित हो सकते हैं। उदाहरण के लिए: 180 ° घूमने से मूल स्थिति के समान मंदता प्राप्त होती है क्योंकि सभी बॉक्स और आइटम विपरीत चेहरों के लिए समान आकार के होते हैं और इसलिए इन्हें छोड़ दिया जा सकता है।)
यदि आइटम को उसके मूल अभिविन्यास पर वापस जाने के सभी संभावित तरीकों पर नहीं घुमाया गया है, तो चरण 3 से पुन: प्रयास करें।
यदि सभी घुमाव जहां की कोशिश की गई थी और कोई फिट नहीं पाया गया था, तो वर्तमान समन्वय को अनुपलब्ध स्थान मानें।
यदि जाँच करने के लिए उपलब्ध स्थान नहीं है, तो गलत लौटें। और, चरण 3 से पुन: प्रयास करें।
मैं जानना चाहता हूं कि क्या मेरी समस्या का सबसे अच्छा समाधान हो सकता है, प्रस्तुत बाधाओं को देखते हुए।
यह सिद्धांत पर काम करता है, लेकिन मैंने इसे कोड पर आज़माया नहीं है। मैं यह जानना चाहता हूं कि क्या मैं सही दिशा में जा रहा हूं या ऐसा करने के बेहतर तरीके हैं।
सन्दर्भ बहुत अच्छा होगा।
संपादित करें:
मुझे कुछ दिलचस्प 3rd पार्टी एपीआई मिले हैं जो मैं चाहता हूं, लेकिन इसे डिस्कनेक्ट करना होगा, इसलिए मुझे इन तक पहुंच नहीं होगी।
कुछ उदाहरण निम्न हैं:
2 संपादित करें:
हल करने के लिए समस्या का एक वास्तविक विश्व उदाहरण होगा:
- मेरे पास 4 बॉक्स आकार हैं WxHxD: 10x12x18, 12x16x24, 16x20x30, 24x32x40
- मेरे पास 4 वस्तुओं का एक ऑर्डर है, आकार 1x8x10, 2x 22x14x30 और 1x 22x4x20 का 1
मैं इस आइटम को एक या एक से अधिक आकारों के किसी भी बॉक्स में कम से कम बक्से का उपयोग करके, संभवत: सबसे छोटे बक्से का उपयोग करके और संभव के रूप में कम खाली स्थान छोड़ने पर कैसे फिट करूं?
packing
संबंधित टैग की कोई आवश्यकता नहीं है ;algorithms