Gurobi-目标函数中定义高次函数
最近在使用Gurobi,今天想在目标函数中定义一个三次函数,按照常规写法不行,于是我在网上查了一下,最终找到了解决的方法。
m.setObjective((x - y) - x * x * x - 10 * y * y + 2 * z, GRB.MINIMIZE)
假设我们需要定义一个目标函数,里面含有三次项。如果按照上面的解法我们会得到报错
Error code 10003: Invalid argument to QuadExpr multiplication
经过查阅我发现Gurobi只能够定义两个数相乘,如果我们想定义一个三次函数,我们可以使用下面的方法。
# add constraint so that we can express the cubic
m.addConstr(xx == x * x)
我们可以在constraint中定义一个名为xx
的数为x
的平方,接着在目标函数中我们可以使用xx * x
来表示三次方项。
那么既然我们可以表示三次方项了,有没有什么办法能够表示多次方项呢?答案是有的,我们可以使用
m.addGenConstrPow(x, y, 4)
就能够定义一个y=x^4
,比较简单地表示出多次项。