最小化Julia跳跃中的最大值

最小化Julia跳跃中的最大值,julia,julia-jump,mixed-integer-programming,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=

因此,我已经浏览了与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));
根据我的理解,“最大值”函数使问题非线性,不允许在跳跃目标函数内,因此人们会做两件事之一:

(1) 玩辅助变量+约束的把戏,或

(2) 创建一个函数,然后使用跳转“注册”该函数

然而,我似乎也做得不对

以下是使用辅助变量+约束技巧的尝试:

mymx(vec::Array) = maximum(vec) #generic function in Julia

@variable(m, aux)
@constraint(m, aux==mymx(T))

@NLobjective(m,:Min,aux)
我希望能得到一些帮助来完成这项看似微不足道的任务,即最大限度地减少最大值

另外,需要注意的是,这是一个MILP问题,我正在努力解决。我以前在CPLEX中使用用于OPL的ILOG脚本实现了这个问题,在这里,这个目标函数看起来更简单。虽然这可能只是我对使用跳跃的无知


谢谢。

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

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