在 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)