2. (2) 个体适应度评价 基本遗传算法 按与个体适应度成正比的概率来决定当前群体中每个个体遗传 到下一代群体中的机会多少。 为正确计算这个概率,这里要求所有个体的适应 度必须为正数或零。这样,根据不同种类的问题,必须预先确定好由目标函数 值到个体适应度之间的转换规则,特别是要预先确定好当目标函数值为负数时 的处理方法。 (3) 遗传算子 基本遗传算法使用下述三种遗传算子: • 选择运算:使用 比例选择算子 ; • 交叉运算:使用 单点交叉算子 ; • 变异运算:使用 基本位变异算子 。 (4) 基本遗传算法的运行参数 基本遗传算法有下述 4 个运行参数需要提前设定: • M :群体大小,即群体中所含个体的数量,一般取为 20 ~ 100 。 • T :遗传运算的终止进化代数,一般取为 100 ~ 500 • p c :交叉概率,一般取为 0.4 ~ 0.99 • p m :变异概率,一般取为 0.0001 ~ 0.1
3. [ 说明 ] 这 4 个运行参数对遗传算法的求解结果和求解效率都有一定的影响,但目前 尚无合理选择它们的理论依据。在遗传算法的实际应用中,往往需要经过多次试 算后才能确定出这些参数合理的取值大小或取值范围。 7.1.2 基本遗传算法的形式化定义 基本遗传算法可定义为一个 7 元组: GA = (M, F, s, c, m, p c , p m ) M—— 群体大小; F—— 个体适应度评价函数; s—— 选择操作算于; c—— 交叉操作算子: m—— 变异操作算于; p c —— 交叉概率; p m —— 变异概率;
4. 7.1.3 基本遗传算法描述 Procedure GA Begin initialize P(0); t=0; while (t<=T) do for i=1 to M do Evaluate fitness of P(t); end for for i=1 to M do Select operation to P(t); end for for i=1 to M/2 do Crossover operation to P(t); end for for i=1 to M do Mutation operation to P(t); end for for i=1 to M do P(t+1) = P(t); end for t=t+1 end while end
5. 7.2 基本遗传算法的实现 根据上面对基本遗传算法构成要素的分析和算法描述,我们可以很方便地用计 算机语言来实现这个基本遗传算法。 现对具体实现过程中的问题作以下说明: 7.2.1 编码与解码 (1) 编码 假设某一参数的取值范围是 [u min , u max ] ,我们用长度为 的二进制编码符号串来表示该参数,则它总共能够产生 2 种不同的编码,参数编码时的对应关系如下: 00000000…00000000 = 0 u min 00000000…00000001 = 1 u min + 00000000…00000010 = 2 u min + 2 …… 11111111…11111111=2 –1 u max
6. 其中, 为二进制编码的编码精度,其公式为: (2) 解码 假设某一个体的编码是: x : b b -1 b -2 ……b 2 b 1 则对应的解码公式为: x = u min + ( b i · 2 i-1 ) · 1 i= U max u min 2 1 = U max u min 2 1
7.
8.
9. 基本遗传算法一般采用下面两种方法之一将目标函数值 f(x) 变换为个体的适应度 F(x) : 方法一 :对于求目标函数最大值的优化问题,变换方法为: 其中, C min 为一个适当地相对比较小的数,它可用下面方法之一来选取: • 预先指定的一个较小的数。 • 进化到当前代为止的最小目标函数值。 • 当前代或最近几代群体中的最小目标函数值。 方法二 :对于求目标函数最小值的优化问题,变换方法为: 其中, C max 是一个适当地相对比较大的数,它可用下面几种方法求得: • 预先指定的一个较大的数。 • 进化到当前代为止的最大目标函数值。 • 当前代或最近几代群体中的最大目标函数值。 F(X) = f(X)+C min if f(X)+C min > 0 0 if f(X)+C min ≤ 0 F(X) = C max - f(X) if f(X) C max 0 if f(X) C max
10. 7.2.3 比例选择算子 (1) 选择算子或复制算子的作用: 从当前代群体中选择出一些比较优良的个体,并将其复制到下一代群体中。 (2) 最常用和最基本的选择算子 : 比例选择算子。 (3) 比例选择算子: 指个体被选中并遗传到下一代群体中的概率与该个体的适应度大小成正比。 (4) 执行比例选择的手段是轮盘选择。 轮盘法的基本精神是:个体被选中的概率取决于个体的相对适应度: p i = f i / f i ( i=1,2,…,M ) 式中 p i —— 个体 i 被选中的概率; f i —— 个体 i 的适应度; f i —— 群体的累加适应度。 显然,个体适应度愈高,被选中的概率愈大。但是,适应度小的个体也有可 能被选中,以便增加下一代群体的多样性。
12. 上述轮盘选择过程,可描述如下: Ⅰ . 顺序累计群体内各个体的适应度,得相应的累计值 S i ,最后一个累计值为 S n ; Ⅱ . 在 [0, S n ] 区间内产生均匀分布的随机数 r ; Ⅲ . 依次用 S i 与 r 比较,第一个出现 S i 大于或等于 r 的个体 j 被选为复制对象; Ⅳ . 重复 Ⅲ 、 Ⅳ 项,直至新群体的个体数目等于父代群体的规模。 [ 论盘选择示例 ]
13. 7.2.4 单点交叉算子 (1) 交叉算子作用 通过交叉,子代的基因值不同于父代。交换是遗传算法产生新个体的主要手段。正是有了交换操作,群体的性态才多种多样。 (2) 最常用和最基本 ——单点交叉算子。 (3) 单点交叉算子的具体计算过程如下: Ⅰ . 对群体中的个体进行两两 随机 配对。 若群体大小为 M ,则共有 [ M/2 ] 对相互 配对的个体组。 Ⅱ . 每一对相互配对的个体, 随机 设置某一基因座之后的位置为交叉点。 若染色体的长度为 ,则共有 ( -1) 个可能的交 叉点位置。 Ⅲ . 对每一对相互配对的个体,依设定的交叉概率 p c 在其 交 叉点处相互交换两个个 体的部分染色体,从而产生出两个新的个体。 单点交叉运算的示 例 如下所示 : 单点交叉 A ; 10110111 00 A ’ : 10110111 11 B : 00011100 11 B ’ : 00011100 00
14. 交叉概率 式中 M—— 群体中个体的数目; M c —— 群体中被交换个体的数目。 [ 交叉操作示例 ] 交叉的个体是随机确定的,如下表所示。某群体有 n 个个体,每个个体含 8 个等位基因。针对每个个体产生一个 [0, 1] 区间的均匀随机数。假设交叉概率 p c = 0.6 ,则随机数小于 0.6 的对应个体与其随机确定的另一个个体交叉,交叉 点随机确定。 p c = M c M 个体编号 个体 随机数 交叉操作 新个体 1 11011000 0.728 11011000 2 10101011 0.589 101010 11 101010 01 3 00101100 0.678 00101100 4 10001101 0.801 100011 01 100011 11 … … … … …
15. 7.2.5 基本位变异算子 基本位变异算子是最简单和最基本的变异操作算子。 对于基本遗传算法中用二进制编码符号串所表示的个体,若需要进行变异操作 的某一基因座上的原有基因值为 0 ,则变异操作将该基因值变为 1 ,反之,若原有 基因值为 1 ,则变异操作将其变为 0 。 基本位变异因子的具体执行过程是: Ⅰ . 对个体的每一个基因座,依变异概率 p m 指定其为变异点。 Ⅱ . 对每一个指定的变异点,对其基因值做取反运算或用其它等位基因值来代替, 从而产生出一个新的个体。 基本位变异运算的示例如下所示: A : 1010 1 01010 A ’ : 1010 0 01010 变异点 基本位变异
18. 7.2.6 算法流程图 开始 Gen=0 编码 随机产生 M 个初始个体 满足终止条件 ? 计算群体中各个体适应度 从左至右依次执行遗传算子 j = 0 j = 0 j = 0 根据适应度选择复制个体 选择两个交叉个体 选择个体变异点 执行变异 执行交叉 执行复制 将复制的个体添入新群体中 将交叉后的两个新个体添入新群体中 将变异后的个体添入新群体中 j = j+1 j = j+2 j = j+1 j = M ? j = p c ·M ? j = p m ·L·M ? Gen=Gen+1 输出结果 终止 Y N Y Y Y N N N p c p m
20. 下面介绍求解该问题的遗传算法的构造过程: 第一步 :确定决策变量及其约束条件。 s.t. -2.048 ≤ x i ≤ 2.048 (x i =1,2) 第二步: 建立优化模型。 max f(x 1 ,x 2 ) = 100 (x 1 2 -x 2 2 ) 2 + (1-x 1 ) 2 第三步; 确定编码方法。 用长度为 l0 位的二进制编码串来分别表示二个决策变量 x 1 ,x 2 。 lO 位二进制编码串可以表示从 0 到 1023 之间的 1024 个不同的数,故将 x 1 ,x 2 的定义域离散化为 1023 个均等的区域,包括两个端点在内共有 1024 个不同的离散点。从离散点 -2.048 到离散点 2.048 ,依次让它们分别 对应于从 0000000000(0) 到 1111111111(1023) 之间的二进制编码。再将分别表示 x 1 和 x 2 的二个 10 位长的二进制编码串连接在一起,组成一个 20 位长的二进制编码串,它就构成了这个函数优化问题的染色体编码方法。例如 X : 0000110111 11011 10001 就表示一个个体的基因型。
21. 第四步: 确定解码方法。 解码时先将 20 位长的二进制编码串切断为二个 10 位长的二进制编码串,然后分别将它们转换为对应的十进制整数代码,分别记为 y 1 和 y 2 。 依据前述个体编码方法相对定义域的离散化方法可知,将代码 y i 转换为变量 x i 的解码公式为: 例如,对前述个体 X : 0000110111 11011 10001 它由这样的两个代码所组成: y 1 = 55 y 2 = 881 经上式的解码处理后,得到: x 1 = -1.828 x 2 = 1.476 x i = 4.096 y i 1023 2.048 ( i = 1,2)