在MATLAB中使用“fmincon”时出错

时间:2014-08-19 15:07:38

标签: matlab optimization

我有一个具有线性约束和非线性目标函数的模型,我试图使用" fmincon" MATLAB的工具箱来解决它。实际上,Aineq是一个24 * 13矩阵,Aeq也是一个24 * 13矩阵。但是当我插入这个命令时:

 >> [x , lambda] = fmincon(@MP_ObjF,Aineq,bineq,Aeq,beq);

我遇到这个错误:

Warning: Trust-region-reflective method does not currently solve this type of
problem, using active-set (line search) instead. 
  

在fmincon at 439 ???使用==>时出错fmincon在692       Aeq必须有312列。

它可能有什么问题?为什么Aeq有312列?!?我将不胜感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

如果查看fmincon(doc fmincon)的文档,您将看到一个名为opt的输入。在此,您可以设置matlab使用的算法来解决最小化问题。如果你跑     选择= optimset(' fmincon&#39);

然后您可以使用修改算法选项     Opt.algorithm ="有效集&#34 ;;

只需发送选择fmincon然后matlab就不再有这个问题了。看一下Opt,你会发现很多选项可以改变以修改优化程序。

列数。如果您正在使用线性约束,则输入MPobjF的参数必须是具有n行和1列的列向量。然后A必须是m X n。其中M是约束的数量,n是变量的数量。这样就可以很好地定义矩阵乘法。

如果我的第一个回答含糊不清,我很抱歉。也许如果我做一个例子会有所帮助,因为我在你的评论中看到了几个可疑的东西。假设我们想要最小化x ^ 2 + y ^ 2 +(z-1)^ 2受x + y + z = 1,2x + 3y - 4z <= 5,x,y,z> = - 5 。解决方案显然是(0,0,1)...

我们首先必须制定目标函数,

fun = @(vec) vec[1]^2 + vec[2]^2 + (vec[3]-1)^2;

要使fmincon正常工作,该函数只能有一个输入,但该输入可以是一个向量。所以这里x = vec [1]等等...我认为你的评论表明你的目标函数有多个输入。如果您需要传递一些未经优化的参数,则可在Matlab网站上找到相关文档(http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html

然后我们可以设置优化设置

opt = optimset('fmincon');
opt.algorithm = 'active-set';

您可能还需要修改算法警告的大规模设置才能消失,我无法记住......

然后我们可以设置

Aeq = [1,1,1];    % equality constraint, if you had another eq constraint, it would be another row to Aeq
beq = 1;          % equality constraint
A = [2,3,-4];     % inequality
b = 5;            % inequality
lb = [-5;-5;-5];  % lower bound
x0 = [0.5;0.5;0]; % initial feasible guess, needs to be a column vector
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,[],[],opt);

然后希望找到x = [0; 0; 1]