2012-04-15 27 views
2

我正在開發一個購物車項目,該項目需要基於該用戶在購物車中的物品的「郵資計算器」。用於包裹包裝的PHP/C++空間計算

很明顯,我將存儲項目的尺寸incl。體重和填充在數據庫中,並且還將存儲項目將進入的包裹(包裹)尺寸和重量,盒子填充。

確定包裹的重量很容易,但我想知道如何去弄清楚如何通過PHP打包盒子,也就是說,我希望代碼能夠與物品一起玩「俄羅斯方塊」,以確保它們獲得最佳的適合度,並提供準確的郵資費用。

有沒有人有任何想法如何最好地實現這一點,或有人知道一個PHP類或功能可以做到這一點?

編輯:當我說'最好可能適合'也許我很樂觀!讓腳本嘗試在包內分發包的每種可能的組合將超過頂部,但是我可以通過在C++中編寫算法並在用戶'檢出'時使用PHP運行程序來提高速度,返回值是陣列與包裹大小和重量(這些都是需要計算郵資費用)

+3

我相信這是一個[NP難題](http://en.wikipedia.org/wiki/Bin_packing_problem),所以不要指望得到一個「好」的解決方案。 – kba 2012-04-15 22:42:49

+0

@Kristian - 您的鏈接證實了我的懷疑:最好先爭取「最大的第一」,然後編寫一個算法,以便在三個不同的位置處理每個項目,在第一個適合的位置停下來,然後增加到下一個尺寸的包裝如果它不適合。我的主要擔心是過度收費郵資......或收費不足,這不會太好! – 2012-04-15 23:04:34

回答

4

我不相信任何人已經找到完美的算法來做到這一點。所有現有的算法(通常不公開)都試圖獲得接近完美的方法,但在合理的時間內計算每種可能性需要太多的計算。

這些卡車需要在特定的時間點離開。 :)

此外,計算理想擬合還意味着您必須知道每個包裹的準確測量值,並且裝載卡車的人需要使用複雜的「地圖」以完全按照您計算的方式放置這些包裹。

不,實際上,最簡單的方法是計算總體積,使用某個因子(如0.95,您可以隨時進行微調),並將其用作猜測卡車將裝載多少包裹。只要它的人加載你的卡車,這也是最好的方法。其他任何事情都需要機器人根據您的具體計算指令加載卡車。

+0

他並沒有要求將包裹放入卡車,而是將貨物/物品放入包裹中。儘管如此,最後一段對他的問題也是一個有效的答案。 – 2012-04-15 22:49:03

+1

+1我認爲所有段落都適用於此。 – Josh 2012-04-15 22:51:19

+0

我明白你的觀點,主要問題是郵費!我不想過度充電,我不想充電不足,我認爲要走的路是「區域」算法(請參閱OP的第一條評論),但是您對總面積係數提出了一個非常有效的觀點。 – 2012-04-15 23:10:18