2015-05-29 32 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),然後將不等式約束定義爲等式約束。這使得優化過程更快。 @自產自銷的西紅柿 –