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))

除了以上方式使用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软件是做什么的