julia 中有非线性混合整数求解器吗?
Is there any non-linear mixed integer solver in julia?
你能帮我解决这个错误吗。 ERROR: Solver does not support discrete variables.
例如下面的代码
using JuMP,CPUTime, Distributions, Ipopt
#parameters--------------------------------------------------------
sig=0.86;
#---------------------------------------------------------------------------
ALT=Model(solver=IpoptSolver());
# variables-----------------------------------------------------------------
f(x) = cdf(Normal(0, 1), x);
JuMP.register(ALT, :f, 1, f; autodiff = true);
@variable(ALT, h >= 0);
@variable(ALT, L >= 0);
@variable(ALT, n, Int);
#-------------------------------------------------------------------
@NLexpression(ALT,k7,1-f(L-sig*sqrt(n))+f(-L-sig*sqrt(n)));
#constraints--------------------------------------------------------
@NLconstraint(ALT, f(-L) <= 1/400);
#-------------------------------------------------------------------
@NLobjective(ALT, Min, 1/k7)
solve(ALT)
如何解决这个问题?非常感谢。
完整的 JuMP 求解器列表及其在模型类型方面的功能可在此处获得 https://jump.dev/JuMP.jl/dev/installation/
根据此列表,以下求解器支持 mixed-integer 非线性规划:
- KNITRO.jl
- Juniper.jl
- SCIP.jl
还有值得注意的 Alpine.jl
来自洛斯阿拉莫斯,但在 JuMP 文档中未提及。
我建议尝试从 Juniper.jl
开始。由于它使用启发式算法和其他求解器,您 Model
行可能如下所示:
m = Model(optimizer_with_attributes(Juniper.Optimizer, "nl_solver"=>optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0), "mip_solver"=>optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0)))
你能帮我解决这个错误吗。 ERROR: Solver does not support discrete variables.
例如下面的代码
using JuMP,CPUTime, Distributions, Ipopt
#parameters--------------------------------------------------------
sig=0.86;
#---------------------------------------------------------------------------
ALT=Model(solver=IpoptSolver());
# variables-----------------------------------------------------------------
f(x) = cdf(Normal(0, 1), x);
JuMP.register(ALT, :f, 1, f; autodiff = true);
@variable(ALT, h >= 0);
@variable(ALT, L >= 0);
@variable(ALT, n, Int);
#-------------------------------------------------------------------
@NLexpression(ALT,k7,1-f(L-sig*sqrt(n))+f(-L-sig*sqrt(n)));
#constraints--------------------------------------------------------
@NLconstraint(ALT, f(-L) <= 1/400);
#-------------------------------------------------------------------
@NLobjective(ALT, Min, 1/k7)
solve(ALT)
如何解决这个问题?非常感谢。
完整的 JuMP 求解器列表及其在模型类型方面的功能可在此处获得 https://jump.dev/JuMP.jl/dev/installation/
根据此列表,以下求解器支持 mixed-integer 非线性规划:
- KNITRO.jl
- Juniper.jl
- SCIP.jl
还有值得注意的 Alpine.jl
来自洛斯阿拉莫斯,但在 JuMP 文档中未提及。
我建议尝试从 Juniper.jl
开始。由于它使用启发式算法和其他求解器,您 Model
行可能如下所示:
m = Model(optimizer_with_attributes(Juniper.Optimizer, "nl_solver"=>optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0), "mip_solver"=>optimizer_with_attributes(Cbc.Optimizer, "logLevel" => 0)))