我正在尝试使用论文中的代码,但是这些天 gurobi 的代码似乎发生了变化,它显示了一些错误,我想将下面的 gurobi 环境设置放入我的优化中。
gurobi环境设置如下:
function setup_gurobi_env(; quiet_mode = true, method_type = :barrier, use_time_limit = true, time_limit = 60.0)
env = Gurobi.Env()
if quiet_mode
setparams!(env; OutputFlag = 0)
end
if method_type == :barrier
setparams!(env; Method = 2)
elseif method_type == :method3
setparams!(env; Method = 3)
elseif method_type != :default
error("Enter a valid method type for Gurobi.")
end
if use_time_limit
setparams!(env; TimeLimit = time_limit)
end
return env
end
论文作者使用以下方法来使用此设置:
function portfolio_simplex_jump_setup(Sigma::Matrix{Float64}, gamma::Float64; gurobiEnv = setup_gurobi_env(method_type = :default, use_time_limit = false))
(d, d2) = size(Sigma)
if d != d2
error("Sigma dimensions don't match")
end
mod = Model(with_optimizer(Gurobi.Optimizer, gurobiEnv))
@variable(mod, w[1:d] >= 0)
@constraint(mod, sum(w[i] for i = 1:d) <= 1)
@constraint(mod, w'*Sigma*w <= gamma)
function local_portfolio_oracle(c::Vector{Float64})
@objective(mod, Min, dot(c, w))
optimize!(mod)
z_ast = objective_value(mod)
w_ast = value.(w)
return (z_ast, w_ast)
end
return c -> local_portfolio_oracle(c)
end
我将函数更改为这个,但由于我的编码太旧,它仍然显示无法使用 gurobi 的错误。
function portfolio_simplex_jump_setup(; gurobiEnv = setup_gurobi_env(method_type = :default, use_time_limit = false))
mod = Model(Gurobi.Optimizer)
@variable(mod, 0 <=w[1:d] <= 1)
@constraint(mod, sum(w[i] for i = 1:d) <= 3)
function local_portfolio_oracle(c::Vector{Float64})
@objective(mod, Min, dot(c, w))
optimize!(mod)
z_ast = objective_value(mod)
w_ast = value.(w)
return (z_ast, w_ast)
end
return c -> local_portfolio_oracle(c)
end
我认为问题出在这里
mod = Model(with_optimizer(Gurobi.Optimizer, gurobiEnv))
也许gurobi只是上传新的编码方法?
谢谢所有回复我的人~
最佳答案
这是当前使用 Gurobi 的模式(取 self 的学术代码之一):
const GRB_ENV = Gurobi.Env()
m = Model(()->Gurobi.Optimizer(GRB_ENV))
set_optimizer_attribute(m, "OutputFlag", 0)
set_optimizer_attribute(m, "TimeLimit", 100)
set_optimizer_attribute(m, "MIPGap", 0.001)
set_optimizer_attribute(m, "Threads", min(length(Sys.cpu_info()),16))
关于julia - 如何通过函数在 Julia 中设置 Gurobi 环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72380071/