什么是遺傳算法?
遺傳算法是一種模擬自然選擇和遺傳機制的優化算法,可用于求解各種復雜的優化問題。遺傳算法的原理是基于達爾文進化論的基本思想,通過模擬生物進化的過程逐步優化問題的解。
Python中的遺傳算法模塊
Python中有很多遺傳算法模塊,其中包括DEAP、PyEvolve、PyGMO等。對于初學者來說,DEAP可能是最好的選擇。它提供了簡單易用的API以及廣泛的文檔和示例,使得入門非常容易。
如何使用DEAP
DEAP提供了各種工具來幫助我們構建遺傳算法,包括遺傳操作(交叉、變異)、選擇算子(輪盤賭、錦標賽)及評估函數等。下面是一個簡單的示例代碼來演示如何使用DEAP來求解二元函數的最小值:
import random from deap import creator, base, tools # 定義問題 creator.create("FitnessMin", base.Fitness, weights=(-1.0,)) creator.create("Individual", list, fitness=creator.FitnessMin) toolbox = base.Toolbox() # 注冊遺傳操作 toolbox.register("bit", random.randint, 0, 1) toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.bit, n=10) toolbox.register("population", tools.initRepeat, list, toolbox.individual) # 定義評估函數 def evalOneMax(individual): return sum(individual), toolbox.register("evaluate", evalOneMax) toolbox.register("mate", tools.cxTwoPoint) toolbox.register("mutate", tools.mutFlipBit, indpb=0.05) toolbox.register("select", tools.selTournament, tournsize=3) # 遺傳算法主體 def main(): # 隨機生成初始種群 pop = toolbox.population(n=50) # 迭代500代 for g in range(500): # 選擇下一代 offspring = toolbox.select(pop, len(pop)) # 復制下一代 offspring = list(map(toolbox.clone, offspring)) # 對下一代進行交叉和變異操作 for child1, child2 in zip(offspring[::2], offspring[1::2]): if random.random()< 0.5: toolbox.mate(child1, child2) del child1.fitness.values del child2.fitness.values for mutant in offspring: if random.random()< 0.05: toolbox.mutate(mutant) del mutant.fitness.values # 重新求解適應度值 invalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = toolbox.map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit # 將下一代替換當前種群 pop[:] = offspring # 輸出最優解 best_ind = tools.selBest(pop, 1)[0] print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values)) if __name__ == '__main__': main()