在JuMP中添加Argmax约束?

时间:2019-11-22 01:30:15

标签: julia julia-jump

我正在尝试向JuMP 0.2.0(古罗比作为求解器)模型添加约束,该模型读取original paper(第12页),如下所示:

c_t = argmax(N_kt)for in 1 ... K

此约束旨在读取逐列的矩阵,找到该列中具有最大值的单元格的 index ,并将该索引分配给单元格c_t。

尽管Julia在Base程序包中具有argmax函数,但是该函数在JuMP中不起作用。尝试执行

for t in 1:T
    @constraint(model, c_t == argmax(N_Kt[:,t])
end

抛出错误DenseAxisArray does not support this operation.,将N_Kt更改为非密集的JuMP数组可消除该错误,但抛出错误MethodError: no method matching isless(::VariableRef, ::VariableRef)

在JuMP中,argmax是否具有等效功能,而我设法错过了这一功能,或者可以选择一种巧妙的方法来重新构造此约束?我很喜欢列表推导,即

for t in t_l 
    for i in 1:num_features
        @constraint(model, [i for k in 1:6 if N_kt[i,t] >= N_kt[k,t]] == c_t[t])
    end
end

但是朱莉娅在尝试这种表达时会引发各种错误。最终的方法“将c_t设置为等于其对应值大于或等于该范围内所有其他值的索引”似乎很有希望,但是同样,即使上面的代码段也会产生错误。是否有更好的方法将条件语句添加到我缺少的约束声明中?

感谢您在这里可以提供的任何帮助!

0 个答案:

没有答案