1、2。二阶梯度方法,这类方法很多,最简单的称为Newton-Raphson方法, 而最常用的是Quasi-Newton方法。,Quasi-Newton方法: use an approximation of the inverse Hessian. Form of approximation differs among methods,牛顿-拉夫逊法,BFGS method,Broyden-Fletcher-Golfarb-Shanno,DFP method,Davidon-Fletcher-Powell,优化问题及matlab实现 入门视频教程一, By考拉 2008.11,1、各种优化模型介
2、绍 2、典型优化函数的使用方法 (线性、非线性、有约束、无约束、多目标规划,以及一般性非线性整型优化函数的使用和实例讲解) 3、优化中参数设置 4、matlab帮组系统的使用 5、工具箱的安装方法,非约束型规划问题,x,fval,exitflag,output= fminsearch(fun,x0),实例:求函数 f=8x-4y+x2+3y2的最小值,f=8*x(1)-4*x(2) +x(1)2+3*x(2)2; 确定一个初始点的方法:x,y=meshgrid(-10:.5:10); f= 8*x-4*y +x.2+3*y.2; surf(x,y,f) 选初始点:x0=(0,0) x0=0,0
3、; x,fval,exitflag=fminunc(f,x0)本例matlab代码example_1可以从获得。,fminsearch和fminunc是matlab中关于无约束非线性 优化问题的两个函数,用来求解函数的极小值。 fminsearch()和fminunc(),前者适合处理阶次低但是间断点多的函数,后者则对于高阶连续的函数比较有效。 根据它们各自的实现原理来看(其中,前者是利用了单纯形法的原理,后者是利用了拟牛顿法的原理),这两个函数 都容易陷入局部优化,并且结果的正确与否还要取决于初值点x0的选取。,有约束线性优化,x,fval,exitflag,output,lambda,=l
4、inprog(f,A,b,Aeq,beq,lb,ub,x0,options),当我们用MATLAB软件作优化问题时, 所有求maxf 的问题化为求min(-f )来作。 约束g (x)0,化为 g (x)0来作。,实例:生产计划问题 假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。甲单位产品的利润70元,乙单位产品的利润120元。问如何安排生产,才能使该厂所获的利润最大。,建立数学模型:设x1、x2分别为生产甲、乙 产品的件数。f
5、为该厂所获总润。 max f=70*x(1)+120*x(2)s.t 9*x(1)+4*x(2)36004*x(1)+5*x(2)20003*x(1)+10*x(2)3000x(1),x(2)0,Matlab求解模型:min f=-(70*x(1)+120*x(2)s.t 9*x(1)+4*x(2)36004*x(1)+5*x(2)20003*x(1)+10*x(2)3000-x(1),-x(2) 0,linprog模型:f=-70 -120s.t A=9 4;4 5;3 10B=3600;2000;3000Aeq=; Beq=lb=0 0;ub=inf infx0=1 1 Code:exam
6、ple_2 可以从 下载,linprog(f,A,b,Aeq,beq,lb,ub,x0,options),options的参数描述: Display 显示水平。 选择off 不显示输出;选择iter显示每一 步迭代过程的输出;选择final 显示最终结果。 MaxFunEvals 函数评价的最大允许次数 Maxiter 最大允许迭代次数 TolX x处的终止容限 x,fval=linprog() 左端 fval 返回解x处的目标函数值。 x,fval,exitflag,output,lambda=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分: exitflag
7、描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。 output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。 lambda 返回x处的拉格朗日乘子。它有以下属性:lambda.lower-lambda的下界;lambda.upper-lambda的上界;lambda.ineqlin-lambda的线性不等式;lambda.eqlin-lambda的线性等式。Options=optimset
8、(display,iter,Tolx,1e-8);,有约束的非线性规划,=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options),x,fval,exitflag,output,lambda,grad,hessian,例子: Min f=ex1*(6x12+3x22+2x1*x2+4x2+1)s.t x1x2-x1-x2+10-2x1*x2-50x(1)+2*x(1)=0,Matlab实现:function f=objfun(x)f=exp(x(1)*(6*x(1)2+3*x(2)2+2*x(1)*x(2)+4*x(2)+1);function c,g
9、=confun(x)c(1)=x(1)*x(2)-x(1)-x(2)+1;c(2)=-2*x(1)*x(2)-5;g=; 然后可在工作空间键入程序:AE=1 2;BE=0;x0=1,1;nonlcon=confun x, fval =fmincon(objfun,x0, nonlcon) 本例代码example_3.m,可以从获得。,多目标规划,多目标规划定义为在一组约束下,多个不同的目标函数进行优化设计。 主要目标法其基本思想是:在多目标问题中,根据问题的实际情况,确定一个目标为主要目标,而把其余目标作为次要目标,并且根据经验,选取一定的界限值。这样就可以把次要目标作为约束来处理,于是就将原
10、来的多目标问题转化为一个在新的约束下的单目标最优化问题。 线性加权和法其基本思想是:按照多目标fi(x) (i=1, 2, ,m)的重要程度,分别乘以一组权系数j(j=1, 2, ,m)然后相加作为目标函数而构成单目标规划问题。,实例:某钢铁厂准备用5000万用于A、B两个项目的技术改造投资。设x1、x2分别表示分配给项目A、B的投资。据专家预估计,投资项目A、B的年收益分别为70%和66%。同时,投资后总的风险损失将随着总投资和单项投资的增加而增加,已知总的风险损失为0.02x12+0.01x22+0.04(x1+x2)2,问应如何分配资金才能使期望的收益最大,同时使风险损失为最小。,数学模
11、型:max f1(x)=70x1+66x2min f2(x)= 0.02x12+0.01x22+0.04(x1+x2)2 s.t x1+x250000x1, 0x2 线性加权构造目标函数: max f=0.5f1(x) 0.5f2(x) 化最小值问题: min (f)=- 0.5f1(x) +0.5f2(x),Matlab实现 f=-0.5*(70*x(1)+66*x(2)+0.5*(0.02*x(1)2+0.01*x(2)2+0.04*(x(1)+x(2)2); x0=1000,1000 A=1 1; b=5000; lb=zeros(2,1); x,fval, exitflag=fminc
12、on(f,x0, A,b,lb,) 代码example_4,可从下载,(3) 极大极小法其基本思想是:对于极小化的多目标规划,让其中最大的目标函数值尽可能地小于此,对每个 xR,我们先求诸目标函数值fi(x)的最大值,然后再求这些最大值中的最小值。 x,fval,maxfval,exitflag,output,lambda=fminmax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,p1,p2,.),(4) 目标达到法,fgoalattain函数用于解决此类问题。 其数学模型形式为:min F(x)-weight goalc(x) 0ceq(x)=0A x
13、bAeq x=beqlbxub其中,x,weight,goal,b,beq,lb和ub为向量,A和Aeq为矩阵,c(x),ceq(x)和F(x)为函数,,例:某 化工厂拟生产两种新产品A和B,其生产设备费用分别为2万元/吨和5万元/吨。这两种产品均将造成环境污染,设由公害所造成的损失可折算为A为4万元 /吨,B为1万元/吨。由于条件限制,工厂生产产品A和B的最大生产能力各为每月5吨和6吨,而市场需要这两种产品的总量每月不少于7吨。试问工厂如何安 排生产计划,在满足市场需要的前提下,使设备投资和公害损失均达最小。该工厂决策认为,这两个目标中环境污染应优先考虑,设备投资的目标值为20万元,公 害损
14、失的目标为12万元。,建立数学模型: 设工厂每月生产产品A为x1吨,B为x2吨,设备投资费为f(x1),公害损失费为f(x2),则问题表达为多目标优化问题:min f1(x)=2x1+5x2 min f2(x)=4x1+x2s.t x15; x26; x1+x27;x1 ,x20,Matlab实现:function f=ff12(x) f(1)=2*x(1)+5*x(2);f(2)= 4*x(1) +x(2);按给定目标取:goal=20,12;weight=20,12;x0=2,2A=1 0; 0 1;-1 -1;b=5 6 -7;lb=zeros(2,1); x,fval,attainfa
15、ctor,exitflag=fgoalattain(ff12,x0,goal,weight,A,b,lb,)example_5可以从获得,一般的非线性整数规划,errmsg,Z,X,t,c,fail = BNB20(fun,x0,xstat,xl,xu,a,b,aeq,beq,nonlc,setts,opts,varargin),本例中使用的bnb20工具箱, 在的工具箱下载版块可以下载,但在matlab7中使用,存在bug,修改后的bnb20将分为matlab6,6.5和7.0版本,随本例代码bnbexample.m,一起发布在网站视频教学版块,提供下载。,单纯形解法 线性规划,单纯形方法的
16、基本思路是,首先从可行域中找一个基可行解,然后判别它是否为最优解,如果是,则停止计算;否则,就找一个更好的基可行解,再进行检验,如此反复迭代,直至找到最优解,或者判定它无界(即无有限最优解)为止。,几种常见的优化方法,Taylor 展开: V(x) = V(xk) + (x-xk)V(xk) +1/2 (x-xk)2 V(xk)+,当x是3N个变量的时候, V(xk)成为3Nx1的向量,而V(xk)成为3Nx3N的矩阵,矩阵元如:,Hessian,解非线性方程f(x)=0的牛顿(Newton) 法,就是将非线性方程线性化的一种方法。它是解代数方程和超越方程的有效方法之 一。,一阶梯度法a. S
17、teepest descendent,Sk = -gk/|gk|,direction,gradient,知道了方向,如何确定步长呢? 最常用的是先选择任意步长l,然后在计算中调节,用体系的能量作为外界衡量标准,能量升高了则逐步减小步长。,robust, but slow,最速下降法,最陡下降法(SD),这是工程上一种数值求极值的方法:它总是只在最近的邻域里找 极值,一步一步地迭代,直到收敛。它的缺点是:有可能最终找不到全局的最优, 只是一个局部的最优罢了;而且它的收敛速度很慢;它的优点是:非常简单。,b. Conjugate Gradient (CG) 共轭梯度,第k步的方向,标量,Usual
18、ly more efficient than SD, also robust,不需要外界能量等作为衡量量,利用了上一步的信息,只要线性方程组的系数矩阵是十分良态的则共轭梯度法就会收敛的很快。,其基本步骤是在点x(k) 处选取搜索方向v(k) , 使其与前一次的搜索方向v(k-1) 关于 ramda共轭然后从点x(k) 出发,沿方向v(k) 求得(x)的极小值点x(k+1),打造最优秀、专业和权威的Matlab中文交流平台!站长:dynamic QQ:455681698 网址: 邮箱:论坛现在拥有40多个专业版块,几乎涵盖了matlab的各个应用阶层和方面!请相信我们:1.拥有绝对优秀的技术人员,热情的版主,严谨负责的管理团队 2.为大家提供全面免费的在线解答服务和技术交流平台,