优选法(optimization method)以数学原理为指导,合理安排试验,以尽可能少的试验次数
尽快找到生产和
科学实验中最优方案的科学方法。即最优化方法。实际工作中的优选问题 ,即
最优化问题,大体上有两类:一类是求函数的极值;另一类是求泛函的极值。如果目标函数有明显的表达式,一般可用微分法、变分法、极大值原理或动态规划等分析方法求解(间接选优);如果目标函数的表达式过于复杂或根本没有明显的表达式,则可用数值方法或试验最优化等直接方法求解(直接选优)。
优选法在数学上就是寻找函数极值的较快较精确的计算方法。1953年美国数学家J.基弗提出单因素优选法枣分数法和0.618法(又称黄金分割法) ,后来又提出
抛物线法。至于双因素和多因素优选法,则涉及问题较复杂,方法和思路也较多,常用的有
降维法、瞎子
爬山法、
陡度法、
混合法、
随机试验法和试验设计法等。优选法的应用范围相当广泛,中国数学家
华罗庚在生产企业中推广应用取得了成效。企业在新产品、新工艺研究,仪表、设备调试等方面采用优选法,能以较少的实验次数迅速找到较优方案,在不增加设备、物资、人力和原材料的条件下,缩短工期、提高产量和质量,降低成本等。
优选法,是指研究如何用较少的试验次数,迅速找到最优方案的一种科学方法。例如:在现代体育实践的科学实验中,怎样选取最合适的配方、配比;寻找最好的操作和工艺条件;找出产品的最合理的设计参数,使产品的质量最好,产量最多,或在一定条件下使成本最低,消耗原料最少,
生产周期最短等。把这种最合适、最好、最合理的方案,一般总称为最优;把选取最合适的配方、配比,寻找最好的操作和工艺条件,给出产品最合理的设计参数,叫做优选。也就是根据问题的性质在一定条件下选取最优方案。最简单的
最优化问题是极值问题,这样问题用微分学的知识即可解决。
实际工作中的优选问题 ,即最优化问题,大体上有两类:一类是求函数的极值;另一类是求
泛函的极值。如果
目标函数有明显的表达式,一般可用
微分法、变分法、
极大值原理或
动态规划等分析方法求解(间接选优);如果目标函数的表达式过于复杂或根本没有明显的表达式,则可用数值方法或试验最优化等直接方法求解(直接选优)。
怎样用较少的试验次数,打出最合适的训练量,这就是优选法所要研究的问题。应用这种方法安排试验,在不增加设备、投资、人力和器材的条件下,可以缩短时间、提高质量,达到增强体质.迅速提高运动成绩的目的。
1)选定优化判据(
试验指标),确定影响因素,优选数据是用来判断优选程度的依据。
优选法分为单因素方法和多因素方法两类。单因素方法有平分法、
0.618法(
黄金分割法)、分数法、
分批试验法等;多因素方法很多.但在理论上都不完备.主要有
降维法、
爬山法、
单纯形调优胜。
随机试验法、试验设计法等。优选法已在体育领域得到广泛应用。
2)当f(x1)
3)当f(x1)=f(x2)时,极大点在(x1,x2)的范围内,(a,x1),(x2,b)的区间舍去。
每次舍弃完一定的区间后,在剩余的点中需要重新找点,
迭代计算。
即第一次迭代,需要找到x1,x2,并且计算f(x1),f(x2)
第二次迭代,需要找到x3,x4,并且计算f(x3),f(x4)
右图中的阴影部分就是舍去区间的范围,可见每次迭代都可以将区间缩小,缩减的范围的大小与x1,x2的选取方法有关。而且考虑到舍去的区间可能是某个实验点到上下限的范围,则另一个实验点如果能够重用,将非常减少计算量。
0.618法(黄金分割法)
0.618法就是采用上面的思路来选取x1和x2的:
不失一般性,假定(a,b)区间是(0,1),即f(x)在(0,1)区间上有单峰极值,选取得两个点x1,x2分别记为x和1-x,即在x和1-x两点进行实验,不妨假定保留下来的是(0,x)区间。
继而在(0,x)区间上两个点x^2和(1-x)x处做实验,如果x^2=1-x,那么上次在1-x处的实验就可以派上用场,节省一次实验,而且舍去的区间是原来区间1-x的一部分。故有x^2+x-1=0,可以解得 。
第一次选择0.382(b-a),0.618(b-a),若保留了(0,0.618),由于0.618*0.618=0.382,因此下一轮只需要在0.618*0.382=0.216处做另一次实验,0.382的实验结果在上一轮中得出,减少了计算量,每次消去的区间还大。
Fibonacci序列的应用
由于
Fibonacci序列中后项与前项的比值是越来越趋近于
黄金分割数0.618的,所以单因素优选法也可以利用Fibonacci序列来完成,此方法与0.618法的最大不同在于它能够预先确定迭代次数,而0.618法需要额外指定一个参数,当区间长度缩小到小于这个参数时才结束迭代。利用Fibonacci序列进行优选的另一个优越之处还在于它能适用于参数只能取整数情况。
还是以区间(a,b)中的单峰函数f(x)为例。
将(a,b)区间分成 等分,问题变为在(0, )范围内求极值。第一次选择 和 ,若保留下的区间是(0, ),则下次只需要计算 , 已经在上次迭代中计算过。
若受限于现实条件,可选取出来参加实验的点数有限(x只能够取到有限的一些散点),比 小,比 大,则可以通过添加几个无关的点来凑足 个点。只要保证在[0, ]区间中是单峰极小点即可,而且可以默认这些新加入的点比其他现实能够取到的实验点都差。
上述讨论中,对于初始时包含 个等分点的Fibonacci序列优选法,一轮迭代就可将包含极值的单峰区间缩为包含 个等分点的区间,而且当点数够多时,有 / 约等于于0.618。
具体代码实现
选定区间[-4,4]中的单峰函数f(x)=x^2+5*x,以0.01为要求的精度查找其最小值。
0.618法(黄金分割法)的Matlab代码如下:
对应的Fibonacci法的代码如下: