在前两篇博客里面,我们重点讲解了利用随机搜索的方法解决车间调度问题,流程图如下:
在本篇博客中,我们将介绍如何利用遗传算法来解决车间调度问题。具体的算法流程图如下:
与上面流程图相对应的遗传算法的整体代码如下:
import random
1 """pop是种群,种群中的每个个体是一个二元组,格式为:(该可行解的总完成时间, 可行解编码列表)"""
2 pop = [(ComputeStartTimes(g, I)[-1], g) for g inInitPopulation(ps, I)]3 for it in range(1, mit+1):"""mit是迭代次数,由用户指定"""
4 #Random ordering of the population
5 random.shuffle(pop)"""把pop中各个个体的顺序打乱"""
6 hpop = len(pop) / 2"""hpop是种群的一半"""
7 for i in range(hpop):"""遍历种群的前半部分份"""
8 if random() < 0.3:"""若[0,1]之间的随机数 < 0.3(0.3是交叉概率,用户自行指定)"""
9 #Create two new elements
10 ch1 = Crossover(pop[i][1], pop[hpop + i][1], I)"""通过交叉生成一个新解"""
11 ch2 = Crossover(pop[hpop + i][1], pop[i][1], I)"""通过交叉生成一个新解"""
12 if random() < 0.1:"""若[0,1]之间的随机数 < 0.1(0.1是变异概率,用户自行指定)"""
13 ch1 = Mutation(ch1)"""对第一个新解进行变异"""
14 if random() < 0.1:"""若[0,1]之间的随机数 <