主要内容

如何使用所有类型的约束

该示例是所有可能类型的约束的非线性最小化问题。该示例不使用渐变。

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

F X = 6. X 2 X 5. + 7. X 1 X 3. + 3. X 2 2

目标函数处于本地功能myobj(x),它嵌套在功能内撞击。代码撞击出现在临时此示例的结尾

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

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),它嵌套在功能内撞击

问题有界限 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.

将界限和线性约束表示为矩阵和向量。创建这些数组的代码是在撞击功能。如上所述粉刺输入参数部分,章节UB.矢量代表约束

≤. X ≤. UB.

矩阵一种和向量B.代表线性不等式约束

斧头 ≤. B.

和矩阵AEQ.和向量贝卡表示线性平等约束

AEQ * X = B.

称呼撞击解决所有类型约束的最小化问题。

[x,fval,exitflag] =撞弹
发现满足约束的本地最小值。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。
X =5×10.6114 2.0380 1.3948 0.1572 1.5498
fval = 37.3806.
EXITFLAG = 1

退出标志值1表示粉刺收敛到满足所有约束的本地最小值。

此代码创建撞击函数,包含嵌套函数myobj.myconstr.

功能[x,fval,extflag] =撞弹x0 = [1;4;5;2;5];lb = [-inf;-inf;0;-inf;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(x)f = 6 * x(2)* x(5)+ 7 * x(1)* x(3)+ 3 * x(2)^ 2;结尾%-----------------------------------------------------功能[c,ceq] = myconstr(x)c = [x(1) -  0.2 * x(2)* x(5) -  71 0.9 * x(3) -  x(4)^ 2  -  67];CEQ = 3 * x(2)^ 2 * x(5)+ 3 * x(1)^ 2 * x(3) -  20.875;结尾结尾

相关话题