非线性规划问题,可以根据是否有约束条件,可以分成无约束问题和约束优化问题;
比如前面给出的例子1就是无约束非线性规划问题,而例子2是一个约束非线性规划问题。
无约束优化问题标准形式 :
Min f(x)
① 首先建立一个函数M文件,如fun.m
②调用格式:
[x, fval] = fminunc(‘fun’, x0, options)
约束优化问题标准格式:
Min f(x)
s.t. G1(x) ≤0, G2(x)=0, (非线性约束)
Ax ≤b, Aeq.x=beq, (线性约束)
Lb ≤x ≤Ub
调用格式:
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,Lb,Ub,@con)
例题:电路板设计问题
就是将电路元件选择适当位置并通过导线进行连接。
确定三个模块的位置,满足下列要求的情况下使得总连线最短。
(1)满足如图的连接关系;
(2)所有元件完全位于电路板之内;
(3)三个元件为圆柱形,半径分别为0.2,0.1和0.1;
(4)元件1和元件3要求距离等于0.5。
决策变量:令(x i, yi)(i =1, 2,3)为三个元件的中心的横纵坐标。
目标函数:总距离(六条连线长度之和)最小
%目标函数M文件
function y=fcon(x)
y=((x(1)+1)^2+x(4)^2)^0.5+((x(1)-x(2))^2+(x(4)-x(5))^2)^0.5+((x(2)-0.5)^2+(x(5)-1)^2)^0.5+((x(1)-x(3))^2+(x(4)-x(6))^2)^0.5+(x(3)^2+(x(6)+1)^2)^0.5+((x(3)-1)^2+(x(6)-0.5)^2)^0.5;
%约束条件的函数M文件
function [c,ceq]=ccon(x)
c=[0.09-(x(1)-x(2))^2-(x(4)-x(5))^2;0.09-(x(1)-x(3))^2-(x(4)-x(6))^2;0.04-(x(2)-x(3))^2-(x(5)- x(6))^2];
ceq=[(x(1)-x(3))^2+(x(4)-x(6))^2-0.25];
x0=[0.5;0.2;0.1;-0.5;0.2;0.8];
Ub= [0.8;0.9;0.9;0.8;0.9;0.9];
Lb=-Ub;
options=optimset('display', 'iter') [x,fval]=fmincon(@fcon,x0,[],[],[],[],Lb, Ub,@ccon,options)