遗传算法在JobShop中的应用研究(part4:变异)
下面,我们以车间调度为例来谈谈遗传算法中的另一个重要操作变异。变异操作通常发生在交叉操作之后,它的操作对象是交叉得到的新染色体。在本文中我们通过随机交换染色体的两个位置上的值来得到变异后的染色体,变异操作的代码如下:
1 def Mutation(p)://p是染色体 2 nt = len(p)//nt存放染色体的长度 3 i = randint(0, nt - 1)//i是0到nt-1之间的一个随机数 4 j = randint(0, nt - 1)//j是0到nt-1之间的一个随机数 5 m = [job for job in p]//将染色体p复制到临时变量m中 6 m[i], m[j] = m[j], m[i]//交换m中i和j位置的值 7 return m//返回m
变异操作的图示如下:
变异前的染色体: ABCABCABC
随机选取两个位置:ABCABCABC
变异后的染色体:AACABCBBC