2010-11-29 2 views
1

私はJaCoP制約プログラミングライブラリの使い方を教えてきましたが、0/1のナップザック問題を実装するのは少し難しかったです。私は4の問題の大きさを試してみましたが、次のように項目と変数を定義しました:JaCoP:0/1のナップザック問題を解決する

knapsack[0] = new KnapsackItem(quantity[0], 5, 7); 
knapsack[1] = new KnapsackItem(quantity[1], 7, 9); 
knapsack[2] = new KnapsackItem(quantity[2], 2, 3); 
knapsack[3] = new KnapsackItem(quantity[3], 3, 3); 



    IntVar knapsackCapacity = new IntVar(store, "capacity", 0, 10); 
    IntVar knapsackProfit = new IntVar(store, "profit", 0, 22); 

私はその後、ナップザックリストを使用してナップザック制約を追加しました:

制約CON =新しいナップザック(ナップザック、ナップザック能力、ナップザック能力); store.impose(con);

そして、私はその後、チュートリアルで与えられた方法で解決策を検索しました:

//search for a solution and print results 
Search<IntVar> search = new DepthFirstSearch<IntVar>(); 
SelectChoicePoint<IntVar> select = new InputOrderSelect<IntVar>(store, quantity, 
      new IndomainMin<IntVar>()); 
boolean result = search.labeling(store, select); 

if (result) { 
System.out.println("Solution: "+quantity[0]+", "+quantity[1]+", "+quantity[2]+",  "+quantity[3]); 
} else { 
System.out.println("*** No"); 
} 

を私が得る結果は、全ての量がゼロであるということだけである制約条件を満たしているが、何を最適化していません。各項目の利益*数量を最大化するために追加する必要がある別の制約や何かがありますか?

search.labeling(store, select, cost); 

は、私はあなたが(第3引数としてコスト)以下を使用します(最小化)Knapsack制約を使用していないが、一般的に最適化するために、

ベン

答えて

2

ありがとうこれはコストを最小限に抑えるので、利益を「負のコスト」に変換する必要があります。例ExamplesJaCoP/KnapsackExample.javaExamplesJaCoP/Example.javaと組み合わせたもの)が原則を示しています。ただし、この例ではKnapsackItemは使用していません。IntVarのみです。