主要内容

如何使用所有类型的约束

这个例子是一个非线性最小化问题,包含所有可能的约束类型。该示例没有使用渐变。

这个问题有五个变量,x (1)通过x (5).目标函数是变量的多项式。

f x 6 x 2 x 5 + 7 x 1 x 3. + 3. x 2 2

目标函数在局部函数中myobj (x),它嵌套在函数内部fullexample.的代码fullexample出现在此示例结束

非线性约束同样是多项式表达式。

x 1 - 0 2 x 2 x 5 7 1

0 9 x 3. - x 4 2 6 7

3. x 2 2 x 5 + 3. x 1 2 x 3. 2 0 8 7 5

非线性约束在局部函数中myconstr (x),它嵌套在函数内部fullexample

这个问题有界限 x 3. 而且 x 5

0 x 3. 2 0 x 5 1

这个问题有一个线性等式约束 x 1 0 3. x 2 ,你可以写成 x 1 - 0 3. x 2 0

这个问题还有三个线性不等式约束:

0 1 x 5 x 4 x 4 0 5 x 5 0 9 x 5 x 3.

用矩阵和向量表示边界和线性约束。创建这些数组的代码位于fullexample函数。正如在fmincon输入参数节,而且乌兰巴托向量表示约束条件

x 乌兰巴托

矩阵一个和向量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;结束结束

相关的话题

Baidu
map