代码之家  ›  专栏  ›  技术社区  ›  gaurav kataria

在并行计算模式下使用fmincon时出错

  •  0
  • gaurav kataria  · 技术社区  · 7 年前

    我正在使用 UseParallel 用于并行计算的命令 fmincon 因为正常的计算需要很多时间。但在使用时

    np = 6
    Cost = @(u)cost_min( u, CNT, u_in, y_in, Last );
    options = optimoptions( 'fmincon', 'UseParallel', true );
       [ufinal,fval,exitflag,output,grad] = fmincon( Cost, u, A, B, [], [], lb, ub, [], options );
    
    function Cost = cost_min(u,CNT,u_in,y_in,Last)
    global np 
    
        for i = 1
        Costi(i) = (y(i) - yref(i))'*Q(i,i)*(y(i) - yref(i)) + (u(i)- u0)'*R(i,i)*(u(i)- u0);
         end
        for i = 2:np
        Costi(i) = (y(i) - yref(i))'*Q(i,i)*(y(i) - yref(i)) + (u(i)- u(i-1))'*R(i,i)*(u(i)- u(i-1));
        end
    
     Cost = sum(Costi);
    

    Simulink显示错误

    大小向量应该是包含实数元素的行向量。

    而没有 使用并行 选项,模拟工作正常。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Phil Goddard    7 年前

    问题很可能是由于您使用了 global 变量,如果使用并行处理功能,一般和特定情况下应避免使用该变量。

    查看上的此问题 globals and parfor ,以及文档的最后一部分 Troubleshoot Variables in parfor-Loops .