2016-03-19 4 views
1

:) 私は2つの目標があるとしましょう。私は実際に近い目標を達成したい:Cplexのゴールプログラミング

i=1) profit goal: 12 + 9y ≥ 125 
i=2) cost-goal: 5 + 7y ≤ 50 

文献では、偏差を表す変数を挿入することで目標プログラミングを行うことができます。変数aiがゴールiのゴール値を超える偏差であり、のゴールがゴールiのゴール値以下の偏差であるとします。あなたはそれぞれの偏差を罰する-因子(P)との偏差を処罰することができ、目的関数を作成、最後のステップで

12 + 9y -a1 + b1 = 125 
5 + 7y -a2 + b2 = 50 

:あなたは、次の制約を取得します。

minimize: pd1*b1 + pa1*a1 + pd2*b2 + pa2*a2 

あなたはCPLEX-目標と協力できることを、私はCPLEXのAPIで働いていると私は見た:

IloCplex.Goal 

は、今私は、次の質問がある:

  1. があります便利な方法でCplex APIを使ってこの問題を解決する可能性があるのか​​、この手順を自分で実装する必要がありますか?
  2. 可能であれば、結果の目標値:12 + 9yと5 + 7yはどのようにして得られますか?

ありがとうございました!

+0

Cplexの目標は、分岐を制御するためのもので、ゴールプログラミングには関係しません。 –

答えて

0

はい、これは間違いなくCPLEXを使用して可能です。実際には、a1、a2、b1、b2を導入することによって、必要とされる処方の大半を既に実行しています。さて、あなたは単にCplexモデルオブジェクトを作成し、それに目的を与えてそれを解決する必要があります。 (あなたは必要ありませんIloCplex.Goal)ストレートLPを解決するだけです。

これらのJava examplesのいずれかを見て、それをテンプレートとして実行してください。

目的関数を設定するだけです。あなたは、単に[0]、[1]、B [0]とB [1の最適値を得ることができ、CPLEXはあなたのLPを解く必要があり、

IloNumExpr obj = cplex.sum(cplex.prod(pa0, a[0]), 
          cplex.prod(pa1, a[1]), 
          cplex.prod(pb0, b[0]), 
          cplex.prod(pb1, b[1])); 

    model.add(IloMinimize(env, obj)); 

その後(PA0、PB1などは定数です) ]ゴールからの逸脱を見る。 (aまたはbのどちらか一方のみが正であることに注意してください)。cplex.getValues(x)を使用して変数値を照会します。

希望に役立ちます。