줄리아에 비선형 혼합 정수 솔버가 있습니까?
Aug 20 2020
이 오류에서 저를 도와주세요. 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)
문제를 어떻게 해결할 수 있습니까? 매우 감사합니다.
답변
2 PrzemyslawSzufel Aug 20 2020 at 04:10
모델 유형과 관련된 JuMP 솔버 및 기능의 전체 목록은 여기에서 확인할 수 있습니다. https://jump.dev/JuMP.jl/dev/installation/
이 목록에 따르면 다음 솔버는 혼합 정수 비선형 계획법을 지원합니다.
- 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)))