在 MATLAB 中对具有额外参数传递给它的成本函数进行约束优化

Posted

技术标签:

【中文标题】在 MATLAB 中对具有额外参数传递给它的成本函数进行约束优化【英文标题】:Constrain optimization in MATLAB for cost function which have extra parameter passing to it 【发布时间】:2015-04-30 15:41:13 【问题描述】:

我是一名电气工程师,不熟悉 MATLAB。我的问题是当我调用“fmincon”命令时,如何传递其他用于计算成本函数的变量。首先,我首先创建一个成本函数名称“Sum_Square_error.m”,用于根据估计输出(使用神经网络估计的输出)和实际输出计算平方和误差。在这个函数中,我将使用来自训练网络的权重乘以收缩系数矩阵(c)并将其称为“修改输入权重”。然后我用 modify_input_weight 评估神经网络。所以我得到了估计输出。之后我得到平方和误差。我的目标是通过使用收缩系数矩阵(c)调整神经网络的权重来最小化 Sum_square_error。

我已经阅读了“fmincon”函数参考。我可以通过三种方法传递额外的参数 1.匿名函数 2. 嵌套函数 3. 全局变量 对于此类问题,哪种方法最适合。我尝试使用这样的匿名函数

------------------------------- Sum_Square_error.m - -------------------------------------------------- ---- f = @(c) Sum_Square_error(c,input_weight,X_test,Y_test);

for i=1:10

    modify_input_weight(:,i) = c(i,1)*input_weight(:,i);

end

net.IW1,1= modify_input_weight;   
y = net(X_test);
e = gsubtract(Y_test,y);
f = sum(e)^2;     

结束

----------------------------------- --- 主程序 --------------------------------------------- -------------

A  = ones(1,10);
b  = s;
lb = zeros(1,10); 
[c,fval] = fmincon(@Sum_Square_error,c0,A,b,[],[],lb,[]); 

但是在我尝试运行这个程序后,它显示了很多错误信息。有人可以帮我通过“c,input_weight,X_test,Y_test”来优化这个成本函数。

【问题讨论】:

【参考方案1】:

Sum_Square_error.m 你没有声明一个匿名函数,让它成为一个常规函数所以改变

f = @(c) Sum_Square_error(c,input_weight,X_test,Y_test);

function f = Sum_Square_error(c,input_weight,X_test,Y_test)

现在主要是,当你说@fun 时,你实际上需要明确地传递参数

fmincon(@Sum_Square_error(c,input_Weight,X_test,Y_test),c0,A,b,[],[],lb,[]); 

用实际数据替换c,input_Weight,X_test,Y_test

【讨论】:

以上是关于在 MATLAB 中对具有额外参数传递给它的成本函数进行约束优化的主要内容,如果未能解决你的问题,请参考以下文章

在具有 GPU 加速的 arrayfun 中使用匿名函数 (Matlab)

将额外参数传递给事件处理程序?

在reactjs中将额外的参数传递给onChange Listener

将额外的参数传递给回调函数

如何将额外的额外参数传递给批处理文件?

如何在 Javascript .filter() 方法中将额外参数传递给回调函数?