logo资料库

matlab金融算法.pdf

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
附录 2 Matlab 优化工具箱 作者 郑志勇 ariszheng@gmail.com 附录 2 Matlab 优化工具箱 A2.1 优化基本概念与理论........................................................................................................................... 1 A2.1.1 基本概念.................................................................................................................................…2 A2.2.2 线性最优化:.............................................................................................................................2 A2.1.3 非线性最优化:.........................................................................................................................2 A2.2 线性规划 .............................................................................................................................................. 3 A2.2.1 线性规划的模型结构 .................................................................................................................3 A2.2.2 linprog 函数 ................................................................................................................................4 A2.3 无约束优化 .......................................................................................................................................... 6 A2.3.1 无约束优化模型结构 .................................................................................................................6 A2.3.2 fminsearch 函数 ..........................................................................................................................7 A2.3.3 fminunc 函数...............................................................................................................................8 A2.3.4 含参数优化问题.........................................................................................................................9 A2.4 约束优化算法9 A2.4.1 约束优化模型结构.....................................................................................................................9 A2.4.2 Fmincon 函数............................................................................................................................10 A2.4.3 含参数的优化问题...................................................................................................................11 A2.5 求解方程组 ........................................................................................................................................ 12 A2.5.1 方程组模型结构.......................................................................................................................12 A2.5.2 fsolve 函数 ...............................................................................................................................13 A2.6 优化工具箱参数设置......................................................................................................................... 14 A2.6.1 优化工具箱参数说明...............................................................................................................14 A2.6.2 优化工具箱参数设置方法 .......................................................................................................18 A2.6.3 参数设置实例演示...................................................................................................................19 A2.1 优化基本概念与理论 凸集合与凸规划是运筹学的支柱性理论,优化理论也主要建立在凸集合与凸规划的基本之上。进 而,根据优化问题的可行解集合、目标与约束函数是否为凸,将优化问题的解非为局部最优解与全局最 优解。现在,优化算法种类繁多,根据其优化理论,将现在有优化算法分为,经典优化算法与启发式优 化算法。运筹学与最优化的发展与其他科学理论的发展密切相关,如金融工程、数值计算等。 www.ariszheng.com
·2· 书名 A2.1.1 基本概念 在现实生活中许多重要的问题,都涉及到选取一个最好的目标,或者为达到这个目标而选择某些参数、 确定某些值,这些问题都可以归结为最优化问题.对于一个最小值问题,其形式的描述为数学规划模型的一般 形式为 ( fs ) f x min ( ) s t x S . . ∈ ⎧ ⎨ ⎩ n 其中, S R∈ 为约束集合或可行集; :f S )fs 的可行 解。显然,只要改变目标函数的符号,最大值问题就可以转变成最小值问题,因此,本文在说明都是以最小值 问题为标准.解决最优化问题的算法称为最优化算法,可以分为经典优化算法和启发式优化算法. R→ 为目标函数;若 x S∈ 则称 x 为问题 ( A2.2.2 线性最优化: 线性最优化, 又称线性规划, 是运筹学中应用最广泛的一个分支.这是因为自然科学和社会科学中许多 问题都可以近似转化成线性规划问题. 线形规划的一般形式: min ⎧ ⎪ ⎪⎪ ⎨ ⎪ ⎪ ⎪⎩ s t . z = a x 11 1 a x 21 1 a x m 1 1 x x , 1 2 c x 1 1 + + c x + 2 2 + + + + + a x 12 2 a x 22 2 a x + + m 2 2 x 0 , , ≥ n c x + n n a x b ≤ n n 1 1 a x b ≤ n n 2 2 + a x mn n ≤ b m 线性规划理论和算法的研究及发展共经历了三个发展阶段, 每个阶段都引起了社会的极大关注. 线性 规划研究的第一高潮是著名的单纯形法的研究. 这一方法是 Dantzig 在 1947 年提出的,它以成熟的算法理论 和完善的算法及软件统治线性规划达三十多年. 随着 60 年代发展起来的计算复杂性理论的研究, 单纯形法 在七十年代末受到了挑战. 1979 年前苏联数学家 Khachiyan 提出了第一个理论上优于单纯形法的所谓多项 式时间算法--椭球法, 曾成为轰动一时的新闻, 并掀起了研究线性规划的第二个高潮. 但遗憾的是广泛的数 值试验表明, 椭球算法的计算比单纯形方法差.1984 年 Karmarkar 提出了求解线性规划的另一个多项式时间 算法. 这个算法从理论和数值上都优于椭球法, 因而引起学术界的极大关注, 并由此掀起了研究线性规划的 第三个高潮. 从那以后, 许多学者致力于改进和完善这一算法,得到了许多改进算法.这些算法运用不同的思 想方法均获得通过可行区域内部的迭代点列, 因此统称为解线性规划问题的内点算法. 目前内点算法正以 不可抗拒的趋势将超越和替代单纯形法. A2.1.3 非线性最优化: 非线形规划的一般形式: 1,2, = 1,2, = m , l , i s t . i j → f x min ( ) g x ( ) 0 ≤ ⎧⎪ ⎨ h x ( ) 0 = ⎪⎩ j f g h R , , n i : 不等式约束条件 j : 等式约束条件 : i j 有一个为非线性函数
章名 ·3· 非线性规划的一个重要理论是 1951 年 Kuhn-Tucker 最优条件(简称 KT 条件)的建立.此后的 50 年代主 要是对梯度法和牛顿法的研究.以 Davidon(1959), Fletcher 和 Powell(1963)提出的 DFP 方法为起点, 60-80 年 代是研究拟牛顿方法活跃时期, 同时对共轭梯度法也有较好的研究. 在 1970 年由 Broyden、Fletcher、 Goldfarb 和 Shanno 从不同的角度共同提出的 BFGS 方法是目前为止最有效的拟牛顿方法. 由于 Broyden, Dennis 和 More 的工作使得拟牛顿方法的理论变得很完善. 70 年代是非线性规划飞速发展时期, 约束变尺度 (SQP)方法(Han 和 Powell 为代表)和 Lagrange 乘子法(代表人物是 Powell 和 Hestenes)是这一时期主要研究 成果.计算机的飞速发展使非线性规划的研究如虎添翼.80 年代开始研究信赖域法、稀疏 拟牛顿法、大规 模问题的方法和并行计算, 90 年代研究解非线性规划问题的内点法和有限储存法. 这半个世纪是最优化发 展的黄金时期. 与线性规划相比,非线性规划软件还不够完善. 但是已有大量求解非线性规划问题的软件, 其中有相当 一部分可从互联网上免费下载.LANCELOT 是由 Conn、Gould 和 Toint 研制的解大规模最优化问题的软件 包, 适合求解无约束最优化、非线性最小二乘、边界约束最优化和一般约束最优化问题.这个软件的基本思 想是利用增广 Lagrange 函数来处理约束条件, 在每步迭代中解一个边界约束优化子问题, 其所用的方法结 合信赖域和投影梯度等技术.MINPACK 是美国 Argonne 国家实验室研制的软件包,适合求解非线性方程组 和非线性最小二乘问题, 所用的基本方法是阻尼最小二乘法, 此软件可以从网上图书馆获得. PROCNLP 是 SAS 软件公司研制的 SAS 商业软件中 OR 模块的一个程序,这个程序适合求解无约束最优化、非线性最小 二乘、线性约束最优化、二次规划和一般约束最优化问题.TENMIN 是 Schnabel 等研制的解中小规模问题 的张量方法软件.现在有成熟的解非线性最优化问题的软件有:Lingo,CONOPT(非线性规划),DOT(优化 设计工具箱),Excel and Quattro Pro Solvers(线性,整数和非线性规划),FSQP(非线性规划和极小极大问 题),GRG2(非线性规划), LBFGS(有限储存法),LINDO(线性、二次和混合整数规划),LSSOL(最小 二乘和二次规划),MINOS(线性和非线性规划),NLPJOB(非线性多目标规划), OPTPACK(约束和无 约束最优化),PETS(解非线性方程组和无约束问题的并行算法),QPOPT(线性和二次规划),SQOPT (大规模线性和凸二次规划),SNOPT(大规模线性、二次和非线性规划),SPRNLP(稀疏最小二乘,稀疏 和稠密非线性规划),SYSFIT(非线性方程组的参数估计),TENSOLVE(非线性方程组和最小二乘), VE10(非线性最小二乘)等. A2.2 线性规划 线形规划是在运筹学中应用最广泛的模型之一。由于其理论与方法研究比较成熟,许多问题常借助 线形规划模型来求解,而且线形规划为某些非线性规划问题的解法起到间接作用。 A2.2.1 线性规划的模型结构 max(min) + + a x 11 1 a x 21 1 f = a x 12 2 a x 22 2 s t . a x m 1 1 + a x m 2 2 x x , , 1 2 c x c x + + 1 1 2 2 a x + + n n 1 a x + + n n 2 + + x , n a x mn n 0 ≥ c x + n n b ( , ) ≤ = ≥ 1 b ) ( , ≤ = ≥ 2 ( , ≤ = ≥ b ) m ⎫ ⎪ ⎪ ⎬ ⎪ ⎪ ⎭ ⎧ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪⎩ 标准形式的可行域是凸集合,凸集合的概念可以参考相关数学书籍。
·4· 书名 A2.2.2 linprog 函数 linprog 函数在 matlab 优化工具箱 Optimization-Toolbox 中, linprog 针对线性函数模型 min f x T s t Aeq x beq . i A x b ⎧ ⎪ = ⎨ ⎪ ≤ ≤ lb ⎩ ≤ i x up where f, x, b, beq, lb, and ub are vectors and A and Aeq are matrices. Linprog 函数计算算法: 1.约束优化问题的拉格朗日乘法(即:内点法) 该算法介绍本章不讲,可以参看 约束规划问题相关章节 2.单纯形法 Simplex Linprog 函数格式: [x,fval,exitflag,output,lambda]= linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 输入参数: f:目标函数系数向量 A:不等式约束系数矩阵 b:不等式约束常数向量 Aeq:等式约束系数矩阵 Beq:等式约束常熟向量 lb:x 的可行域下界 ub:x 的可行域上界 x0:初始迭代点.(这个与 linprog 使用的算法有关) options:优化参数设置 输出参数: X: 线性优化问题最优解 fval:最优目标函数值 lambda,exitflag:算法停止原因 output:优化结果的约束信息 lambda:结果 x 对应的拉格朗日乘子 输出参数说明: Exitflag: 返回算法迭代停止原因 1 算法收敛于解 x,即 x 是线性规划的最解 0 算法达到最大迭代次数停止迭代,即 x 不定是线性规划的最解 -2 算法没有找到可行解,即算法求解失败,问题的可行解集合为空 -3 原问题无界,即最有解可能为正(负)无穷大 -4 在算法中出现除零问题或其他问题导致变量种出现非数值情况 -5 线性规划的原问题与对偶问题都不可解. -7 可行搜索方向向量过小,无法再提高最有解质量
章名 ·5· f x min 1 x x 3 7 ⎧ 1 2 ⎪ x x 5 8 ⎪ 2 1 ⎨ x x 6 9 ⎪ 1 2 ⎪ x x x , , ⎩ 1 3 x = − − 2 9 + + 4 + + 5 + + 0 ≥ s t . − x 3 x 3 x 3 x 3 ≤ ≤ ≤ 1 1 1 Lambda: 返回解的拉格朗日乘子与约束符合情况 Lower: 求得解越下届 Upper: 求得解越上界 Neqlin: 求得解不满足不等式约束 Eqlin: 求得解不满足等式约束 Output: 返回算法信息 Algorithm:计算时使用的优化算法 Cgiterations:共轭梯度迭代次数(只有大规模算法时有) iterations :算法迭代次数 Exit message: 返回结束信息 实例演示,例 A2.1 对应程序 Atest1.m 线性优化问题: 使用[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub) 2 f = [-1,-1,-1] %目标函数系数 A= [7, 3, 9; 8, 5, 4; 6, 9, 5]; %不等式约束的系数矩阵 b= [1, 1, 1] %不等式约束的 b Aeq=[] %等式约束的系数矩阵(该问题无等式约束 Aeq 为空) beq=[] %等式约束的 beq(该问题无等式约束 beq 为空) lb=[0, 0, 0] %变量的下届 ub=[] %变量得上界(无上界约束,ub 为空) [x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub) 计算结果输出: Optimization terminated. (优化算法计算结束) x= [0.0870, 0.0356, 0.0316] (最优解) fval = -0.1542 (最优解对应的函数值) exitflag =1 (算法收敛于解 x,即 x 是线性规划的最解) output = iterations: 7 (算法迭代 7 次) algorithm: 'large-scale: interior point' (使用的算法是 内点法) cgiterations: 0 (共轭梯度迭代 0 次,没有使用共轭梯度迭代) message: 'Optimization terminated.' (算法正常停止) lambda = ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] lambda.ineqlin=[0.0593,0.0079,0.087] (符合约束条件)
·6· 书名 A2.3 无约束优化 A2.3.1 无约束优化模型结构 f f x ) min ( ) ( f R R→ : n 无约束最优化问题,是指优化问题的可行解集为 nR ,无约束的标准形式为: 本节主要介绍无约束问题的基本思想和 matlab 相关函数的调用。对无约束问题的基本结构理论的了 解,有利于更有效的使用 matlab 相关无约束优化函数。无约束算法的种类繁多,本章重点介绍最速下降 法,牛顿法与拟牛顿法(变尺度法)。拟牛顿法(变尺度法)是现在公认求解无约束优化问题的最有效 的方法。 本章所用 BenchMark 函数为 Banana function: x f x ( ) 100 [ (2) = × − x (1) ] 2 2 [1 − − x (1)] 2 Banana function 的最优点为[1,1],函数对应的最小值为 0. 函数的 matlab 表达式为 function f=BanaFun(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; 函数图像在[-2,2]×[-1,-3]上的三维图为: 3000 2500 2000 1500 1000 500 0 3 2.5 2 1.5 1 0.5 2 1.5 1 0.5 0 -0.5 0 -0.5 -1 -1.5 -1 -2 图 A2.1 图像对用的 Matlab 程序 axis off; x=-2:.2:2; y=-1:.2:3; [xx,yy]=meshgrid(x,y); zz=100*(yy-xx.^2).^2+(1-xx).^2; surfc(xx,yy,zz);(三维图)
或者 章名 ·7· surface(x,y,zz,'EdgeColor',[.8 .8 .8]);(俯视图) A2.3.2 fminsearch 函数 Fminsearch 是 matlab 中求解无约束的函数之一,其使用的算法为可变多面体算法(Nelder-Mead Simplex)。 [x,fval,exitflag,output]函数语法: [x,fval,exitflag,output] =fminsearch(fun,x0,options) 输入参数: Fun:目标函数 X0: 迭代初始点 Options:函数参数设置 输出参数: x: 最优点(算法停止点) Fval: 最优点对应的函数值 Exitflag: 函数停止信息 1: 函数收敛正常停止 0: 迭代次数,目标函数计算次数达到最大数 -1:算法被输出函数停止(output) Output:函数运算信息 实例演示,例 A2.2 1.目标函数程序 BanaFun.m function f=BanaFun(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; (Nelder-Mead Simplex)函数不需要导数信息 2.函数条应运算:Atest2.m OPTIONS = optimset('LargeScale','off','MaxFunEvals',250,'display','iter'); x=[-1.9,2]; [x,fval,exitflag,output] = fminsearch(@BanaFun,x,OPTIONS) 注释:关于 OPTIONS = optimset('LargeScale','off','MaxFunEvals',250,'display','iter'),请参考“优化算法 参数设置”。 计算结果: Iteration Func-count min f(x) Procedure 0 1 267.62 1 3 236.42 initial simplex 2 5 67.2672 expand 3 7 12.2776 expand …… 103 189 3.74217e-007 contract inside 104 191 3.26526e-007 contract inside 105 193 8.07652e-008 contract inside 106 195 1.66554e-008 contract inside 107 197 1.66554e-008 contract inside 108 199 1.66554e-008 contract inside 109 201 5.57089e-009 contract outside 110 203 1.86825e-009 contract inside 111 205 1.86825e-009 contract outside 112 207 5.53435e-010 contract inside 113 208 5.53435e-010 reflect
·8· 书名 114 210 4.06855e-010 contract inside Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-004 x = 1.0000 1.0000 fval = 4.0686e-010 exitflag = 1 output = iterations: 114 funcCount: 210 algorithm: 'Nelder-Mead simplex direct search' message: [1x196 char] A2.3.3 fminunc 函数 fminunc 函数是 matlab 求解无约束优化问题的主要函数 [x,fval,exitflag,output,grad,hessian] = fminunc(fun,x0,options)) 输入参数: Fun: 目标函数 一般用 M-文件形式给出 X0: 优化算法初始迭代点 Options: 参数设置 函数输出: X: 最优点输出(或最后迭代点) Fval: 最优点(或最后迭代点)对应的函数值 Exitflag: 函数结束信息 (具体参见 matlab help ) Output: 函数基本信息 包括迭代次数,目标函数最大计算次数,使用的算法名称,计算规模 Grad: 最优点(或最后迭代点)的导数 Hessian:最优点(或最后迭代点)的二阶导数 实例演示,例 A2.3 1.目标函数程序 BanaFun.m function f=BanaFun(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; 2.函数条应运算:Atest3.m OPTIONS = optimset('LargeScale','off','MaxFunEvals',250,'display','iter'); x=[-1.9,2]; [x,fval,exitflag,output] = fminunc (@BanaFun,x,OPTIONS) 计算结果: First-order Iteration Func-count f(x) Step-size optimality 0 3 267.62 1.23e+003 1 6 214.416 0.000813405 519 …… 33 147 6.24031e-006 1 0.0863 34 150 4.70753e-008 1 0.000385 Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x =
分享到:
收藏