解决可行性问题的一个合理的办法是设计专门的遗传算子来保持染色体的可行性。Michalewicz Z等[5]指出这种方法通常比基于惩罚函数的方法更可靠。许多领域中的实际工作者采用专门的遗传算子构造了非常成功的遗传算法,使用这种方法处理约束条件已是一个十分普遍的趋势。但是这种方法的遗传搜索受到了可行域的限制。
设计专门的遗传算子是和问题解的编码方式密切相关的,不同的编码方案有不同的遗传算子,下面通过一个具体的例子来说明这种方法的思想,在后面的章节中,我们还会看到一些使用这种方法的实例。
由Michalewicz Z[5]等设计的GENOCOP系统给出了一个很好的应用这种方法处理约束条件的例子。
GENOCOP系统是一个用于求解具有线性约束条件数值优化问题的遗传算法程序。该系统提供了一种与问题无关的约束条件处理方法。其主要思想是:①采用线性约束中的等式消除某些变量以减少变量数目,即用其他变量的线性组合来取代这些变量,并据此修改线性不等式;②精心地设计一些专门的遗传算子以保持染色体的可行性。
下面用一个例子来说明GENOCOP 系统求解具有线性约束条件的数值优化问题的过程。
考虑下列优化问题:
上面3个等式是线性无关的,即没有任何一个方程可以表示为其他方程的线性组合,但有6个变量,故有3个变量可以表示为其他变量的线性组合,例如有:
于是我们可以消除变量x1、x2、x3,从而可以将原问题转化为下列优化问题:
化简后得:
这样,原优化问题的约束条件可等价地表示为一些不等式。
将原问题化简后,我们可采用如下设计求解该问题的遗传算法。
(1)解的编码表示:用实数向量表示;
(2)遗传算子设计:遗传算子需要满足一个条件——对合法个体的操作结果仍然是合法个体。
由于约束都是线性的,因而易知可行区域是凸的,而凸集具有以下两条性质:
(1)对于凸集S 中任意两点s1,s2,其线性组合a·s1+(1-a)·s2 仍然在凸集S 中,其中a ∈[0,1];
(2)任意一条过凸集S 中一点s0 的直线p 与凸集的边界有且仅有两个交点(图3-1)。
图3-1 直线P与凸集边界的交点示意图
Michalewicz Z[5]将GENOCOP所使用的遗传算子分为两类:变异算子组和杂交算子组。这些算子利用了凸集的上述两个性质以保证后代个体的合法性。
1.变异算子组
(1)均匀变异算子。
由问题的可行解集合F 为凸集知,对任一点(x1,x2,…,xn)∈F,对任意1≤k ≤n,存在变量xk 的可行区间[l(k),r(k)],使得当其他变量xi(i=1,2,…,k-1,k+1,…,n)固定不变时,所有这些点都落在可行解集合F 中,即有:
(x1,…,xk-1,y,xk+1…,xn)∈F,当且仅当y ∈[l(k),r(k)]
例如,对上例而言,对可行点(x4,x5,x6)=(10,8,2)有:
假设(x1,…,xk,…,xn)的第k 个基因被选择进行变异,则经一致变异算子作用的结果为(x1,…,xk′,…,xn),其中xk′为区间[l(k),r(k)]中的一个随机数。
(2)边界变异算子。
假设(x1,…,xk,…,xn)的第k 个基因被选择进行变异,则经边界变异算子作用的结果为(x1,…,xk′,…,xn),其中xk′以相同的概率取l(k)或r(k)。
(3)非均匀变异算子。
设x=(x1,x2,…,xn)是要变异的个体,非均匀变异产生x 的一个后代:首先选一随机整数k ∈[1,n],然后产生后代x′=(x1,…,xk′,…,xn),其中:
2.杂交算子组(www.xing528.com)
(1)简单杂交。
给定两个父体:
x=(x1,x2,…,xn)和y=(y1,y2,…,yn)
简单杂交随机地在1~(n-1)之间选择一个杂交位置k,则杂交后得到的两个后代为:
y′=[y1,…,yk,α·yk+1+(1-α)xk+1,…,α·yn+(1-α)xn]
式中,α ∈[0,1]使得x′和y′是可行解。
(2)单点算术杂交。
给定两个父体:
x=(x1,x2,…,xn)和y=(y1,y2,…,yn)
简单杂交随机地在1~(n-1)之间选择一个杂交位置k,则杂交后得到的两个后代为:
式中,α 是一个动态范围的随机数,其范围根据x1,…,xk-1,xk+1,…,xn 和y1,…,yk-1,yk+1,…,yn 的值和约束条件求出:
其中:
(3)整体算术杂交。
给定两个父体:
x=(x1,x2,…,xn)和y=(y1,y2,…,yn)
整体算术杂交随机地在1~(n-1)之间选择一个杂交位置k,则杂交后得到的两个后代为:
x′=α·x+(1-α)·y 和y′=(1-α)·x+α·y
式中,α∈[0,1],是一个随机数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。