当前位置:
文档之家› Matlab与机械优化设计(5.优化工具箱)
Matlab与机械优化设计(5.优化工具箱)
MATLAB代码: %首先编写目标函数的.m文件:
function f = myfun (x) f = -x(1)*x(2)*x(3);
从而可将它们写成矩阵不等式的形式: A* x b
x0=[10; 10; 10] %起始点 [x, fval] = fmincon (@myfun, x0, A, b)
4. fmincon函数 [实例分析]
2 计算使函数f ( x) e x1 (4 x12 +2x2 +4x1 x2 +2 x2 +1)取最小值时的x值,
约束条件为x1 x2 x1 x2 -1.5, x1 x2 10 分析:将非线性约束条件化为标准的不等式形式: x1 x2 x1 x2 +1.5 0,
fminsearch与fminunc有相同的输入和输出参数,但是它使用 单纯形法来找到局部最优。 分别用fminsearch和fminunc函数求上述目标函数的极小值 点,可发现在利用了梯度信息的时候,迭代的次数大大减小。
约束优化问题
1。单变量(标量)、上下界约束优化问题。
[x,fval,exitflag,output] = fminbnd(fun,x1,x2,options) 目标函数必须是连续的,只能求出局部最优值,所 用算法:黄金分割和二次插值方法。 例子: 求函数 f(x)=x^(2/3)-(x^2+1x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options)
输入参数:
fun: 目标函数,以函数句柄的形式给出。函数句柄的构
造:
1. 函数首先用m文件定义好,然后采用下列方式构造函数句柄:
fhandle=@ function_name 如: f_h=@sin; f_h=@cos 2. 匿名函数的形式(Anonymous function),函数的表达式直接给出: fhandle=@ (var_list) expression(var_list),如: f_h=@(x) sin(x); f_h=@(x) cos(x);
约束优化问题
4。非线性约束优化问题 如果 options = optimset(‘GradConstr’,‘on’),也就 是优化过程需要用到非线性约束的梯度信息时, 非线性约束函数必须在第3和第4个返回值中返回 不等式非线性约束的梯度和等式非线性约束的梯 度信息。
function [c,ceq,GC,GCeq] = mycon(x) c = ... % Nonlinear inequalities at x ceq = ... % Nonlinear equalities at x if nargout > 2 % nonlcon called with 4 outputs GC = ... % Gradients of the inequalities GCeq = ... % Gradients of the equalities end
目标函数: min f(x)=0.1*x2+0.2*x3+0.3*x4+0.8*x5 约束条件: 总套数限制: x1+2*x2+x4=100 2* x3+2*x4+x5=100 3* x1+x2+2*x3+3*x5=100 0<=[x1,x2,x3,x4,x5]
约束优化问题
MATLAB代码: %首先编写目标函数的.m文件: function f = objfun(x) f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1); %编写非线性约束函数的.m文件: function [c, ceq] = confun(x) c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10]; ceq = [ ]; %求解优化问题: x0 = [-1,1]; options = optimset('LargeScale','off'); [x, fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options)
非线性 非线性 方程 ( 组 ) 最小二乘 fzero fsolve lsqnonlin lsqcurvefit
非线性规划 fmincon fseminf
约束线性 最小二乘 lsqnonneg lsqlin
暂缺
上下界约束 fminbnd fmincon lsqnonlin lsqcurvefit
无约束优化问题
3。二次规划问题
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) ;当问题不是严格凸规 划问题时,返回局部最小点。
[实例分析] x1 x2 2 x 2x 2 1 2 2 求使函数f ( x) x1 x2 x1 x2 2x1 6x2取最小值时的x值, 且满足约束条件 : 1 2 2x1 x2 3 x1 0, x2 0 分析 : 1 首先函数f ( x)可以写成f ( x) x T Hx f T x形式,其中 2 1/ 2 x 0 2 H , f ,x 1 1 1/ 2 6 x2
数学模型:
min f ( x )
x
Matlab函数:
对于连续(处处光滑)的函数,使用fminunc 对于不连续的函数,使用fminsearch
一般而言fminunc比fminsearch有更高的寻优效率, 因为它利用了梯度信息 两者都不是解决最小化平方和的问题首选方法, 对这类问题,推荐使用(lsqnonlin )。
无约束优化问题
[x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options) 输出参数:
算法终止时函数的最优解和最优值。 exitflag: 整数标志,算法终止的原因,返回值大于0表示找到局部最 优点,否则没有找到局部最优点。具体的返回请参照函数“fminunc” 的帮助。 Output:Structure containing information about the optimization. The
Matlab优化工具箱的 使用
MATLAB优化工具箱能求解的优化模型
优化工具箱 多目标优化
fgoalattain fminimax
连续优化
离散优化
0-1规划 bitprog 一般IP
无约束优化 非线性 极小 fminunc 非光滑(不可 微)优化 fminsearch 全局 优化
约束优化
线性规划 linprog 二次规划 quadprog
X, fval:
fields of the structure are:
iterations: Number of iterations taken; funcCount:Number of function evaluations; algorithm:Algorithm used; Cgiterations:Number of PCG iterations (large-scale algorithm only); stepsize:Final step size taken (medium-scale algorithm only);
采用函数句柄的方式调用函数:把函数的名称用函数句
柄直接替换。比如定义: f_h=@sin, 则使用sin函数的 时候有两种方式: sin(10), f_h(10),返回同样的结果。
无约束优化问题
[x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options)
约束优化问题
2。线性规划问题。
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 它的输出只是最终结果,没有迭代过程。 例:
约束优化问题
数学模型:
设计变量: 各个方案切割的套数:x=[x1,x2,x3,x4,x5];
10 x1 x2 0
4. fmincon函数
目标函数:
H
4. fmincon函数
Step1:建立数学模型 设计变量和目标函数:管直径D和支架高度H
约束条件:
4. fmincon函数
Step1:建立数学模型 约束条件:
4. fmincon函数
Step2:编制程序
x0=[1,1] lb=zeros(2,1); ub=Inf*ones(2,1); %ub=[] [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(@objfun1,x0,[],[],[],[],lb,ub,@confun1)
约束优化问题
4。非线性约束优化问题
其中 x, b, beq, lb, ub均是向量,A和Aeq是矩阵; c( x)和ceq ( x)是返回值为向量的函数; f ( x)是一个返回值为标量的和函数; 而且c( x),ceq( x)和f ( x)可以是非线性函数.
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) ; 函数fun以函数句柄的形式或匿名函数的形式给出; Nonlcon:返回等式和不等式约束向量c(x)和ceq(x)的一个函数。如: