我有一個優化問題,用fmincon
解決。在這個問題上我有一個約束,說矢量L
的每個元素都必須小於或等於1,所以basicaly我可以添加這個約束這樣如何在MATLAB中不使用MAX函數來編寫Max(L)<1
C=max(L)-1 ; % C(X)<0
但現在我想寫上述約束使用Max
功能。
任何想法?
我有一個優化問題,用fmincon
解決。在這個問題上我有一個約束,說矢量L
的每個元素都必須小於或等於1,所以basicaly我可以添加這個約束這樣如何在MATLAB中不使用MAX函數來編寫Max(L)<1
C=max(L)-1 ; % C(X)<0
但現在我想寫上述約束使用Max
功能。
任何想法?
矢量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。第二個輸出是非線性等式約束,是一個空數組。
感謝您的回答。或者,我定義了新的優化變量並將其綁定到其最大值(VUB),然後將不等式約束定義爲等式約束。這使得優化過程更快。 @自產自銷的西紅柿 –
'all(L <1)'?但爲什麼不'max'? – user3528438
是的我想要所有(L <1)但不使用'max'功能。如果我使用'max' @ user3528438 –
,我認爲它會使我的NLP成爲DNLP:如果所有元素都小於或等於1,則sum(L(L> 1))== 0'返回1。如果至少有一個元素大於1,則爲'0'。我希望這是你想要的。 – eventHandler