c# - 求解器基础优化 - 一维装箱

标签 c# optimization

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

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

目标 - 目标是以最少的卡车运输量装载大理石 block 。

如何在不编写大量 if 条件和 for 循环的情况下做到这一点?

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

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

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

假设有 200 种不同的 Marble 重量并且 Marble 重量是 float 的。

谢谢

最佳答案

您可以使用 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)

关于c# - 求解器基础优化 - 一维装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157336/

相关文章:

c# - 如何序列化接口(interface)默认属性?

c# - 什么时候 System.Double 不是 double?

C# WebClient 使用异步并返回数据

javascript - 使用单个事件处理程序更改多个文本框值

javascript - 强制使用 JavaScript 开始渲染

python - Python中全局变量和局部变量的速度

c# - expression blend SDK v4.5 在哪里下载

c# - 当方向改变时,如何防止 Xamarin Forms ScrollView 中的内容卡住?

optimization - 为什么 Java API 使用 int 而不是 short 或 byte?

python - 通过 python 优化 pandas group