Gurobi多目标

时间:2017-07-17 13:39:33

标签: c# gurobi

我对如何在Gurobi中使用多个目标函数感到困惑。我发现this但是我真的不明白我如何用这个来实现多个目标函数。

通常我将GRBLinExpr设置为Objective。但是我不能在示例中设置ObjN。另一件事是我希望最小化并最大化某些目标。

这是一个简单的例子(不起作用):

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}");

因此该代码的解决方案应为x = 0,y = 0,Z = 10,例如

我怎样才能实现这样的目标?

1 个答案:

答案 0 :(得分:1)

在7.5版中,方法GRBModel.SetObjectiveN()supports multiple objectives。如果您使用GRBModel.SetObjectiveN(),您的代码应该适用于7.5版,但您应该修复以下错误:

  1. model.NumObj应为2
  2. model.Parameters.ObjNumber应分别为0和1