如何解决朱莉娅中有非线性混合整数求解器吗?
请您帮我解决这个错误。 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)
如何解决该问题?非常感谢。
解决方法
此处https://jump.dev/JuMP.jl/dev/installation/
提供了JuMP求解器的完整列表及其在模型类型方面的功能。根据此列表,以下求解器支持混合整数非线性编程:
- KNITRO.jl
- Juniper.jl
- SCIP.jl
还有一点值得注意,Alpine.jl
来自JuMP文档中未提及的Los Alamos。
我建议尝试以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)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。