为什么通过以两种类似的方式向fmincon提供约束来获得不同的解决方案?

时间:2015-04-09 12:40:48

标签: matlab optimization

我正在使用fmincon来解决问题。这个问题有一些线性不等式约束,用矩阵A和B写成。 我可以用2种方式编写这些约束,我应该得到类似的结果。但是,奇怪的是我得到了不同的解决方案。这是为什么?

1)在第一种方式中,我可以将约束提供给“fmincon”'功能如下:
[Xsqp, FUN ,FLAG ,Options] = fmincon(@(X)SQP(X,Dat),X,A,B,[],[],lb,ub,@(X)SQPnolcon(X,Dat,A,B),options);
% I comment the line 'C=A*X'-B;' in the function 'SQPnolcon' and put C=[] instead, because A and B are defined already in fmincon function

2)作为第二种方式我可以这样写:

[Xsqp, FUN ,FLAG ,Options] = fmincon(@(X)SQP(X,Dat),X,[],[],[],[],lb,ub,@(X)SQPnolcon(X,Dat,A,B),options);
以及约束函数如下:

function [C,Ceq] = SQPnolcon(X,Dat,A,B)
C=A*X'-B;
Ceq = [];
end

1 个答案:

答案 0 :(得分:2)

首先,您提供AB作为线性不等式约束和非线性不等式约束,但在第二种情况下,您只将它们作为非线性不等式提供约束

我明白为什么你可能会认为这是等价的,因为无论如何它们都是相同的约束。但线性等式约束应用于与非线性等式约束不同的上下文中,这导致优化算法找到不同的解决方案。

我担心我无法准确解释如何应用两种不同类型的约束,以及算法中的哪些点 - 无论如何,这会有所不同,具体取决于您要求fmincon使用哪种算法(活动集,信任区域等)。对于这种详细程度,您可能需要询问MathWorks。但基本的答案是,你会得到不同的结果,因为你要求算法做两件不同的事情。