1

我正在使用 MS Solver 尝试解决装箱问题,但我不知道如何在布尔表达式中使用我的决策来创建术语。

这是我的问题的概述:

我正在尝试将物品装入垃圾箱,尽量减少垃圾箱的数量。所有垃圾箱的大小都相同。

假设我有 3 个 SKU(项目类型)。我要打包的每个 SKU 的数量不同,每个 SKU 的尺寸也不同:

SKU 尺寸 数量

  1. 100 94
  2. 50 50
  3. 25 27

垃圾箱大小 = 4200

是的,这是一个一维装箱问题。

我知道我可以将我必须打包的 3 个 SKU 的所有物品放入 5 个箱子中,理论上最少是 3 个箱子。我可以改进这个解决方案并使用 MS Solver 减少到 4 个甚至 3 个 bin 吗?

这是我的问题:使用 MS Solver 库,我可以设置我的决策和约束,但我似乎无法定义最小化使用的 bin 数量的目标。

我创建了一个 2D 决策矩阵 - 行数对应于 5 个 bin 的第一次猜测,3 列是 bin 中每个 SKU 的数量。

我想尽量减少使用的垃圾箱数量,但我似乎无法让语法适合我的目标。这是我用来尝试创建目标的方法:

        model.AddGoal("MinimumBins", GoalKind.Minimize, CalcBinsUsed(decisions, binCountFirstGuess, ctSizes));
... 

        private Term CalcBinsUsed(List<List<Decision>> decisions, int binCt, int skuCt )
        {
            Term binsUsed = 0;
            for (int bin = 0; bin < binCt; bin++)
            {
                for (int sku = 0; sku < skuCt; sku++)
                {
                    if (!ReferenceEquals(decisions[bin][sku], 0))
                    {
                        binsUsed += 1;
                        break;
                    }
                }
            }
            return binsUsed;
        }

我收到以下警告:'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的。

而且,实际上我没有得到任何解决方案,因为该术语总是评估为相同的值。

如何使用这些决策创建术语?

4

0 回答 0