2010-06-29 12 views
5

के लिए किसी न किसी अनुमान की गणना करें I शिपिंग के लिए आवश्यक बॉक्स आकार की गणना करने का सबसे अच्छा तरीका ढूंढने का प्रयास कर रहा हूं।शिपिंग बॉक्स आकार

मेरे पास 3 आकार के कंटेनर हैं जो विभिन्न आकारों के साथ हैं। मेरे पास उत्पाद की चौड़ाई, लंबाई, गहराई और डेटाबेस में परिभाषित द्रव्यमान है।

मैं जानना चाहता हूं कि जहाज में आवश्यक छोटी संख्या में बक्से कैसे ढूंढें, और कार्ट में वस्तुओं की संख्या के कारण उन बक्से के सबसे छोटे आयामों को कैसे ढूंढें।

मेरा वर्तमान 'विचार' पूरे उत्पाद सरणी की अधिकतम चौड़ाई को ढूंढना है, इसके अनुसार एक बॉक्स का चयन करें, और फिर आवश्यकतानुसार ऑर्डर को विभाजित करें ... ऐसा लगता है कि यह काम नहीं करेगा।

मेरे बॉक्स आकार हैं: - 8 x 6 x 6 = 228 घन इंच - 10 x 8 x 8 = 640 घन इंच - 12.5 x 12.5 x 12.5 = 1953.125 घन इंच

एक उत्पाद परिभाषित किया गया है जैसे:

[Product] => Array 
       (
        [STOCK_CODE] => 010003 
        [Product_Slug] => GABA_010003 
        [ItemName] => GABA 
        [WHOLESALE_PRICE] => 17.47 
        [RETAIL_PRICE] => 24.95 
        [Brand] => 
        [ProductLine] => 
        [image_name] => 705077000440 
        [MASS] => 0.313 
        [Height] => 4.625 
        [Width] => 2.375 
        [Depth] => 2.375 
        [cubic_inches] => 26.087890625 
       ) 

मैंने knapsack समस्या, समस्या पैकिंग आदि में देखा है और ऐसा करने का कोई तरीका नहीं मिल रहा है। कोई भी मदद बहुत अच्छी रहेगी।

function shipping(){ 

     $this->CartProduct->unbindModel(
      array('belongsTo' => array('User')) 
     ); 

     //find all cart products by current logged in user 
     $cartItems = $this->CartProduct->find('all', array('conditions' => array('CartProduct.user_id' => $this->Auth->user('id')))); 

     $i = 0; 

     //get the max width, height, depth 
     $maxHeight = 0; 
     $maxWidth = 0; 
     $maxDepth = 0; 
     foreach($cartItems as $c){ 
      $cartItems[$i]['Product']['cubic_inches'] = $c['Product']['Height'] * $c['Product']['Width'] * $c['Product']['Depth']; 
      $cartItems[$i]['CartProduct']['total_cubic_inches'] = ($c['Product']['Height'] * $c['Product']['Width'] * $c['Product']['Depth']) * $c['CartProduct']['qty']; 

      if($c['Product']['Height'] > $maxHeight) 
      { 
       $maxHeight = $c['Product']['Height']; 
      } 

      if($c['Product']['Width'] > $maxWidth) 
      { 
       $maxWidth = $c['Product']['Width']; 
      } 
      if($c['Product']['Depth'] > $maxDepth) 
      { 
       $maxDepth = $c['Product']['Depth']; 
      } 
      $i++; 
     } 

     //possible containers 
     //8 x 6 x 6 = 228 ci 
     //10 x 8 x 8 = 640 ci 
     //12.5 x 12.5 x 12.5 = 1953.125 

     $possibleContainers = array(
      1 => array(
       'Height' => 8, 
       'Width' => 6, 
       'Depth' => 6, 
       'Cubic' => 228), 
      2 => array(
       'Height' => 10, 
       'Width' => 8, 
       'Depth' => 8, 
       'Cubic' => 640), 
      3 => array(
       'Height' => 12.5, 
       'Width' => 12.5, 
       'Depth' => 12.5, 
       'Cubic' => 1953.125) 
     ); 



     $max = array(
      'Height' => $maxHeight, 
      'Width' => $maxWidth, 
      'Depth' => $maxDepth, 
     ); 

     pr($cartItems); 
     pr($possibleContainers); 
     die(); 
    } 
+2

फिक्स्ड स्वरूपण ... यह होमवर्क नहीं है, यह एक शॉपिंग कार्ट सिस्टम के लिए है जिसे मैं लिख रहा हूं। – Wil

+6

ऐसा लगता है कि जैसे ही कोई समस्या गैर-सामान्य, वास्तविक और मूर्त हो जाती है, वास्तव में वास्तविक जीवन की स्थिति पर लागू होने के लिए, इसे होमवर्क के रूप में लेबल किया जाता है, किसी कारण से =/ –

+0

@ जस्टिन एल। मेरे बिल्कुल विपरीत विपरीत था - समस्या असली दुनिया होने के लिए बहुत सामान्य और फोकस थी। आपको क्या लगता है कि यह असली दुनिया थी? संख्याओं (3 बक्से) या वास्तविक आकार की उपस्थिति? वे होमवर्क मुझे संकेत देते हैं। आप दावा क्यों करते हैं कि यह गैर-सामान्य था? यह knapsack समस्या है और यह वास्तव में कठिन है - यही कारण है कि यह आमतौर पर होमवर्क है। –

उत्तर

2

एक इष्टतम जवाब प्राप्त करने के लिए के रूप में, कि एनपी हार्ड विकिपीडिया पर दिखाया लालची एल्गोरिथ्म है, जबकि यह काफी दूर हो सकता है, वास्तव में अपने मामले के लिए कर सकता है ... http://en.wikipedia.org/wiki/Bin_packing_problem

हालांकि अनुमान के मुताबिक आप केवल वस्तुओं की मात्रा को जोड़ सकते हैं और फिर अक्षमता कारक लागू कर सकते हैं और फिर अपने द्वारा किए जा सकने वाले सबसे छोटे बॉक्स का उपयोग कर सकते हैं।

वैकल्पिक रूप से आप वस्तुओं को घटाने की मात्रा में सॉर्ट कर सकते हैं और फिर देख सकते हैं कि आप बॉक्स के वर्तमान सेट में कितना प्राप्त कर सकते हैं, जब आप आइटम को फिट नहीं कर सकते तो एक नया बॉक्स बनाते हैं। सुनिश्चित नहीं है कि आप विभिन्न बॉक्स को कैसे संभालेंगे हालांकि आकार। आपके पास एक ऐसा मामला भी हो सकता है जहां यह नया बॉक्स बनाने के बजाए बॉक्स आकार को बदल देता है।

विचार के लिए भोजन।

हम सिर्फ एक ही मुद्दा में भाग:

+1

मैं आपके परिणामों को हैश तालिका में कैशिंग करने का भी सुझाव दूंगा, इसलिए बॉक्सों का एक ही संयोजन फिर से आने पर गणना फिर से नहीं की जाएगी :) –

+1

मुझे लगता है कि यह पैकेज स्टार्ट-अप समाधान https: // github है। कॉम/डीवीडीडॉग/बॉक्सपेकर सिर्फ भविष्य के संदर्भ के लिए यदि दुनिया का कोई भी व्यक्ति संभावित समाधान के लिए यहां आ गया है: डी –

2

यहाँ एक कम तकनीक लेकिन संभव समाधान है। मैंने अपने बॉक्स आकार लेने का फैसला किया और फिर प्रत्येक उत्पाद को प्रतिशत दिया कि प्रत्येक बॉक्स आकार में कितनी जगह ली गई। हमारे उत्पाद नि: शुल्क रूप हैं और थोड़ा सा स्क्वाइड किया जा सकता है, यदि आपका आकार पूर्ण है तो आपको विभिन्न कोणों पर बॉक्स में रखे उत्पादों के लिए प्रतिशत को कम करने की आवश्यकता हो सकती है ... इसके लिए हम हमेशा भी डाल सकते हैं एक दूसरे के समान कोण के रूप में बक्से में चीजें ताकि यह नीचे की विधि को बेहतर तरीके से काम करने में मदद करे।

इसका मतलब यह है 3 बॉक्स आकार क्यों हैं:

  • उत्पाद ए
    • बॉक्स एक = 48% (एक बॉक्स में 2 फिट)
    • बॉक्स बी = 30% (3 फिट एक बॉक्स) में
    • बॉक्स सी = 12% (8 एक बॉक्स में फिट)
  • उत्पाद बी
    • बॉक्स एक = 24%
    • बॉक्स बी = 15%
    • बॉक्स सी = 7%

तो बस के लिए उन प्रतिशत तक जोड़ अपने कोड है अपने बॉक्स ए, बी और सी के लिए कार्ट आइटम ... स्पष्ट रूप से यदि कोई 100% से कम है, तो सबकुछ फिट होना चाहिए और यदि आप ऊपर से नीचे तक शुरू करते हैं तो 100% से कम तक पहुंचने वाला पहला व्यक्ति आपके उत्पादों को फिट करेगा और सबसे छोटा बॉक्स होगा। और यदि आप किसी भी परिदृश्य में भाग लेते हैं तो पैकिंग जो फिट नहीं होती है, उस उत्पाद के लिए आपके द्वारा दर्ज प्रतिशत को थोड़ा सा कम करें।

एकाधिक बॉक्स शिपमेंट के लिए आपको केवल यह तय करने की आवश्यकता है कि आप संयोजन के रूप में क्या करना चाहते हैं। उपरोक्त एकल बॉक्स शिपमेंट के लिए सबसे अच्छा काम करता है लेकिन कुछ अतिरिक्त तर्क आसानी से कई बॉक्स शिपमेंट के लिए अच्छी तरह से काम कर सकते हैं।

संबंधित मुद्दे