我正在尝试使用约束逻辑编程 (CLP) 在 (Swi-) Prolog 中找到 NP-hard 2D Variable Size Bin Packing Problem (2DVSBPP) 的算法。
问题可以这样解释:一些订购的产品需要尽可能有效地包装到一些盒子(箱)中。产品有一些给定的宽度和长度(正方形或矩形,例如 2x3)。有四种不同尺寸的箱子,每种箱子都有给托运人的特定成本(例如,5x5 箱子 4 美元,5x7 箱子 5 美元)。目标是最小化盒子的总成本。
一段时间以来,我一直在寻找这个问题的答案,并阅读了许多其他语言的论文和类似示例。但是,我找不到任何可行的解决方案。我特别纠结于如何处理未知数量的 Boxes (bins)。
为了能够找到这个问题的解决方案,我试图适应一个类似的问题,但真的不知道如何处理可变数量的盒子。下面的代码可以选择最便宜的盒子来装所有的产品,只要只需要一个盒子就可以装所有的产品。从我们需要多个盒子的那一刻起,程序就失败了。
盒子和产品:
:- use_module(library(clpfd)).
:- use_module(library(clpr)).
:- expects_dialect(sicstus).
%% These are the possible productsizes that could need packing
% product (id, width, length)
product(1, 2, 2).
product(2, 1, 2).
product(2, 2, 1). % repeating product n2 because it can lay horizontal or …Run Code Online (Sandbox Code Playgroud)