MS Solver - 如何在布尔表达式中使用整数决策?

时间:2016-07-29 21:59:18

标签: c# mathematical-optimization ms-solver-foundation

我正在使用MS Solver尝试解决bin包装问题,但我无法弄清楚如何在布尔表达式中使用我的Decisions来创建Term。

这是我的问题大纲:

我试图将物品放入垃圾箱,尽量减少垃圾箱的数量。所有的箱子大小都相同。

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

SKU尺寸数量

  1. 100 94
  2. 50 50
  3. 25 27
  4. Bin Size = 4200

    是的,它是一维装箱问题。

    我知道我可以将我需要打包的3个SKU的所有项目装入5个箱子,理论上最小值为3个箱子。我可以使用MS Solver改进此解决方案并降至4个甚至3个分区吗?

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

    我创建了一个2D决策矩阵 - 行数对应于5个分箱的第一个猜测,3个列是分档中每个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;
            }
    

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

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

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

0 个答案:

没有答案