首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量的Gurobi函数

变量的Gurobi函数
EN

Stack Overflow用户
提问于 2019-04-04 01:56:53
回答 2查看 241关注 0票数 2

我有一个这样的函数:y = f(x) = a*(x/b) + c

我想使用Gurobi来最大化yxy都必须是Gurobi变量。

我如何对这个问题进行建模?

附注:abc都是数值。

EN

回答 2

Stack Overflow用户

发布于 2019-04-04 17:48:18

首先,你必须同时添加xy作为变量,例如

代码语言:javascript
复制
GRBVar x = model.addVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "x");
GRBVar y = model.addVar(0.0, GRB.INFINITY, 0.0, GRB.CONTINUOUS, "y");

然后将目标函数设置为最大化y

代码语言:javascript
复制
GRBLinExpr expr = new GRBLinExpr();
expr.addTerm(1.0, y);
model.setObjective(expr, GRB.MAXIMIZE);

并添加一个约束,声明y = a*(x/b) + c或等效的y - a/b * x = c

代码语言:javascript
复制
expr = new GRBLinExpr();
expr.addTerm(1.0, y); expr.addTerm(- a/b, x); 
model.addConstr(expr, GRB.EQUAL, c, "c0");

或者,也可以通过在变量定义中指定目标系数来设置目标。即,将y的定义替换为

代码语言:javascript
复制
GRBVar y = model.addVar(0.0, GRB.INFINITY, 1.0, GRB.CONTINUOUS, "y");

然后,目标的定义简单地变成

代码语言:javascript
复制
model.set(GRB.IntAttr.ModelSense, GRB.MAXIMIZE);
票数 3
EN

Stack Overflow用户

发布于 2019-05-03 11:24:09

我想补充Silke的答案,您可能需要打开x和y变量的范围,以便它们可以是负值,这取决于您使用的系数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55501435

复制
相关文章

相似问题

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