У меня есть следующая простая задача, которую я хочу решить с NLopt:NLopt ошибка Юлии и Ipopt альтернативы
using JuMP
using NLopt
"""
min_x = x1 * x4* (x1 + x2 + x3) + x3
s.t.
x1 * x2 * x3 * x4 >= 25
x_1^2 + x_2^2 + x_3^2 + x_4^2 = 40
1 <= x1,x2,x3,x4 <= 5
starting values: vec(x) = (x1 = 1, x2 = 5, x3 = 5, x4 = 1)
"""
tic()
m = Model(solver=NLoptSolver(algorithm=:LD_MMA))
@defVar(m, 1 <= x1 <= 5)
@defVar(m, 1 <= x2 <= 5)
@defVar(m, 1 <= x3 <= 5)
@defVar(m, 1 <= x4 <= 5)
@setNLObjective(m, Min, x1 * x4 * (x1 + x2 + x3) + x3)
@addNLConstraint(m, x1^2 + x2^2 + x3^2 + x4^2 == 40)
@addNLConstraint(m, x1 * x2 * x3 * x4 >= 25)
setValue(x1, 1)
setValue(x2, 5)
setValue(x3, 5)
setValue(x4, 1)
status = solve(m)
println("got ", getObjectiveValue(m), " at ", [getValue(x1),getValue(x2), getValue(x3), getValue(x4)])
toc()
Однако я получаю ошибку аргумент. Есть ли способ сделать эту работу с NLopt, и если не так, как этот код может измениться, чтобы использовать его с другими бесплатными оптимизаторами, которые могут быть установлены в Julia (возможно, Ipopt, но не Gurobi)?
Может вы публикуете сообщение об ошибке? – IainDunning
ОШИБКА: ArgumentError («недопустимые аргументы NLopt») в chk at (путь NLopt) в push at array.jl: 458 в ограничении равенства! at (путь NLopt) во время загрузки (my_file) – Echetlaeus