Gurobi 多目标
Gurobi multi objectives
我对如何在 Gurobi 中使用多个 objective 函数感到有点困惑。我找到了 this,但并不真正理解如何用它实现多个 objective 函数。
通常我将 GRBLinExpr 之类的东西设置为 Objective。但是我不能像示例中那样设置 ObjN。另一件事是我想最小化和最大化一些 objectives。
这是一个简单的例子(无效):
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 例如
我怎样才能实现这样的目标?
在 7.5 版中,方法 GRBModel.SetObjectiveN() supports multiple objectives。如果您使用 GRBModel.SetObjectiveN(),您的代码应该适用于版本 7.5,但您应该修复以下错误:
model.NumObj
应该是 2
model.Parameters.ObjNumber
应该分别是0和1
我对如何在 Gurobi 中使用多个 objective 函数感到有点困惑。我找到了 this,但并不真正理解如何用它实现多个 objective 函数。
通常我将 GRBLinExpr 之类的东西设置为 Objective。但是我不能像示例中那样设置 ObjN。另一件事是我想最小化和最大化一些 objectives。
这是一个简单的例子(无效):
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 例如
我怎样才能实现这样的目标?
在 7.5 版中,方法 GRBModel.SetObjectiveN() supports multiple objectives。如果您使用 GRBModel.SetObjectiveN(),您的代码应该适用于版本 7.5,但您应该修复以下错误:
model.NumObj
应该是 2model.Parameters.ObjNumber
应该分别是0和1