优化算法目录:http://t.csdnimg.cn/75T9p
一、什么是优化算法
优化算法是一种寻优算法,通过迭代与概率控制在众多解决方案中寻找一个问题的相对最优解。
通过上面这句话我们很容易产生以下疑惑:
1.你凭什么说你找的解就是相对最优解?—适应度函数的含义
答:显然一个问题有着众多的解决方案,每个解决方案对于问题的能力不尽相同。有的解堪称完美,有的解不尽人意,那么在计算机中我们如何表示一个解好还是不好?
那当然是将感性认知的比较转换成数据的比较喽。我们将一个解对于问题的解决能力称为适应度值,显然适应度值越高越好。那么如何把一个解转换成适应度值呢?这个问题得具体问题具体分析,不同情景下有着不同的转换方式。不过这个转换方式我们统一称之为适应度函数,在具体的算法中这个适应度函数是需要用户自己实现的。适应度值越高说明解越优秀,那么只要我们最后找的解的适应度是最高的,那么我们就可以说这个解是最好的。
2.为什么解是相对最优解?直接算最最优的解不好吗?
答:从表面来看,由于算法中包含概率这种不确定性参数,因此每次迭代的结果可能不尽相同,没有唯一的结果。因此优化算法在解决复杂问题时,得到的解都是相对最优解。
然而根本原因在于,一个相对复杂问题的解是无穷无尽的,我们不可能遍历每一种情况,比较每一种情况的适应度值来确定最最优解。当然在问题相对简单,解的数量相对有限,我们对解的要求不那么精确,可以通过暴力遍历每一种情况来找出比较好的解,然而这种解也不是最最优的解,同时暴力遍历需要消耗大量的计算机资源与时间,无论是解的适应度还是计算效率一般都不如寻优算法。因此,暴力遍历算法是极其不推荐的。
3.迭代是怎么个迭代?
答:假设我们要求解。我们第一想法可能是看公式能不能化简转化然后求精确解。遗憾的是,上面的式子没得化简办法,那怎么办?有的同学可能想到随便给个数字,比如给个1,然后拿计算机试,试出来是4,结果不对,换个数字接着试,直到计算结果接近5。那么换哪个数字呢?看一下公式好像是单调递增函数,那就试1.1,如果大了就往小的试,大了就往大的试。
在上面这里例子中,我们给的1就是初始值,不断试的过程就是迭代。改变试值的策略就可以看作一个优化算法,公式计算结果与5的距离就可以看作适应度。
优化算法的本质是有规律地试问题的解!!!
4.概率控制是什么意思?
答:通过概率为优化算法增加不确定性,降低迭代早期迅速收敛到局部最优的可能性。对于概率控制的详细理解需要具体了解某个实际优化算法后即可明了。
二、优化算法的基本步骤
首先,任何一个优化算法,都需要用户预先对要解决的问题有充分的了解。用户需要预先设定好适应度函数表明解的优秀程度。
其次,事先确定一些基本参数:
解集中解的数量是指初始解集中解的个数疑也称为种群数量
解的维度指的是一个解包含几个内容,也称为个体特征数量,比如要求,那么一个解就有两个维度
解的上下边界也很好理解,X1的取值范围,X2的取值范围等等.....
最大迭代次数,顾名思义最大能迭代几次,作为迭代结束条件,当然迭代结束条件多种多样,比如有人使用连续n次迭代结果相差不超过一个极小值作为结束条件。
最后,在迭代一次生成新的种群后要记得更新新种群的适应度哦!
最最后,从框架中可以看出,优化算法整体可以分成来两部分,一是整体运行框架,二是算法核心:优化算法策略(遗传算法、差分进化、粒子群算法等)。因此在代码实现时,我们可以将框架部分提取出来,而不用一个算法重复实现一份框架。
三、优化算法适用场景与优缺点
优化算法适用于无法直接求解解析解,对结果精度要求不高(有个差不多说的过去的结果就行)、计算量巨大,对求解时间有限制要求的问题。
对于要求稳定,要求计算结果唯一的问题是不适用的。
优点:能够快速寻找到一个合适的解;算法种类多,可以相互印证;
缺点:解不唯一,可能每次迭代出的结果都不一样;优化算法参数不确定得不断调试试错;存在迭代收敛至局部最优问题。