正在打开模型库
正在打开模型库
模仿选择、交叉、变异,在巨大组合空间里搜近优解。
精确算法走不下去时,让一群“方案”互相交配迭代,留下更好的。
解空间爆炸、精确求解超时,但又必须给出可执行方案时用。
Python 代码
import random
def fitness(bits):
return sum(bits)
pop = [[random.randint(0, 1) for _ in range(8)] for _ in range(20)]
for _ in range(30):
pop.sort(key=fitness, reverse=True)
nxt = pop[:4]
while len(nxt) < 20:
a, b = random.sample(pop[:10], 2)
cut = random.randint(1, 7)
child = a[:cut] + b[cut:]
if random.random() < 0.2:
i = random.randrange(8)
child[i] ^= 1
nxt.append(child)
pop = nxt
print(pop[0], fitness(pop[0]))