我正在寻找一个内置库或函数来解决最小化问题在朱莉娅。也就是说,我有一个有10个参数的大函数,我想把它输入求解器,我想找到这10个参数的具体值,使这个函数同时最小化。我注意到在"Julia Programming for Operations research"中有对单纯形方法的介绍,但这种最小化只是我整个项目的一小部分,我更愿意使用一些内置功能,库或预制函数GitHub来尽可能快地获得一些快速和脏的结果。这样的Julia库存在吗?
您使用JuMP
和求解器,例如Cbc
:
using JuMP, Cbc
m = Model(Cbc.Optimizer)
@variable(m, 0 <= x[i=1:10] <= 7)
@constraint(m, sum(x) == 15)
@objective(m, Max, sum(i*x[i] for i in 1:10))
optimize!(m)
你可以打印你的模型:
julia> println(m)
Max x[1] + 2 x[2] + 3 x[3] + 4 x[4] + 5 x[5] + 6 x[6] + 7 x[7] + 8 x[8] + 9 x[9] + 10 x[10]
Subject to
x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] == 15.0
x[1] >= 0.0
x[2] >= 0.0
x[3] >= 0.0
x[4] >= 0.0
x[5] >= 0.0
x[6] >= 0.0
x[7] >= 0.0
x[8] >= 0.0
x[9] >= 0.0
x[10] >= 0.0
x[1] <= 7.0
x[2] <= 7.0
x[3] <= 7.0
x[4] <= 7.0
x[5] <= 7.0
x[6] <= 7.0
x[7] <= 7.0
x[8] <= 7.0
x[9] <= 7.0
x[10] <= 7.0
解决方法:
julia> optimize!(m)
Welcome to the CBC MILP Solver
Version: 2.10.3
Build Date: Jan 1 1970
command line - Cbc_C_Interface -solve -quit (default strategy 1)
Presolve 1 (0) rows, 10 (0) columns and 10 (0) elements
0 Obj -0 Primal inf 15 (1) Dual inf 54.999999 (10)
1 Obj 141
Optimal - objective value 141
Optimal objective 141 - 1 iterations time 0.002
Total time (CPU seconds): 0.01 (Wallclock seconds): 0.01
这就是获取变量值的方法:
julia> value.(x)
10-element Vector{Float64}:
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
7.0
7.0