因此,我梳理了与Julia JuMP有关的各种网站,并使用函数作为@objective或@NLobjective的参数,但让我尝试说明一下我的问题。我确定我做的事很愚蠢,而且这是一个快速解决方案。
这是一个简短的代码段以及我想做的事情:
using juMP;
tiLim = 1800;
x = range(1,1,M); # M stated elsewhere
solver_opt = "bonmin.time_limit=" * "$tiLim";
m = Model(solver=AmplNLSolver("bonmin",[solver_opt]));
@variables m begin
T[x];
... # Have other decision variables which are matrices
end
@NLobjective(m,:Min,maximum(T[i] for i in x));
现在,根据我的理解,“最大”函数使问题变为非线性,并且在JuMP目标函数中不允许这样做,因此人们将做以下两件事之一:
(1)播放辅助变量+约束技巧,或者
(2)创建一个函数,然后在JuMP中“注册”该函数。
但是,我似乎都做不正确。
这里尝试使用辅助变量+约束技巧:
mymx(vec::Array) = maximum(vec) #generic function in Julia
@variable(m, aux)
@constraint(m, aux==mymx(T))
@NLobjective(m,:Min,aux)
我希望在完成这个看似微不足道的最大最小化任务方面获得帮助。
此外,应该注意,这是我要解决的MILP问题。之前,我已经使用OPL的ILOG脚本在CPLEX中实现了该问题,该目标函数似乎更加简单。虽然这可能只是我对使用JuMP的无知。
谢谢。
答案 0 :(得分:0)
您可以将其建模为线性问题,如下所示:
@variable(m, aux)
for i in x
@constraint(m, aux >= T[i]
end
@objective(m, Min, aux)