我有一个使用fmincon
解决的优化问题。在这个问题中,我有一个约束,说向量L
的每个元素必须小于或等于1.所以基本上我可以像这样添加这个约束
C=max(L)-1 ; % C(X)<0
但是现在我想用Max
函数编写上面的约束
有什么想法吗?
答案 0 :(得分:1)
向量L的每个元素必须小于或等于1.
这应该写为约束的 set ,而不是单个约束。将约束L(1)&lt; = 1,L(2)&lt; = 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&lt; = 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。第二个输出,非线性等式约束,是一个空数组。