Solver Foundation Optimization - 1D Bin Packing

时间:2012-04-14 21:01:46

标签: c# optimization

我想优化将大理石块装入卡车。我不知道,如果我可以为此目的使用Solver Foundation课程。之前,我开始编写代码,我想在这里问一下。

  • 大理石的重量可以在1到24吨之间。
  • 一辆卡车最多可容纳24吨。
  • 它可以加载尽可能多的大理石立方体,因为它可能需要多达24个音调,这意味着没有音量限制。
  • 根据时间的不同,可以有200到500种不同的大理石块。

目标 - 目标是在最小的卡车装运中装载大理石块。

如果不编写很多if条件和for循环,我怎么能这样做呢?

我可以为此目的使用Microsoft Solver Foundation吗?

我阅读了Microsoft提供的文档,但是找不到与我类似的场景。

M1+ M2 + M3 + .... Mn <=24这是一次卡车运输。

假设有200种不同的大理石重量,大理石重量是Float。

由于

1 个答案:

答案 0 :(得分:5)

您可以使用Microsoft Solver Foundation来解决此问题。 可以找到这样一个解决方案的示例here,其中包装箱问题的OML如下:

Model[ 
  Parameters[Sets,Items,Bins], 
  Parameters[Integers,OrderWidth[Items],BinWidth[Bins]], 

  Decisions[Integers[0,1],x[Items,Bins]], 
  Decisions[Integers[0,1],y[Bins]], 

  Constraints[    
    Foreach[{i,Items},Sum[{j,Bins}, x[i,j]]==1 ], 
    Foreach[{j,Bins}, Sum[{i,Items}, OrderWidth[i]*x[i,j]] <= BinWidth[j]], 
    Foreach[{i,Items},{j,Bins}, y[j] >= x[i,j]] 
  ], 

  Goals[Minimize[UsedBins->Sum[{j,Bins},y[j]]]] 
]

将OrderWidth更改为MarbleWeight并将BinWidth更改为TruckCapacity(或者在您的情况下仅为24)将很容易