我正在使用MS Solver尝试解决bin包装问题,但我无法弄清楚如何在布尔表达式中使用我的Decisions来创建Term。
这是我的问题大纲:
我试图将物品放入垃圾箱,尽量减少垃圾箱的数量。所有的箱子大小都相同。
假设我有3个SKU(项目类型)。我有不同数量的每个SKU要打包,每个SKU的大小不同:
SKU尺寸数量
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,因为它是使用值类型调用的。
而且,实际上我没有得到解决方案,因为该术语总是评估为相同的值。
如何使用这些决定创建术语?