如何使用所有类型的约束
这个例子是一个非线性最小化问题,包含所有可能的约束类型。该示例没有使用渐变。
这个问题有五个变量,x (1)
通过x (5)
.目标函数是变量的多项式。
.
目标函数在局部函数中myobj (x)
,它嵌套在函数内部fullexample
.的代码fullexample
出现在此示例结束.
非线性约束同样是多项式表达式。
.
非线性约束在局部函数中myconstr (x)
,它嵌套在函数内部fullexample
.
这个问题有界限 而且 .
, .
这个问题有一个线性等式约束 ,你可以写成 .
这个问题还有三个线性不等式约束:
用矩阵和向量表示边界和线性约束。创建这些数组的代码位于fullexample
函数。正如在fmincon
输入参数节,磅
而且乌兰巴托
向量表示约束条件
磅
乌兰巴托
.
矩阵一个
和向量b
表示线性不等式约束
* x
b
,
这个矩阵Aeq
和向量说真的
表示线性等式约束
Aeq*x = b
.
调用fullexample
解决各种约束条件下的最小化问题。
[x,fval,exitflag] = fullexample .
找到了满足约束条件的局部极小值。由于目标函数在可行方向上不减少,优化完成,在最优性公差的值内,约束满足在约束公差的值内。
x =5×10.6114 2.0380 1.3948 0.1572 1.5498
Fval = 37.3806
Exitflag = 1
的退出标志值1
表明fmincon
收敛到满足所有约束条件的局部最小值。
此代码创建fullexample
函数,其中包含嵌套函数myobj
而且myconstr
.
函数[x,fval,exitflag] = fullexample x0 = [1;]4;5;2;5);lb = [-Inf;负无穷;0;负无穷;1); ub = [ Inf; Inf; 20; Inf; Inf]; Aeq = [1 -0.3 0 0 0]; beq = 0; A = [0 0 0 -1 0.1 0 0 0 1 -0.5 0 0 -1 0 0.9]; b = [0; 0; 0]; opts = optimoptions(@fmincon,“算法”,“sqp”);[x,fval,exitflag] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,...@myconstr、选择);%---------------------------------------------------------函数f = myobj f (x) = 6 * x (2) * (5) + 7 * x (1) * (3) + 3 * x (2) ^ 2;结束%---------------------------------------------------------函数测查[c] = myconstr c (x) = [x (1) - 0.2 * x (2) * (5) - 71 0.9 * x (3) - (4) ^ 2 - 67);Ceq = 3*x(2)²*x(5) + 3*x(1)²*x(3) - 20.875;结束结束