2017-07-17 4 views
0

私はGurobiで複数の目的関数をどのように使用できるか混乱しています。私はthisを見つけましたが、実際にどのように私はこれで複数の目的関数を実装することができない理解していない。Gurobiマルチターゲット

通常、私はObjectiveとしてGRBLinExprのようなものを設定します。しかし、例のようにObjNを設定することはできません。もう一つのことは、いくつかの目標を最小化し最大化したいということです。したがって、このコードのための溶液は、x = 0であるべきで、yは例えば

どのようにすることができ、0、Z = 10 =

GRBEnv env = new GRBEnv(); 
GRBModel model = new GRBModel(env); 

var x = model.AddVar(0, 10, 0, GRB.INTEGER, ""); 
var y = model.AddVar(0, 10, 0, GRB.INTEGER, ""); 
var z = model.AddVar(0, 10, 0, GRB.INTEGER, ""); 

var expr1 = new GRBLinExpr(); 
expr1.AddTerm(1, x); 
expr1.AddTerm(1, y); 
expr1.AddTerm(1, z); 

model.AddConstr(expr1 >= 5, ""); 


var expr2 = new GRBLinExpr(); 
expr2.AddTerm(1,z); 

model.NumObj = 3; // there are 3 Objectives 
model.Parameters.ObjNumber = 1; 
model.ObjNWeight = 1; 
model.ObjNPriority = 2; 
model.ObjNName = "MinSum"; 
// i need to set this somehow ... 
model.SetObjective(expr2, GRB.MAXIMIZE); 


model.Parameters.ObjNumber = 2; 
model.ObjNWeight = 1; 
model.ObjNPriority = 1; 
model.ObjNName = "MaxZ"; 
// i need to set this somehow ... 
model.SetObjective(expr1, GRB.MINIMIZE); // overwrites first objective 

model.Optimize(); 
Console.WriteLine($"x={x.X} y={y.X} z={z.X}"); 

:ここ

簡単な例(用量動作しない)でありますこのようなものを達成する?

答えて

1

バージョン7.5では、メソッドGRBModel.SetObjectiveN()supports multiple objectivesです。あなたがGRBModel.SetObjectiveN()を使用する場合は、次のエラーを修正する必要がありますが、あなたのコードは、バージョン7.5で動作するはずです:

  1. model.NumObjは2
  2. model.Parameters.ObjNumberはそれぞれ0と1、
する必要がありますする必要があります
+1

私はバージョン7.0を持っていますので、私のバージョンをアップグレードする必要があります – MrWoffle

関連する問題