6

ビー玉ブロックのトラックへの積み込みを最適化したいと考えています。その目的で Solver Foundation クラスを使用できるかどうかはわかりません。コードを書き始める前に、ここで質問したかったのです。

  • 大理石の重量は 1 ~ 24 トンです。
  • トラックは最大 24 トンを積載できます。
  • 最大 24 個のトーンを使用できるため、大理石のキューブをいくつでもロードできます。つまり、ボリュームの制限はありません。
  • 時間に応じて、200 から 500 の異なるビー玉ブロックが存在する可能性があります。

目標 - 目標は、最小限のトラック輸送で大理石ブロックを積み込むことです。

多くの if 条件と for ループを書かずにそれを行うにはどうすればよいでしょうか?

その目的で Microsoft Solver Foundation を使用できますか?

Microsoft が提供するドキュメントを読みましたが、私のようなシナリオは見つかりませんでした。

M1+ M2 + M3 + .... Mn <=24 トラック1台分です。

200 の異なる大理石の重みがあり、大理石の重みがフロートであるとします。

ありがとう

4

1 に答える 1

5

Microsoft Solver Foundationを使用して、この問題を解決できます。このような解決策の例は、ビンパッキング問題の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)に変更するのは簡単です。

于 2012-04-17T12:01:20.123 に答える