首页>软件资讯>常见问题

常见问题

Gurobi优化求解器介绍

发布时间:2025-05-09 10:01:09人气:65


Gurobi是由美国 Gurobi Optimization 公司开发新一代大规模优化器。Gurobi已经成长为支持混合整数线性规划、混合整数二阶锥和二次凸规划、混合整数二次非凸和双线性规划、混合整数非线性规划的全局精确算法数学规划求解器,并且保持商业求解器的性能领导地位。


Gurobi介绍

Gurobi 是全局精确优化器,支持的模型类型包括:


1. 线性约束和目标模型(连续变量、混合整数,全局精确最优);

2. 二阶锥模型 (连续变量、混合整数,全局精确最优);

3. 二次凸约束和目标模型(连续变量、混合整数,全局精确最优);

4. 二次非凸(双线性、二次等式约束、分母带变量、高阶多项式等)约束和目标模型(连续变量、混合整数,全局精确最优);

5. 非线性模型(除式、高阶多项式、指数、对数、三角函数、范数、逻辑函数等)(连续变量、混合整数,全局精确最优);


6. 从Gurobi 12开始,支持直接处理(混合整数)非线性规划问题,并提供全局MINLP最优性:使用Gurobi的API直接声明非线性约束,并求解混合整数非线性规划(MINLP)问题以达到全局最优解。


对于以上模型,可以叠加的功能包括但不限于:

(1)约束和目标中带有最大、最小、绝对值等数学函数,或者带有 AND、OR、INDICATOR 逻辑条件的模型 (连续变量、混合整数);

(2)多目标优化;

(3)需要获得部分或者全部可行解或者最优解的模型;

(4)不可行约束冲突分析;

(5)优化参数自动调优功能;

(6)分布式计算和多并发计算。


Julia配置Gurobi

在Julia的启动文件startup.jl中添加


# On Windows

ENV["GUROBI_HOME"] = 

"C:\gurobi1200\win64"

# Opt-out of using Gurobi_jll

ENV["GUROBI_JL_USE_GUROBI_JLL"] = "false"

再回到命令行里,输入


import Pkg

Pkg.add("Gurobi")

Pkg.build("Gurobi")

详细参考,可以主页Gurobi.jl[3].


你可以使用JuMP来调用Gurobi,如下命令:


using JuMP, Gurobi

model = Model(Gurobi.Optimizer)

set_attribute(model, "TimeLimit", 100)

set_attribute(model, "Presolve", 0)

来个示例

using Gurobi, JuMP

model = Model(Gurobi.Optimizer)

@variable(model, x[1:2] >= 0)

@objective(model, Min, 2x[1] + 3x[2])

@constraint(model, 4x[1] + 3x[2] <= 24)

optimize!(model)

println("Solution: ", value.(x))

println("Objective Value: ", 

objective_value(model))

方式.png

除了以上方式使用Gurobi,推荐使用以上的方式,但我们还可以使用AMPL的nl文件来使用Gurobi,但这种方式会损失很多建模的优势.


using AmplNLWriter, JuMP

model = Model(

()->AmplNLWriter.Optimizer(Gurobi, #求解器

["outlev=1","funcnonlinear=1"])#设置参数

)

@variable(model, 0 <= x[1:2] <= 10,Int)

@objective(model, Min, 2x[1] + 3x[2] 

+ abs(x[1]-x[2])#绝对值函数

+ sin(x[1]*x[2]) #三角函数

+ x[1]*x[2]/(1+x[1]^2+x[2]^2))#分式函数

@constraint(model, 4x[1] + 3x[2] <= 24)

@constraint(model, 3x[1] + 5x[2] >= 12)

optimize!(model)

println("Solution: ", value.(x))

println("Objective Value: ", 

objective_value(model))

输出的结果,可见


上一条:MongoDB是如何玩转MCP的

下一条:aspen软件是做什么的