0

因此,我梳理了与 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 的无知。

谢谢。

4

1 回答 1

0

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

@variable(m, aux)
for i in x
    @constraint(m, aux >= T[i]
end
@objective(m, Min, aux)
于 2018-08-18T16:36:56.773 回答