我在julia jump中有一些性能问题,关于跳转表达式上的加法运算符。 (警告通知)

时间:2019-05-12 11:09:48

标签: performance julia julia-jump

我正在尝试使用Julia和JuMP进行编程优化模型。 我是Julia和JuMP的新手。因此,我认为我不擅长充分利用Julia和JuMP的各种功能和选项。

最近我从Jupyter收到了一些警告通知,如下所示。

“”“ 警告:加法运算符已在JuMP表达式上多次使用。此警告可以忽略不计,但可能表明模型生成的速度比必要的慢。出于性能原因,您不应在循环中添加表达式。代替x + = y,使用add_to_expression!(x,y)修改x。如果y是单个变量,则还可以对x + = coef * y使用add_to_expression!(x,coef,y)。 └@ JuMP C:\ Users \ User.julia \ packages \ JuMP \ jnmGG \ src \ JuMP.jl:689 “”“

此警告给了我一些严重的性能问题。 我用Python和Matlab实现了完全相同的算法。但是它们比朱莉娅快得多。我认为这是不可能的,因为朱莉娅比两种语言都快。

我很想克服这个问题。但是我找不到解决方案。

    while eps_v > Eps_V
        k +=1;

        Grad_U, Grad_Gamma = Grad(U_BGD[1:m, i], Value_f_BGD);
        U_BGD[1:m, i] = U_BGD[1:m, i].-(Step_Size/sqrt(k))*Grad_U;
        Gamma_BGD[:,:,i] = Gamma_BGD[:,:,i].-(Step_Size/sqrt(k))*Grad_Gamma;

        p_bgd[1, 1:m] = -U_BGD[1:m,i]';
        p_bgd[1, m+1:m+N*M] = -reshape(Gamma_BGD[:,:,i]', 1 , N*M);


        # Generate Model & Variables
        model = Model(with_optimizer(CPLEX.Optimizer));
        @variable(model, U_temp[1:m]);
        @variable(model, 0<=Gamma_temp[1:N*M]);
        D = vcat(U_temp, Gamma_temp);
        D = reshape(D, length(D), 1);
        obj  = D'*Q_bgd*D+ p_bgd*D;

        @constraint(model, A_bgd*D.==b_bgd);
        @objective(model, Min, obj[1]);
        @suppress optimize!(model);

        U_BGD[1:m, i] = value.(U_temp);
        Gamma_BGD[:,:,i] = reshape(value.(Gamma_temp), M, N)';
        val = X[1:n,i]'*Q*X[1:n,i]+U_BGD[1:m,i]'*R.*U_BGD[1:m,i]+(alp/N)*sum(Gamma_BGD[:,:,i]*Value_f_BGD', dims=1);
        eps_v = abs(val[1]-val_prev[1]);

        #println(eps_v);
        val_prev = val[1];
    end

以上是我认为有问题的部分。 特别是计算梯度更新部分。 需要有关此升级的帮助。

谢谢。

0 个答案:

没有答案