最小化Julia JuMP中的最大值

时间:2018-08-17 14:14:05

标签: julia julia-jump mixed-integer-programming

因此,我梳理了与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脚本在CP​​LEX中实现了该问题,该目标函数似乎更加简单。虽然这可能只是我对使用JuMP的无知。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将其建模为线性问题,如下所示:

@variable(m, aux)
for i in x
    @constraint(m, aux >= T[i]
end
@objective(m, Min, aux)