首页 > 编程语言 >python实现一个遗传算法

python实现一个遗传算法

时间:2023-03-20 09:56:06浏览次数:38  
标签:offspring2 python random crossover 实现 fitness 遗传算法 chromosome population

###################

 

 

import random

# 染色体长度
CHROMO_LENGTH = 20
# 种群大小
POP_SIZE = 50
# 交叉概率
CROSS_RATE = 0.8
# 变异概率
MUTATE_RATE = 0.01
# 最大迭代次数
N_GENERATIONS = 200


# 适应度函数
def fitness_function(chromosome):
    return sum(chromosome)


# 创建初始种群
def create_population():
    population = []
    for i in range(POP_SIZE):
        chromosome = [random.randint(0, 1) for _ in range(CHROMO_LENGTH)]
        population.append(chromosome)
    return population


# 选择函数
def select(population, fitness):
    fitness_sum = sum(fitness)
    p = [f / fitness_sum for f in fitness]
    index = random.choices(range(POP_SIZE), p=p)
    return population[index[0]]


# 交叉函数
def crossover(parent1, parent2):
    if random.random() < CROSS_RATE:
        crossover_point = random.randint(0, CHROMO_LENGTH)
        offspring1 = parent1[:crossover_point] + parent2[crossover_point:]
        offspring2 = parent2[:crossover_point] + parent1[crossover_point:]
    else:
        offspring1, offspring2 = parent1, parent2
    return offspring1, offspring2


# 变异函数
def mutate(chromosome):
    for i in range(CHROMO_LENGTH):
        if random.random() < MUTATE_RATE:
            chromosome[i] = 1 - chromosome[i]
    return chromosome


# 遗传算法主函数
def genetic_algorithm():
    population = create_population()
    for generation in range(N_GENERATIONS):
        fitness = [fitness_function(chromosome) for chromosome in population]
        new_population = []
        for _ in range(POP_SIZE // 2):
            parent1 = select(population, fitness)
            parent2 = select(population, fitness)
            offspring1, offspring2 = crossover(parent1, parent2)
            offspring1 = mutate(offspring1)
            offspring2 = mutate(offspring2)
            new_population.append(offspring1)
            new_population.append(offspring2)
        population = new_population
    return max(population, key=fitness_function)


if __name__ == '__main__':
    print(genetic_algorithm())

 

 

##############

 

###################

标签:offspring2,python,random,crossover,实现,fitness,遗传算法,chromosome,population
From: https://www.cnblogs.com/igoodful/p/17235285.html

相关文章

  • Matter 如何实现跨生态系统的互联互通?(转自乐鑫博客)
    如上图所示,位于中心位置的灯泡可以同时在来自于两个由不同组织(Org1和Org2)的生态系统(绿色和红色)中稳定运行。这就是Matter的Multi-Admin功能。它是解决智能家居场景......
  • Java stream sorted自定义排序规则实现多字段排序
      Stream提供了丰富的操作(中间操作和终端操作)集合元素的轮子,但Stream流操作不影响原始集合数据,执行结果是一个新的集合对象。在《Javastreamsorted使用Comparator进......
  • Python 多进程、多线程对比(转载)
    https://www.runoob.com/w3cnote/python-single-thread-multi-thread-and-multi-process.html具体实验见原文,这里只是引用实验结果,方便查询......
  • 记一次,使用python实现一键在爱发电发布带图片的动态
    1、背景本人喜欢转载一些youtube上的视频到b站上面,然后就会有些观众想要视频的封面,那我总不可能一个一个发吧,太麻烦了。故打算将资源发布到爱发电上面。但是爱发电却没有......
  • ElasticSearch 实现分词全文检索 - 高亮查询
    目录ElasticSearch实现分词全文检索-概述ElasticSearch实现分词全文检索-ES、Kibana、IK安装ElasticSearch实现分词全文检索-Restful基本操作ElasticSearch......
  • 随机森林python代码
    载入数据importpandasaspd#Loaddatamelbourne_file_path='../input/melbourne-housing-snapshot/melb_data.csv'melbourne_data=pd.read_csv(melbourne_file......
  • biopython Sequence相关
    参考:http://biopython.org/DIST/docs/tutorial/Tutorial.html1.构建Seq()对象fromBio.SeqimportSeqmyseq=Seq("AGTACACTCA")print(myseq)#AGTACACTCAprint(typ......
  • Python之json模块
    1.python的json模块介绍Python的json模块提供了处理JSON数据的功能。JSON(JavaScriptObjectNotation)是一种轻量级的文本数据格式,使用类似于JavaScript对象的方式......
  • Python之random模块
    1.python的random模块介绍Python的random模块是用于生成随机数的标准库,支持生成伪随机数、shuffle操作和随机选择操作等。下面是random模块的方法分类介绍2.生成随机数......
  • Python format 格式化函数
    Python2.6开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format函数可以接受不限个参......