微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内置方法/库来解决 Julia 中的优化问题

如何解决内置方法/库来解决 Julia 中的优化问题

我正在寻找一个内置库或函数解决 Julia 中的最小化问题。也就是说,我有一个包含 10 个参数的大型函数,我想将其输入到求解器中,并且我想找到这 10 个参数的特定值,同时最小化该函数。我注意到有 an introduction to the simplex method in the "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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。