julia - 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/
根据此列表,以下求解器支持混合整数非线性规划:
- KNITRO.jl
- 瞻博网络
- SCIP.jl
还值得注意Alpine.jl
的是,Los Alamos 没有在 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)))
推荐阅读
- mongodb - deleteMany 不适用于 $size 运算符
- javascript - API 密钥未对谷歌表格 API 进行身份验证
- emacs - 如何在 Mac 上为 Emacs 安装 Proof General?
- javascript - 传播时在立即创建的对象上分配对象
- linux - 如何从用户那里读取一些输入来更改目录中存在的文件名?
- python - 隐式组件:设置初始参数值
- jira-rest-api - 如何克隆 JIRA 中的问题?
- ecj - ECJ 中的自适应参数
- verilog - Verilog 多级管道缓冲区问题
- c++ - 在光线追踪器中实现折射后,透明球体大部分是黑色的