7、反向学习实现方法

反向学习(Opposition-based Learning)是机器学习中的一个概念,其灵感来源于现实世界中事物之间的相对关系,例如:阴与阳、冷与热、干与湿等。该方法于2005年首次提出,在之后的十余年中被广泛研究,大量经典算法(例如:强化学习、启发式算法、人工神经网络等)借助该方法来提高性能。下面以启发式算法中(例如:GA),生成自然数编码初始种群的反向种群为例,介绍反向学习的实现方法。

首先,生成个体长度为n,种群规模为m的初始种群InitPop,代码如下:

var n,m:=8                                     --n:个体长度,m:种群规模
var tab:table[integer,real]                    --临时个体保存列表
for var i:=1 to m                              --生成随机种群
    tab.create
    for var j:=1 to n
        tab[1,j]:=j                            --自然数编码方式
        tab[2,j]:=z_uniform(1,0,n)             --生成随机数
    next
    tab.sort(2,"up")                           --根据随机数排序
    tab.copyRangeTo({1,1}..{1,*},InitPop,i,1)  --随机个体保存至InitPop列表
next
初始种群(InitPop)

其次,生成初始种群InitPop对应的反向学习种群OppoPop,其中已知数x,x∈[a,b],其反向数x’的计算方法为:x’=a+b-x,代码如下:

for var i:=1 to InitPop.XDim 
    var MaxValue:=InitPop.max({i,1}..{i,*})            --个体最大值
    var MinValue:=InitPop.min({i,1}..{i,*})            --个体最小值
    for var j:=1 to InitPop.YDim 
	OppoPop[i,j]:=MaxValue+MinValue-InitPop[i,j]   --计算反向基因值
    next
next
反向种群(OppoPop)

最后,可以采用种群合并、并行融合等算法策略,将反向学习种群与原算法进行结合,有效扩大搜索范围,避免寻优过程陷入局部最优,从而提高仿真优化算法性能。

参考文献:Sedigheh Mahdavi, Shahryar Rahnamayan, Kalyanmoy Deb, Opposition based learning: A literature review, Swarm and Evolutionary Computation, 39(2018), 1-23