事先声明,我没有系统的学习过该工具箱的函数细节,所以下面的都是我个人的推测而已。
计算公式是:
sp是压差。
就这么看,我看了半天也没明白这东西有什么用,后来我写了个栗子,突然明白了。看下图。
不知道读者在使用工具箱之前有没有手写过遗传算法的选择函数,染色体的选择过程比较精巧,使用轮盘赌来对染色体进行选择,而轮盘赌的第一步就是将个体的适应度值取倒数,以便轮盘赌对染色体进行选择。之前我们要取适应度值最小的染色体,但是一旦适应度取了倒数,所有的操作就是相反的了,即轮盘赌取适应度倒数的最大值。
回到上图,有没有异曲同工之处。ranking函数做了一个比取倒数还牛的事,就是它可以把“倒数”控制在任意范围,一般默认是0到2之间,这个范围就叫做压差。
适应度最差的6号值高达10,于是在排序的过程中,ranking(6号的值)=0,最小,最不容易被选择,而ranking(1号的值)=2,相对来说最容易被选择。
------------------------分割线-----------------------------
我居然在某本参考书的附带代码中看到了这样一段:
他手写了谢菲尔德大学的遗传算法工具箱,但是对于FitnV的求法,他只写了这两句。懂的自然懂哈。