车间调度遗传算法相关-python
遗传算法:编码√-解码(根据车间环境写)-判断(根据所选⽬标写)-选择√-交叉√-变异√
遗传算法解车间调度问题的边⾓程序基本如下,核⼼代码是解码,根据车间约束条件写。其中有⼀个适应度函数根据车间⽬标写。编码
import random
def code(workpeice_number, process_number):
a =[i for i in range(workpeice_number)]* process_number
random.shuffle(a)
return a
赌选择
def roulette_selection(population):
new_pop =[]
temp_fitness =[]
for i in population:
temp_fitness.append(get_fitness(i))
#
# 精英保留策略在此位置写⽐较好
#
max_fitness =max(temp_fitness)
min_fitness =min(temp_fitness)
for i in range(len(population)):
temp_fitness[i]/= max_fitness - min_fitness
temp =0
while len(new_pop)!=len(population):
if temp_fitness[temp]> random.random():
new_pop.append(population[temp])
temp +=1
if temp ==len(population):
temp =0
return new_pop
竞标赛选择
def tournament_selection(population, group_number):
new_pop =[]
#
# 精英保留策略在此处写⽐较好,下⾯可以优化:⾸先把所有的fitness全求出,下⾯⼀次求⼀批可能最终求fitness次数多于整体数量
#
for i in range(len(population)):
temp =[]
temp_fitness =[]
for j in range(group_number):
temp.append(random.choice(population))
temp_fitness.append(get_fitness(temp[j]))
new_pop.append(temp[temp_fitness.index(max(temp_fitness))])
return new_pop
POX交叉
def pox_crossover(code1, code2):
random_gens = random.choice(list(set(code1)))# 随机选中⼀个基因
code11, code12, code21, code22 =[],[],[],[]
for i in range(len(code1)):
code11.append(code1[i]if code1[i]== random_gens else666)# 得到两个部分        code12.append(888if code1[i]== random_gens else code1[i])
code21.append(code2[i]if code2[i]== random_gens else666)
code22.append(888if code2[i]== random_gens else code2[i])
for i in range(len(code1)):
if code11[i]==666:
a = code22.pop()
while a ==888:
a = code22.pop()
code11[i]= a
for i in range(len(code1)):
if code21[i]==666:random python
a = code12.pop()
while a ==888:
a = code12.pop()
code21[i]= a
return code11, code21
cod1 =[1,2,3,4,4,3,2,1,1]
cod2 =[1,1,2,3,2,3,4,4,1]
print(pox_crossover(cod1, cod2))
单点交叉
def one_point_crossover(code1, code2):
a = random.randint(0,len(code1)-1)
tem = code1[0:a]
code1[0:a]= code2[0:a]
code2[0:a]= tem
return code1, code2
随机变异
def random_mutation(codes):
a = random.randint(0,len(codes)-1)
b = random.randint(0,len(codes)-1)
temp = codes[a]
codes[a]= codes[b]
codes[b]= temp
return codes

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。