2015-05-29 80 views
0

我有一个优化问题,用fmincon解决。在这个问题上我有一个约束,说矢量L的每个元素都必须小于或等于1,所以basicaly我可以添加这个约束这样如何在MATLAB中不使用MAX函数来编写Max(L)<1

C=max(L)-1 ; % C(X)<0 

但现在我想写上述约束使用Max功能。
任何想法?

+3

'all(L <1)'?但为什么不'max'? – user3528438

+1

是的我想要所有(L <1)但不使用'max'功能。如果我使用'max' @ user3528438 –

+0

,我认为它会使我的NLP成为DNLP:如果所有元素都小于或等于1,则sum(L(L> 1))== 0'返回1。如果至少有一个元素大于1,则为'0'。我希望这是你想要的。 – eventHandler

回答

1

矢量L的每个元素必须小于或等于1。

这应被写为一个约束集,不是一个单一的约束。将约束L(1)< = 1,L(2)< = 1,...的约束人为地捆绑成一个约束会给解算器带来更多的痛苦。

线性约束示例:最小化-x(1)* X(2)除X(1)= < 1和x(2)< = 1

fmincon(@(x) -x(1)*x(2), [0.5; 0.5], [1 0; 0 1], [1; 1]) 

(此处的简单形式fmincon(fun,x0,A,b)使用)

实施例与非线性约束:最小化-x(1)* X(2)除X(1)^ 2 + X(2)^ 2 = < 1和x(1 )+ x(2)^ 2 < = 1

fmincon(@(x) -x(1)*x(2), [0.1; 0.1], [],[],[],[],[],[], @(x) deal([x(1)^2+x(2)^2-1; x(1)+x(2)^2-1],[])) 

此处使用表格fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon),其中nonlcon返回多个不等式约束和等式约束。具体来说,非线性约束函数的第一个输出是[x(1)^2+x(2)^2-1; x(1)+x(2)^2-1];这两个都必须是< = 0。第二个输出是非线性等式约束,是一个空数组。

+0

感谢您的回答。或者,我定义了新的优化变量并将其绑定到其最大值(VUB),然后将不等式约束定义为等式约束。这使得优化过程更快。 @自产自销的西红柿 –