遗传算法库
holland的Python项目详细描述
荷兰
python的遗传算法库
Computer programs that "evolve" in ways that resemble natural selection can solve complex problems even their creators do not fully understand
说明
荷兰是Python中实现遗传算法的一个简单、灵活的程序包。该程序设计用于对群体中的个体进行任意编码的任意评估函数进行操作,这两个函数都由用户提供。
安装
Holland可通过Python Package Index (PyPI)获得,并可通过以下方式安装:
pip install holland
使用量
hello世界!
fromhollandimportEvolverfromholland.libraryimportget_uniform_crossover_functionfromholland.utilsimportbound_valueimportrandom# Define a fitness functiondeffitness_function(genome):message=genome["message"]target="Hello World!"score=0foriinrange(len(message)):score+=abs(ord(target[i])-ord(message[i]))returnscoredefmutation_function(value):mutated_value=ord(value)*random.random()*2returnchr(bound_value(mutated_value,minimum=32,maximum=126,to_int=True))# Define genome parameters for individualsgenome_params={"message":{"type":"[str]","size":len("Hello World!"),"initial_distribution":lambda:chr(random.randint(32,126)),"crossover_function":get_uniform_crossover_function(),"mutation_function":mutation_function,"mutation_rate":0.15}}# Define how to select individuals for reproductionselection_strategy={"pool":{"top":10}}# Run Evolutionevolver=Evolver(fitness_function,genome_params,selection_strategy,should_maximize_fitness=False)final_population=evolver.evolve(stop_conditions={"target_fitness":0})
使用示例运行:
Generation: 0; Top Score: 201: N~flx.JGcu-*
Generation: 1; Top Score: 98: Xljlw);mj]f
Generation: 2; Top Score: 64: =c}kk SmsYf
Generation: 3; Top Score: 37: Kcjlk$Vms]f
Generation: 4; Top Score: 24: Cdjkn Smshf
Generation: 5; Top Score: 16: Idjln Vmshf
Generation: 6; Top Score: 14: Idjln Voshf
Generation: 7; Top Score: 11: Hdjln Vmslf
Generation: 8; Top Score: 9: Hdjln Voslf
Generation: 9; Top Score: 8: Hdjln Vosle
Generation: 10; Top Score: 7: Hdmln Vosle
Generation: 11; Top Score: 6: Hdlln Vosle
Generation: 12; Top Score: 5: Hdllo Vosle
Generation: 13; Top Score: 4: Hdllo Vosle!
Generation: 14; Top Score: 3: Hello Vosle!
Generation: 15; Top Score: 2: Hello Wosle!
Generation: 16; Top Score: 2: Hello Wosle!
Generation: 17; Top Score: 1: Hello Worle!
Generation: 18; Top Score: 1: Hello Worle!
Generation: 19; Top Score: 1: Hello Worle!
Generation: 20; Top Score: 0: Hello World!
最佳基因组:
{'message':['H','e','l','l','o',' ','W','o','r','l','d','!']}