首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gurobi多目标

Gurobi多目标
EN

Stack Overflow用户
提问于 2017-07-17 13:39:33
回答 1查看 504关注 0票数 0

我对如何在Gurobi中使用多目标函数感到有点困惑。我找到了,但不知道如何用它实现多个目标函数。

通常,我把像GRBLinExpr这样的东西作为目标。但是,我不能像在示例中那样设置ObjN。另一件事是,我想最小化和最大化一些目标。

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

代码语言:javascript
复制
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,例如

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 17:29:39

在版本7.5中,方法GRBModel.SetObjectiveN() 支持多目标。如果使用GRBModel.SetObjectiveN(),那么您的代码应该可以使用版本7.5,尽管您应该修复以下错误:

  1. model.NumObj应该是2
  2. model.Parameters.ObjNumber应分别为0和1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45145835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档