Existe-t-il un solveur d'entiers mixtes non linéaires dans Julia ?

Aug 20 2020

pourriez-vous s'il vous plaît m'aider dans cette erreur. ERROR: Solver does not support discrete variables.

par exemple dans le code suivant

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)

Comment est-il possible de résoudre le problème ? Merci beaucoup.

Réponses

2 PrzemyslawSzufel Aug 20 2020 at 04:10

La liste complète des solveurs JuMP et leurs capacités en ce qui concerne les types de modèles est disponible icihttps://jump.dev/JuMP.jl/dev/installation/

Selon cette liste, le solveur suivant prend en charge la programmation non linéaire mixte :

  • KNITRO.jl
  • Juniper.jl
  • SCIP.jl

Il convient également de noter que Alpine.jlLos Alamos n'est pas mentionné dans les documents JuMP.

Je recommande d'essayer de commencer par Juniper.jl. Puisqu'il utilise des heuristiques et d'autres solveurs, votre Modelligne pourrait ressembler à ceci :

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)))