过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,qq:927550334
在实际工程应用过程中经常碰到从多个可能方案中选出最合理、能实现预定最优目标方案,这个方案就称为最优方案。通常最优方案获得需要在多个相互约束的变量中取得平衡。例如,化学反应的速率随着温度的升高而增加,提高反应器温度有利于增加产量,但是提高温度可能会增加不必要的副产物,同时也增加过程能耗,因此反应器的最优操作温度就要综合考虑这些因素的影响,寻找最优方案的方法称为最优化方法。
最优化问题的基本形式与分类
一个最优化问题可以定义如下。
目标函数:
约束条件:
式中,x是由n个变量组成的向量,称为决策变量或自变量;h(x)是一组维数为m1的等式向量,称为等式约束;g(x)是一组维数为m2的不等式向量,称为不等式约束。
某化肥集团公司有两个化肥厂,其产能分别为ai,i = 1,2。现需将其分别配送到10个分销点, 两个工厂到分销点的运输价格为Cij,, i= 1,2; j = 1,2,…,10,运输量.xij,i=l,2; j =l,2,…,10必须保证每个分销店的销售量dj;,j=1,2,…,10,求运输费用达到最少时的运输量。根据以上描述,写出该最优化问题的目标函数和约束条件。
目标函数:
约束条件:
根据目标函数和约束条件方程和自变量x类型不同可以将最优化分为不同类型。如果最优化问题没有约束条件,则称为无约束优化问题,反之则称为有约束优化问题。如果目标函数和约束条件都是线性关系,则称为线性规划问题,在生产计划安排、生产调度、资源分配等常可遇见这类问题。如果目标函数为非线性函数,则该问题为非线性优化问题,特别地,如果目标函数具有平方和的形式,则称为最小二乘问题,最小二乘问题在模型参数回归中应用十分广泛,过冷水在实际应用中就经常使用最小二乘法回归化工模型参数。
数值最优化算法的基本思路
数值最优化通常采用迭代方法,即从一个初始的猜测解x0出发,通过优化算法产生一个迭代数列.xk, ,使xk在迭代过程中逐渐减小,当迭代至xk无法再减小时,求解完成.迭代时,从任意x。出发寻找下一个迭代点工w1需要确定搜索方向和搜索步长,这可以表示为
pk表示搜索方向;ak表示搜索步长,根据确定搜索方向和步长基本思想不同,可分为两种策略:线搜索策略和信赖域策略。过冷水在此不打算讲两种算法的详细思路,而是给比较实用的如何应用Matlab解决优化问题。
给出Matlab最优化常用函数
Matlab最优化工具箱函数 | |||
非线性最小二乘问题 | 非线性最小二乘问题 | ||
lsqcurvefit | 非线性最小二乘法曲线拟合 | lsqcurvefit | 非线性最小二乘法曲线拟合 |
lsqnonlin | 非线性最小二乘法 | lsqnonlin | 非线性最小二乘法 |
非线性多目标极小值问题 | 线性最小二乘 | ||
fgoalattain | 多变量多目标达到 | lsqlin | 线性约束最小二乘法 |
fminimax | 多变量最大值最小值 | lsqnonneg | 非负线性最小二乘法 |
非线性最小值函数 | 线性规划问题 | ||
fminbnd | 单目标最小值 | bintprog | 0-1整数规划 |
fmincon | 有约束多变量最小值 | linprog | 线性规划 |
fminsearch | 无约束多变量极值 | quadprog | 二次规划 |
fminunc | 无约束多变量极值 | ||
fseminf | 半无穷多变量极值 |
利用以上 MATLAB优化工具箱函数求解最优化问题的步骤如下。
(1)分析数学模型,选择恰当优化函数。
(2)根据选择的最优化函数,进行必要编程求解问题,包括以下步骤;
①编写目标函数;
②编写约束条件(等式,不等式,边界,非线性约束条件);
③设置求解函数的输入输出,进行求解﹔
④观察结果是否合理。
以下结合具体实例介绍部分函数的使用。
线性规划问题
线性规划研究的问题主要有两类:确定一项任务,如何统筹安排,以尽量少的资源完成任务;如何用一定量的资源来完成最多的任务。在化工厂的排产过程中经常使用线性规划。
线性规划问题数学模型为
目标函数:
约束条件:
用于求解线性规划问题主要使用linprog函数,
[x,fval]= linprog(f,A,b,Aeq,beq,lb,ub,xo,options)
某工厂生产甲、乙两种产品,已知生产1 kg甲产品需要原料A 2 kg,原料B 5 kg;生产l kg乙产品需要原料A 3 kg,原料B 7 kg,原料C 6 kg。如果l kg产品甲和乙的销售价格分别为5万元和15万元,三种原料限用量分别为150 kg、200 kg和 120 kg。试确定应分别生产这两种产品各多少公斤才能使总销售价格最高?
令生产甲数量为x,生产乙数量为x,根据题意可以建立如下模型。
目标函数:
约束条件:
程序如下。
f=[ -5 -15]; A=[2 3;5 7;0 6]; b= [150;200;120]; lb=[0;0]; [x,fval]=linprog(f,A,b,[],[],lb) Optimal solution found. x = 12.0000 20.0000 fval = -360
当生产甲乙两种产品12kg和20kg时,可以实现360万元销售额.
无约束非线性规划
当目标函数或约束条件中有一个或多个为非线性函数,就称这样的规划问题为非线性规划。根据模型中约束条件的有无,非线性规划分为无约束非线性规划和有约束非线性规划两大类问题。
MATLAB用于求解无约束非线性规划问题函数为fminbnd、fminsearch和 fminunc。其中 fminbnd 函数只可以求解单变量无约束非线性规划问题; fminsearch 函数和fminunc函数则可用于求解单变量或多变量无约束非线性规划问题。
1. fminbnd 函数 利用该函数可以求解区间[x1, x2]内单变量函数的最小值,常用的调用格式如下。
[x,fval,exitflag] = fminbnd(fun,xl,x2,options),在区间[x1, x2]内,用options指定的优化参数对目标函数fun进行最小化;并返回最小解x及x处的目标函数值fval。
2. fminunc函数﹑利用该函数可以求解单变量或多变量函数的最小值,常用的调用格式如下。
[x,fval,exitflag] = fminunc(fun,x0,options),以给定的初值x0,用options 指定的优化参数对目标函数fun进行最小化,如果省略options则按默认参数进行最小化,最后返回最小解x及x处的目标函数值fval。
3. fminsearch函数﹑利用该函数可以求解单变量或多变量函数的最小值,常用的调用格式如下。
[x,fval,exitflag] =fminsearch(fun,x0,options),以给定的初值x0,用options指定的优化参数对目标函数fun进行最小化;如果省略options则按默认参数进行最小化,最后返回最小解x及x处的目标函数值fval, fminsearch使用算法与fminunc不同。
求函数f(x)在[-5,5]上最小值。
fun='(x^3 x^2-1)/(exp(x) exp(-x))'; [x,fval,exitflag]=fminbnd(fun,-5,5) x = -3.3112 fval = -0.9594 exitflag = 1 函数在x=-3.3112处取最小值-0.9594 目标函数也可以采用匿名函数 f=@(x)((x^3 x^2-1)/(exp(x) exp(-x))) [x,fval,exitflag]=fminbnd(f,-5,5) f = 包含以下值的 function_handle: @(x)((x^3 x^2-1)/(exp(x) exp(-x))) x = -3.3112 fval = -0.9594 exitflag = 1
最小二乘法
最小二乘优化问题也是一类最优化问题,在科学研究与工程设计中经常会遇到这类问题。例如,系统辨识中的参数估计问题,BP神经网络中权值训练问题,根据大量实验数据去构造某种形式函数的数据拟合问题等,过冷水在最优化问题上最常用的就是最小二乘法。非线性最小二乘优化问题的数学模型为
在MATLAB优化工具箱中求解非负最小二乘问题的函数为
[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin ( fun,x0,lb,ub,options)
其中:
(1) fun和x0是不可缺省的输人变量;
( 2) fun函数句柄,对于指定的x返回目标函数的计算值;
在研究一些具体问题时,常需根据数学理论和问题的实际特征用一个某种形式的函数 y = f(x,a1,a2,...,am)作为未知函数近似表达式,其中,a1,a2,...,am为待定常数,为了使这个函数所确定的关系能接近已有数据,可要求参数a1,a2,...,am取极小值。这是一种特殊的最小二乘问题,称为最小二乘拟合问题,其数学模型为
在MATLAB优化工具箱中求解非负最小二乘问题的函数为
[a,resn,resid,exitflag]= lsqcurvefit( fun,a0,xdata,ydata,lb,ub,options)
输入变量规定:
( l) fun、a0、xdata和 ydata是不可缺省的输入变量;
( 2) fun函数句柄,对于指定的x返回目标函数的计算值;
(3) a0是向量,为待拟合参数a,ag,…,am的初始值;
(4) xdata和 ydata分别是已知的自变量数据和因变量数据﹔
(5) 其他参数说明参见前面的函数。
输出变量:
a为最小二乘拟合获得参数值, resnorm为拟合残差平方和, residual为残差, exitflag为程序退出标志。
求解非线性最小二乘问题
x0=[1 1]; [x,resn,resid,exit] = lsqnonlin(@objfun,x0,lb) Local minimum possible. lsqnonlin stopped because the final change in the sum of squares relative to its initial value is less than the value of the function tolerance. <stopping criteria details> x = 1.4142 0.0000 resn = 30.0000 resid = 1.0000 5.0000 -2.0000 exit = 3
已知数据
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
y | 15.3 | 20.5 | 27.4 | 36.6 | 49.1 | 65.6 | 87.8 | 117.6 |
试用y=a1exp(a2x)函数拟合
x=1:8; y=[15.3 20.5 27.4 36.6 49.1 65.6 87.8 117.6]; a0=[1 1]; fun=@(a,x)(a(1)*exp(a(2)*x)) [a,resn,resid]= lsqcurvefit(fun,a0,x,y) xcal=1:0.1:8; ycal=fun(a,xcal); plot(x,y,'bo',xcal,ycal,'k-') legend('Original Data','Fitted Curve')
本期过冷水和大家分享了数值优化的问题概括,同时给出了线性规划,无约束规划,最小二乘优化这三类问题的具体解决办法,灵活应用本文给出的案例函数,基本就可以解决工作遇到的常见优化问题,希望大家能够快速学会应用到实践中去。
过冷水发表于 仿真秀 平台原创文章,未经授权禁止私自转载,如需转载请需要和作者沟通表明授权声明,未授权文章皆视为侵权行为,必将追责。如果您希望加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载均可加群:927550334。
精品回顾
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享