Solver Foundation Optimization - 1D Bin Packing

Val*_*lav 6 c# optimization

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

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

目标 - 目标是以最小的卡车装运装载大理石块.

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

我可以将Microsoft Solver Foundation用于此目的吗?

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

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

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

谢谢

Dav*_*aff 5

您可以使用Microsoft Solver Foundation来解决此问题.这里可以找到这种解决方案的一个例子,其中bin装箱问题的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]]]] 
]
Run Code Online (Sandbox Code Playgroud)

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