Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量的古洛比函数_Java_Gurobi - Fatal编程技术网

Java 变量的古洛比函数

Java 变量的古洛比函数,java,gurobi,Java,Gurobi,我有这样一个函数:y=f(x)=a*(x/b)+c 我想使用Gurobi最大化y。x和y都必须是Gurobi变量 我如何对这个问题建模 注:a、b和c都是数值。首先,您必须将x和y作为变量添加,例如 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=f(x)=a*(x/b)+c

我想使用Gurobi最大化
y
x
y
都必须是Gurobi变量

我如何对这个问题建模


注:
a
b
c
都是数值。

首先,您必须将
x
y
作为变量添加,例如

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

GRBLinExpr expr = new GRBLinExpr();
expr.addTerm(1.0, y);
model.setObjective(expr, GRB.MAXIMIZE);
并添加一个约束,说明
y=a*(x/b)+c
,或等效地
y-a/b*x=c

expr = new GRBLinExpr();
expr.addTerm(1.0, y); expr.addTerm(- a/b, x); 
model.addConstr(expr, GRB.EQUAL, c, "c0");
或者,也可以通过在变量定义中指定目标系数来设置目标。即,将
y
的定义替换为

GRBVar y = model.addVar(0.0, GRB.INFINITY, 1.0, GRB.CONTINUOUS, "y");
然后,目标的定义就变得简单了

model.set(GRB.IntAttr.ModelSense, GRB.MAXIMIZE);

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

希望得到关于为什么这不有用的反馈