遗传算法车间调度问题
遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
再给出相关术语:(各位看看就好,后面都会涉及到,再细说)
基因型(genotype):性状染色体的内部表现;
表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
适应度(fitness):度量某个物种对于生存环境的适应程度。
选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
解码(decoding):基因型到表现型的映射。
个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群的大小。
问题:
import random
import numpy as np
def dealNums(nums):
fact_n=len(nums)#取得零件数
machine_n=len(nums[0])#机器数量
fact=[1 for i in range(fact_n)]#每个零件总时长,一个零件的工作量看成整体为1
result = [[] for i in range(machine_n)]#机器加工完成零件的表
while True:
if sum(fact)==0:#当所有零件工时都完成退出循环
break
chioc=[i for i in range(fact_n)]# 创建随机选择数组就是零件编号
for i in range(machine_n):#循环机器编号
val=random.choice(chioc)#随机选择零件编号
chioc.remove(val)#选择完后移除
if(fact[val])==0:#如果这个零件编号的工作量为0就添加标记
result[i].append('')
continue
result[i].append(val)#不为0就向工资表里面添加零件的编号
fact[val] -= 1 / nums[val][i]#减去零件在i号机器中总时间分之一
if fact[val] < 0:#剩余高质量要大于等于0
fact[val] = 0
# print(len(result[0]))
return result
# 计算传入工作表的工作量还能剩余多少
#answer工资表,n截取下标
def start (answer,n):
global nums
res = [1 for i in range(len