1、优化问题的计算机求解优化问题的计算机求解第七章 最优化问题的计算机求解7.1 无约束最优化问题求解无约束最优化问题是最简单的一类最优化问题,其一般数学描述为 (7-1-1)其中,称为优化变量,函数称为目标函数,该数学表示的含义亦即求取一组向量,使得最优化目标函数为最小,故这样的问题又称为最小化问题。其实,最小化是最优化问题的通用描述,它不失普遍性。如果要想解最大化问题,那么只需给目标函数乘一个负号就能立即将最大化问题转换成最小化问题。所以本书中描述的全部问题都是最小化问题。7.1.1 解析解法和图解法无约束最优化问题的最优点处,目标函数对各个分量的一阶导数为0,从而可以列出下面的方程: (7-
2、1-2)求解这些方程构成的联立方程可以得出极值点。其实,解出的一阶导数均为0的极值点不一定都是极小值的点,其中有的还可能是极大值点。极小值问题还应该有正的二阶导数。对于单变量的最优化问题可以考虑采用解析解的方法进行来解。然而多变量最优化问题因为需要将其转换成求解多元非线性方程,其难度也不低于直接采取最优化问题,所以没有必要采用解析解方法求解。 一元函数最优化问题的图解法也是很直观的,应绘制出该函数的曲线,在曲线上就能看出其最优值点。二元函数的最优化也可以通过图解法求出。但三元或多元函数,由于用图形没有办法表示,所以不适合用图解法来解。【例7-1】函数,试用解析求解和图形求解的方法研究该函数的最
3、优性。【求解】可以先表示该函数,并解析地求解该函数的一阶导教,用ezplot()函数可以给制出区间内一阶导函数的曲线,如图7-1a所示。 syms t; y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; y1=diff(y,t); %求取一阶导数ezplot(y1,0,4) 绘制出选定区间内一阶导函数的曲线其实求解导数等于0的方程不比直接求解其最优值简单。用图解法可以看出,在这个区域内有两点:,使得它们的一阶导数为0,但从其一阶导数走向看,点对应负的二阶导数值,所以该点对应于极大值点,而点对应于正的二阶导数值,故为极小值点。点的值可以由下面的
4、语句直接解出。 t0=solve(y1),ezplot(y,0,4) %求出一阶导数等于零的点t0 =1.4528424981725411893375778048840y2=diff(y1); b=subs(y2,t,t0) %并验证二阶导数为正b =7.8553420253333601379464405534590这样,就可以求出函数的最小值。还可以用图形绘制的方法进一步验证得出的结果如图7-1b所示,可见, 为最小值点,为最大值点。然而因为给定的函数是非线性函数所以用解析法或类似的方法求解最小值问题一点都不比直接求解最优化问题简单。因此除演示之外,不建议用这样的方法求解该问题,而直接采用最
5、优化问题求解程序得出问题的解。图7-1 联立方程图解法示意图7.1.2 基于 MATLAB 的数值解法MATLAB语言中提供了求解无约束最优化的函数fminsearch(),其最优化工具箱中还提供了函数fminunc(),二者的调用格式完全一致,为x=fminunc(Fun,x0) 最简求解语句x,f,flag,out=fminunc(Fun,x0,opt,p1,p2,) 一般求解格式opt为控制参数。该函数主要采用了单纯形算法。下面将通过例子来演示无约束最优化问题的数值解法。【例7-2】已知二元函数,试用MATLAB提供的求解函数求出其最小值并用图形方法表示其求解过程。【求解】因为函数中给出
6、的自变量是,而最优化函数需要求取的是自变量向量。故在求解前应该先进行变量替换,如令,这样就可以用下面的语句由inline()形式定义出目标函数f,然后将求解控制变量中的Display属性设置为iter,这样可以显示中间的搜索结果。用下面的语句求解出最优解。 f=inline(x(1)2-2*x(1)*exp(-x(1)2-x(2)2-x(1)*x(2),x);x0=0; 0; ff=optimset; ff.Display=iter;x=fminsearch(f,x0,ff)Iteration Func-count min f(x) Procedure 0 1 0 1 3 -0.0004999
7、37 initial simplex 2 4 -0.000499937 reflect 72 137 -0.641424 contract outsideOptimization 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 = 0.6111 -0.3056同样的问题用fminunc
8、()函数求解,则可以得出如下的结果。x=fminunc(f,0;.0,ff)Iteration Func-count f(x) Step-size derivative 1 2 -2e-008 0.001 -4 2 9 -0.584669 0.304353 0.343 3 16 -0.641397 0.950322 0.00191 4 22 -0.641424 0.984028 -1.45e-008 x = 0.6110 -0.3055比较两种方法,显然可以看出用fminunc()函数的效率明显高于fminsearch()。所以在无约束力优化问题求解时,如果安装了最优化工具箱则建议使用fmin
9、unc()函数。练习:求解1) 首先编写该函数的M文件: fun1.m2) x=-1,1 %估计初值fminunc(fun1,x)7.2 有约束最优化问题求解有约束最优化问题的一般描述为 (7-2-1)其中,记号s.t.是英文subject to的缩写,表示满足后面的关系。该数学表示的含义为求取一组向量,使得在满足约束条件的前提下能够使目标函数最小化。在实际遇到的最优化问题中,有时约束条件可能是很复杂的,它既可以是等式约束,也可以是不等式约束等,既可以是线性的,也可能是非线性的,有时甚至可以不能用纯数学函数来描述。7.2.1 约束条件与可行解区域满足约束条件的范围称为可行解区域。下面通过例子演
10、示二元问题的可行解范围与图解结果。【例7-3】考虑下面二元最优化问题的求解,试用图解方法对该问题进行研究【求解】由约束条件可见,若在-3,3区间选择网格则可以得出无约束时目标函数的三维图形数据。可以用下面的语句获得这些数据。 x1,x2=meshgrid(-3:.1:3); % 生成网格型矩阵z=-x1.2-x2; % 计算出矩阵上各点的高度引入了约束条件,则在图形上需要将约束条件以外的点剔除掉。具体的方法是找出这些点的横纵坐标值,将其函数值设置成不定式NaN即可剔除这些坐标点。这样可以使用如下的语句进行求解。 i=find(x1.2+x2.29); z(i)=NaN; %找出的坐标,并置函数
11、值为NaNi=find(x1+x21); z(i)=NaN; %找出的坐标,并置函数值为NaNsurf(x1,x2,z); shading interp;该语句可以直接绘制出如图7-2(a)所示的三维图形,若想从上向下观察该图形,则可以使用view(0,90)命令这样可以得出如图7-2(b)所示的二维投影图。图形上的区域为相应最优化问题的可行区域,即满足约束条件的区域。该区域内对应目标函数的最大值就是原问题的解,故从图形可以直接得出结论,问题的解为用max(z(:)可以得出最大值为3。 图7-2 二维最优化问题的图解法对于一般的一元问题和二元问题,可以用图解法直接得出问题的最优解。但对于一般的
12、多元问题和较复杂的问题,则不适合用图解法求解,而只能用数值解的方法进行求解,也没有检验全局最优性的方法。7.2.2 线性规划问题的计算机求解线性规划问题是一类特殊的问题,也是最简单的有约束最优化问题。在线性规划中,目标函数和约束函数都是线性的,其整个问题的数学描述为 (7-2-2) 为描述原问题的方便及求解的高效性起见,这里的约束条件已经进一步细化为线性等式约束,线性不等式约束,变量的上界向量和下界向量,使得。 对不等式约束来说,MATLAB定义的标准型是“”关系式。如果约束条件中某个式于是“”关系式,则在不等号两边同时乘以1就可以转换成“”关系式了。 线性规划是一类最简单的有约束最优化问题,
13、求解线性规划问题有多种算法。其中,单纯形法是最有效的一种方法,MATLAB的最优化工具箱中实现了该算法,提供了求解线性规划问题的linprog()函数。该函数的调用格式为 x,fopt,flag,c= linprog (f, A, B, Aeq, Beq, xm, xM, x0, opt, p1, p2,)其中,f, A, B, Aeq, Beq, xm, xM与前面约束与目标函数公式中的记号是完全一致的,x0为初始搜索点。各个矩阵的约束如果不存在,则应该用空矩阵来占位。OPT为控制选项,该函数还允许使用附加参数p1, p2,。最优化运算完成后,结果将在变量x中返回,最优化的目标函数将在fop
14、t变量中返回。我们将通过下面的例子来演示线性规划的求解问题。【例7-4】试求解下面的线性规划问题。【求解】从给出的数学式子可以看出,其目标函数可以用其系数向量表示,不等式约束有两个,即 ,另外,由于没有等式约束,故可以定义Aeq和Beq为空矩阵。由给出的数学问题还可以看出,x的下界可以定义为xm=0, 0, 3.32, 0.678, 2.57T,且对上界没有限制,故可以将其写成空矩阵。由前面的分析可以给出如下的MAT LA B命令来求解线性规划问题并立即得出结果。 f=-2 1 4 3 1; A=0 2 1 4 2; 3 4 5 -1 -1;B=54; 62; Ae=; Be=; xm=0,0
15、,3.32,0.678,2.57;ff=optimset; ff.LargeScale=off;ff.TolX=1e-15; ff.TolFun=1e-20; ff.TolCon=1e-20; ff.Display=iter;x,f_opt,key,c=linprog(f,A,B,Ae,Be,xm,ff)Optimization terminated.x = 19.7850 -0.0000 3.3200 11.3850 2.5700f_opt = -89.5750key = 1c = iterations: 5 algorithm: medium-scale: active-set cgiterations: message: Optimization terminated.从列出的结果看,由于key值为1,故求解是成功的。以上只用了5步就得出了线性规划问题的解,可见求解程序功能是很强大的,可以很容易得
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1