最优化方法及其Matlab程序设计1.最优化方法概述在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证,从中提取最佳方案。
最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。
最优化是每个人,每个单位所希望实现的事情。
对于产品设计者来说,是考虑如何用最少的材料,最大的性能价格比,设计出满足市场需要的产品。
对于企业的管理者来说,则是如何合理、充分使用现有的设备,减少库存,降低能耗,降低成本,以实现企业的最大利润。
由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型。
即用数学语言来描述最优化问题。
模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。
2)数学求解。
数学模型建好以后,选择合理的最优化算法进行求解。
最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。
2.最优化方法(算法)浅析最优化方法求解很大程度上依赖于最优化算法的选择。
这里,对最优化算法做一个简单的分类,并对一些比较常用的典型算法进行解析,旨在加深对一些最优化算法的理解。
最优化算法的分类方法很多,根据不同的分类依据可以得到不同的结果,这里根据优化算法对计算机技术的依赖程度,可以将最优化算法进行一个系统分类:线性规划与整数规划;非线性规划;智能优化方法;变分法与动态规划。
2.1 线性规划与整数规划线性规划在工业、农业、商业、交通运输、军事和科研的各个研究领域有广泛应用。
例如,在资源有限的情况下,如何合理使用人力、物力和资金等资源,以获取最大效益;如何组织生产、合理安排工艺流程或调制产品成分等,使所消耗的资源(人力、设备台时、资金、原始材料等)为最少等。
线性规划方法有单纯形方法、大M法、两阶段法等。
整数规划有割平面法、分枝定界法等。
2.2 非线性规划20世纪中期,随着计算机技术的发展,出现了许多有效的算法——如一些非线性规划算法。
非线性规划广泛用于机械设计、工程管理、经济生产、科学研究和军事等方面。
非线性规划问题包括:(1)一维最优化方法,如黄金分割法、二次插值法、切线法以及格点法等。
(2)无约束多维非线性规划方法,如坐标轮换法、最速下降法、牛顿法、变尺度法、共轭方向法、单纯形法、最小二乘法等。
(3)约束问题的非线性规划方法,包括间接法和直接法。
(4)其他方法,包括多目标优化、数学模型的尺度变换、灵敏度分析及可变容差法。
2.3 智能优化方法智能化优化算法有别于一般的按照图灵机进行精确计算的程序,是对计算机模型的一种新的诠释,它模拟自然过程、生物或人类思维等来求解最优化问题。
常用的智能优化方法包括启发式搜索算法、Hopfield 神经网络优化算法、模拟退火法与均场退火法、遗传算法等。
2.4 变分法与动态规划除了上述提及的2.1-2.3中所述的最优化算法,最优化方法还包括变分法和动态规划方法,他们广泛用于控制系统、燃料控制系统、耗能控制系统、线性调节器等最优综合和设计场合。
这类算法涉及变分法、最大(小)值原理、动态规划。
3.最优化问题的Matlab 程序实现当使用MatLab 进行最优化时,可以通过两种方式来实现最优化,一是可以利用相应的算法编写Matlab 程序,进行最优化求解;二是借助于MatLab 的工具箱中的最优化函数进行最优化求解。
MatLab 工具箱中的最优化函数包括:这里,以黄金分割法为例,采用两种方式进行Matlab 设计。
3.1利用黄金分割法进行最优化求解用黄金分割法(0.618法)程序求函数())sin(x 2x x -=φ在[0,1]上的极小点,取容许误差5410,10--==εδ。
求解步骤如下:(1)用0.618法求单变量函数φ在单峰区间[a,b]上的近似极小点; M 文件代码如下:function[s,phis,k,G ,.E] = golds(phi,a,b,delta,epsilon)%输入:phi 是目标函数,a ,b 是搜索区间的两个端点% delta,epsilon 分别是自变量和函数值的容许误差%输出:s,phis分别是近似极小点和极小值,G是nx4矩阵;% 其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk]% E=[ds,dphi],分别是s和phis的误差限.t=(sqrt(5)-1)/2; h =b-a;phia=feval(phi,a);phib=feval(phi,b);p=a+(1-t)*h;q=a+t*h;phip=feval(phi,p);phiq=feval(phi,q) ;k=1 ; G(k, :)=[a,p,q,b] ;while(abs(phib-phia)>epsilon)|(h>delta)if(phib<phiq)b = q; phib=phiq;q=p;phiq=phip;h=b-a ;p=a+(1-t)*h ;phip=feval(phi,p);elsea = p; phia=phip;p=q;phip=phiq;h=b-a ;p=a+t*h ;phiq=feval(phi,q);endk=k+1;G(k,:)=[a,p,q,b];endds=abs(b-a);dphi=abs(phib-phia);if(phip<=phiq)s=p;phis=phip;elses=q;phis=phiq;endE=[ds,dphi];(2)调用命令;[s,phis,k,G,E]=golds(inline(‘s^2-sin(s)’),0,1,1e-4,1e-5)求得近似极小点:0.4501833.2利用fminbnd函数进行最优化求解(fminbnd是一个M文件,其算法基于黄金分割法和二次插值法)这里,用humps函数来说明(humps(x)=1/((x-0.3)^2+0.01)+1/((x-0.9)^2+0.04)-6),对humps 函数求解其在x=0.6附近的极小值。
其求解过程为,在Matlab的命令行中输入命令:(1)作出[0,2]区间上的humps函数曲线,图形如下:(2)对(1)所得曲线进行分析,可以看出,曲线在x=0.3附近出现了一个最大值,在x=0.6附近出现了一个最小值.我们可以利用下面下面的命令代码估计x=0.6附近的极小值:H_humps=@humps;[xmin,value]=fminbnd(H_humps,0.5,0.8)其结果截图为:即humps函数在x=0.6(0.6370)附近存在一个极小值:11.2528。
4.Matlab中几个最优化函数的上机实验4.1 线性规划问题求解—linprog函数(1)f, x, b, beq, lb和ub为向量,A和Aeq为矩阵。
(2)语法:·x = linprog(f,A,b,Aeq,beq)·x = linprog(f,A,b,Aeq,beq,lb,ub)·x = linprog(f,A,b,Aeq,beq,lb,ub,x0)·x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)·[x,fval] = linprog(...)·[x,fval,exitflag] = linprog(...)·[x,fval,exitflag,output] = linprog(...)·[x,fval,exitflag,output,lambda] = linprog(...)(3)描述:·x = linprog(f,A,b)求解问题min f'*x,约束条件为A*x <= b。
·x = linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x = beq。
若没有不等式存在,则令A=[]、b=[]。
·x = linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。
若没有等式约束,令Aeq=[]、beq=[]。
·x = linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。
该选项只适用于中型问题,缺省时大型算法将忽略初值。
·x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。
·[x,fval] = linprog(...) 返回解x处的目标函数值fval。
·[x,lambda,exitflag] = linprog(...)返回exitflag值,描述函数计算的退出条件。
·[x,lambda,exitflag,output] = linprog(...) 返回包含优化信息的输出变量output。
·[x,fval,exitflag,output,lambda] = linprog(...) 将解x处的拉格朗日乘子返回到lambda参数中。
例:生产决策问题某厂生产甲乙两种产品,已知制成一吨产品甲需用资源A 3吨,资源B 4m3;制成一吨产品乙需用资源A 2吨,资源B 6m3,资源C 7个单位。
若一吨产品甲和乙的经济价值分别为7万元和5万元,三种资源的限制量分别为90吨、200m3和210个单位,试决定应生产这两种产品各多少吨才能使创造的总经济价值最高?在Matlab中求解步骤:·首先输入下列系数:f = [-7;-5];A = [3 24 60 7];b = [90; 200; 210];lb = zeros(2,1);·然后调用linprog函数:[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)结果截图为:由上可知,生产甲种产品14吨、乙种产品24吨可使创建的总经济价值最高。
最高经济价值为218万元。
exitflag=1表示过程正常收敛于解x处。
4.2多目标规划——fgoalattain函数(1)x, weight, goal, b, beq, lb和ub 为向量, A和Aeq为矩阵, c(x), ceq(x)和F(x)为函数,返回向量。
F(x), c(x)和ceq(x)可以是非线性函数。
(2)语法:·x = fgoalattain(fun,x0,goal,weight)·x = fgoalattain(fun,x0,goal,weight,A,b)·x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)·x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)·x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)·x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq, lb,ub,nonlcon,options)·x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)·[x,fval] = fgoalattain(...)·[x,fval,attainfactor] = fgoalattain(...)·[x,fval,attainfactor,exitflag] = fgoalattain(...)·[x,fval,attainfactor,exitflag,output] = fgoalattain(...)·[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(...)(3)描述:·fgoalattain求解多目标达到问题。