运用MATLAB解决优化问题的研究.docx
《运用MATLAB解决优化问题的研究.docx》由会员分享,可在线阅读,更多相关《运用MATLAB解决优化问题的研究.docx(18页珍藏版)》请在冰豆网上搜索。
运用MATLAB解决优化问题的研究
运用MATLAB解决优化问题的研究(四)
摘要
在日常生活和实际工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。
最优化方法就是专门研究如何从多个方案中科学、合理的提取出最佳方案的科学。
由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、运输调度、生产控制、经济规划、经济管理等并取得了显著地经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:
(1)建立数学模型即用数学语言来描述最优化问题模型中的数学关系式反应了最优化问题所要达到的目标和各种约束条件。
(2)数学求解数学模型建好以后,选择合理的最优化方法进行求解。
最优化方法的发展很快,现在已经包含有多个分支,如线性规划、非线性规划、无约束最优化问题求解、有约束最优化问题求解、多目标规划等。
关键词:
优化方法;最优化技术;有约束条件;无约束条件;线性规划
USINGMATLABOPTIMIZATIONPROBLEMOFRESERCH(FOUR)
ABSTRACT
Indailylifeandinpracticalwork,peopleforthesamequestionoftenwillproposeseveralsolutions,andthroughvariousaspectsoftheargumentextractoptimalscheme.
Anoptimizationmethodisspecializedstudyhowfrommultiplesolutionsinscientificandreasonableextracttheoptimalschemeofscience.Duetotheoptimizationproblemomnipresent,currentlyoptimizationmethodsintheapplicationandresearchesofreachesdeepintoproductionandresearchofeachdomain,suchascivilengineering,transportationscheduling,productioncontrol,economicplanning,economicmanagement,etcandhaveachievedremarkableeconomicbenefitsandsocialbenefits.Withoptimizationmethodtosolveoptimizationproblemoftechnology,calledthemostoptimizationtechnique,itcontainstwoaspectsofcontent:
(1)Establishedthemathematicalmodelwhichmathematicallanguagetodescribethemathematicalrelationshipmodeloptimizationproblemofreactiontotheoptimizationproblemofgoalstoachieveandthatallconstraintconditions.
(2)Mathematicssolvingmathematicalmodelbuiltgoodlater,therationalchoiceofoptimizationalgorithm.
Anoptimizationmethodoffastdevelopment,nowalreadycontainsmultiplebranch,suchaslinearprogramming,nonlinearprogramming,unconstrainedoptimizationproblemsolving,haveconstrainedoptimizationproblemsolving,multi-objectiveprogramming,etc.
Keywords:
optimizationmethod;theoptimumtechnology;abindingcondition;unconstrainedconditions;linearprogramming
1概述………………………..……………………………….……………………….1
1.1优化工具箱中的函数…………………………………………………………………1
样张4
1.2优化问题中涉及到的几类问题………………………………………………………..2
2优化问题的求解……………………………………………………………………...3
2.1线性规化问题……..…………………………………………………………..5
2.1.1基本数学原理…………………………………………...…………………….5
2.1.2相关函数介绍………….……………………………………………………6
2.1.3应用实例…………………………………………………………………….6
2.2无约束优化问题求解………........................................................................................7
2.2.1基本数学原理…………………………………………………………….…...7
2.2.2相关函数介绍…………………………………………………………………8
2.2.3应用实例………………………………………………..................................9
2.3有约束优化问题求解………………………………………………………………..10
2.3.1基本数学原理………………………………………………………………...11
2.3.2相关函数介绍………………………………………………………………...12
2.3.3应用实例……………………………………………………………………...13
参考文献……………………………………………………………………………………...18
附录…………………………………………………………………………………………...19
1优化问题求解的概述
有了MATLAB这个强大的计算平台,既可以利用MATLAB优化工具(OptimizationToolbox)中的函数,又可以通过对算法编程实现相应的最优化计算。
利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。
具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性非线性的最小二乘问题。
另外该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。
1.1优化工具箱中的函数
优化工具箱中的函数包括下面几类:
1.1.1最小化函数
表1-1最小化函数表
函数
描述
fgoalattain
多目标达到问题
fminbnd
有边界的标量非线性
fmincon
有约束的非线性最小化
fminimax
最大最小化
fminsearch
fminunc
无约束非线性最小化
fseminf
半无限问题
linprog
线性课题
样张6
1.1.2方程求解函数
表1-2方程求解函数表
函数
描述
\
线性方程求解
fsolve
非线性方程求解
fzero
标量非线性方程求解
1.1.3最小二乘(曲线拟合)函数
表1-3最小二乘曲线拟合函数表
函数
描述
\
线性最小二乘
lsqlin
有约束线性最小二乘
lsqcurvefit
非线性曲线拟合
lsqnonlin
非线性最小二乘
lsqnonneg
非负线性最小二乘
1.2优化问题中的涉及到的几类问题:
(1).线性规划问题
(2).无约束最优化问题求解
(3).有约束最优化问题求解
(4).最大最小化问题
2.优化问题的求解
2.1线性规划问题
2.1.1基本数学原理
线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。
线性规划问题的标准形式为:
其中f、x、b、beq、lb、ub、为向量,A、Aeq为矩阵。
其它形式的线性规划问题都可以经过适当变化为此标准形式。
在MATLAB6.0版中,线性规划问题(LinearProgramming)已用函数linprog取代了MATLAB5.x版中的lp函数。
当然,由于版本的向下兼容性,一般来说,低版本中的函数在6.0版中任可使用。
线性规划的标准形式要求目标函数最小化,约束条件取等式,变量非负。
不符合这几个条件的线性模型要首先转化成标准形。
线性规划的求解方法主要是单纯形法(SimpleMethod),该法由Dantzig于1947年提出,以后经过多次改进。
单纯形法是一种迭代算法,它从所有基本可行解的一个较小部分中通过迭代过程选出最优解。
其迭代过程的一般描述为:
(1).将线性规划化为典范形式,从而可以得到一个初始基本可行解x(0)(初始顶点),将它作为迭代过程的出发点,其目标值为z(x(0))。
(2).寻找一个基本可行解x
(1),使z(x
(1))≤z(x(0))。
方法是通过消去法将产生x(0)的典范形式化为产生x
(1)的典范形式。
(3).继续寻找较好的基本可行解x
(2),x(3),…,使目标函数值不断改进,即z(x
(1))≥z(x
(2))≥z(x(3))≥…。
当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。
Matlab优化工具箱中才用的是投影法,它是单纯形法的一种变种。
2.1.2相关函数介绍
函数linprog
格式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(...)
说明x=linprog(f,A,b)求解问题minf'*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参数
lambda参数是解x处的拉格朗日乘子。
它有以下一些属性:
lambda.lower–lambda的下界。
lambda.upper–lambda的上界。
lambda.ineqlin–lambda的线性不等式。
lambda.eqlin–lambda的线性等式。
2.1.3应用实例
例1工作人员计划安排问题
某昼夜服务的公共交通系统每天各时间段(每4小时为一个时间段)所需的值班人数如表所示,这些值班人员在某一时段开始上班后要连续工作8个小时(包括轮流用膳时间),问该公交系统至少需要多少名工作人员才能满足值班的需要?
表3-1各时段所需值班人数表
班次
时间段
所需人数
1
6:
00—10:
00
60
2
10:
00—14:
00
70
3
14:
00—18:
00
60
4
18:
00—22:
00
50
5
22:
00—2:
00
20
6
2:
00—6:
00
30
设xi为第i个时段开始上班的人员数,据题意建立下面的数学模型:
需要对前面六个约束条件进行形式变换,是不等式为非正不等式。
只需要在不等式两侧取负即可。
首先输入下列系数:
f=[1;1;1;1;1;1];
A=[-10000-1
-1-10000
0-1-1000
00-1-100
000-1-10
0000-1-1];
b=[-60;-70;-60;-50;-20;-30];
lb=zeros(6,1);
然后调用linprog函数:
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);
x=
41.9176
28.0824
35.0494
14.9506
9.8606
20.1394
fval=
150.0000
exitflag=
1
可见,只要六个时段分别安排42人、28人、35人、15人、10人和20人就可以满足值班的需要。
共计150人。
计算收敛。
2.2无约束优化问题求解
2.2.1基本数学原理
无约束线最优化问题的一般描述为
其中,
,该数学表示的含义亦即求取一组x,使得目标函数f(x)为最小,故这样的问题又称为最小化问题。
在实际应用中,许多科学研究和工程计算问题都可以归结为一个最小化问题,如能量最小、时间最短但呢个。
2.2.2相关函数介绍
(1)函数fminbnd
格式x=fminbnd(fun,x1,x2)
x=fminbnd(fun,x1,x2,options)
x=fminbnd(fun,x1,x2,options,P1,P2,...)
[x,fval]=fminbnd(...)
[x,fval,exitflag]=fminbnd(...)
[x,fval,exitflag,output]=fminbnd(...)
说明fminbnd求取固定区间内单变量函数的最小值。
x=fminbnd(fun,x1,x2)返回区间{x1,x2}上fun参数描述的标量函数的最小值x。
x=fminbnd(fun,x1,x2,options)用options参数指定的优化参数进行最小化。
x=fminbnd(fun,x1,x2,options,P1,P2,...)提供另外的参数P1,P2等,传输给目标函数fun。
如果没有设置options选项,则令options=[]。
[x,fval]=fminbnd(...)返回解x处目标函数的值。
[x,fval,exitflag]=fminbnd(...)返回exitflag值描述fminbnd函数的退出条件。
[x,fval,exitflag,output]=fminbnd(...)返回包含优化信息的结构输出。
(2)函数fminsearch
格式x=fminsearch(fun,x0)
x=fminsearch(fun,x0,options)
x=fminsearch(fun,x0,options,P1,P2,...)
[x,fval]=fminsearch(...)
[x,fval,exitflag]=fminsearch(...)
[x,fval,exitflag,output]=fminsearch(...)
说明fminsearch求解多变量无约束函数的最小值。
该函数常用于无约束非线性最优化问题。
x=fminsearch(fun,x0)初值为x0,求fun函数的局部极小点x。
x0可以是标量、向量或矩阵。
x=fminsearch(fun,x0,options)用options参数指定的优化参数进行最小化。
x=fminsearch(fun,x0,options,P1,P2,...)将问题参数p1、p2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的缺省值。
[x,fval]=fminsearch(...)将x处的目标函数值返回到fval参数中。
[x,fval,exitflag]=fminsearch(...)返回exitflag值,描述函数的退出条件。
[x,fval,exitflag,output]=fminsearch(...)返回包含优化信息的输出参数output。
(3)函数fminunc
格式x=fminunc(fun,x0)
x=fminunc(fun,x0,options)
x=fminunc(fun,x0,options,P1,P2,...)
[x,fval]=fminunc(...)
[x,fval,exitflag]=fminunc(...)
[x,fval,exitflag,output,grad]=fminunc(...)
[x,fval,exitflag,output,grad,hessian]=fminunc(...)
说明fminunc给定初值,求多变量标量函数的最小值。
常用于无约束非线性最优化问题。
x=fminunc(fun,x0)给定初值x0,求fun函数的局部极小点x。
x0可以是标量、向量或矩阵。
x=fminunc(fun,x0,options)用options参数中指定的优化参数进行最小化。
x=fminunc(fun,x0,options,P1,P2,...)将问题参数p1、p2等直接输给目标函数fun,将options参数设置为空矩阵,作为options参数的缺省值。
[x,fval]=fminunc(...)将解x处目标函数的值返回到fval参数中。
[x,fval,exitflag]=fminunc(...)返回exitflag值,描述函数的输出条件。
[x,fval,exitflag,output]=fminunc(...)返回包含优化信息的结构输出。
[x,fval,exitflag,output,grad]=fminunc(...)将解x处fun函数的梯度值返回到grad参数中。
[x,fval,exitflag,output,grad,hessian]=fminunc(...)将解x处目标函数的Hessian矩阵信息返回到hessian参数中。
2.2.3应用实例
例2求
的最小值。
>>fun='3*x
(1)^2+2*x
(1)*x
(2)+x
(2)^2';
>>x0=[11];
>>[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0)
结果为:
x=
1.0e-006*
0.2541-0.2029
fval=
1.3173e-013
exitflag=
1
output=
iterations:
8
funcCount:
27
stepsize:
1
firstorderopt:
1.1633e-006
algorithm:
'medium-scale:
Quasi-Newtonlinesearch'
grad=
1.0e-005*
0.1163
0.0087
hessian=
6.00002.0000
2.00002.0000
或用下面的方法:
>>fun=inline('3*x
(1)^2+2*x
(1)*x
(2)+x
(2)^2')
fun=
Inlinefunction:
fun(x)=3*x
(1)^2+2*x
(1)*x
(2)+x
(2)^2
>>x0=[11];
>>x=fminunc(fun,x0)
x=
1.0e-006*
0.2541-0.2029
2.3有约束优化问题求解
2.3.1基本数学原理
有约束最优化问题的一般描述为
其中,
,该数学表示的含义亦即求取一组x,使得目标函数f(x)为最小,且满足约束条件G(x)≤0。
记号s.t.是英文subjectto的缩写,表示x要满足后面的约束条件。
约束条件可以进一步细化为:
(1)线性不等式约束:
。
(2)线性等式约束:
。
(3)非线性不等式约束:
。
(4)非线性等式约束:
。
(5)x的下界和上界:
。
MATLAB最优化工具箱提供了一个fmincon函数,专门用于求解各种约束下的最优化问题。
2.3.2相关函数介绍
函数fmincon
格式x=fmincon(fun,x0,A,b)
x=fmincon(fun,x0,A,b,Aeq,beq)
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options,P1,P2,...)
[x,fval]=fmincon(...)
[x,fval,exitflag]=fmincon(...)
[x,fval,exitflag,output]=fmincon(...)
[x,fval,exitflag,output,lambda]=fmincon(...)
[x,fval,exitflag,output,lambda,