zoukankan      html  css  js  c++  java
  • 遗传算法之背包问题

    题目引用:https://zhuanlan.zhihu.com/p/28328304

    def gen():
        #print(gen_grade([0, 1, 1, 0, 1, 1]))
        seeds = [[1,0,0,1,1,0], [0,0,1,1,1,0],[0,1,0,1,0,0],[0,1,1,0,0,1]]
        count_down = 1000
        while count_down > 0:
            grade_table = [(seed,gen_grade(seed)) for seed in seeds]
            best = max(grade_table,key = lambda x:x[1])
            print(best)
            # print(seeds)
            dad = survival(grade_table)
            mom = survival([(s,g) for s,g in grade_table if s != dad])
            seeds = [dad, mom] + off_spring(dad, mom) +[best[0]]
            # print(seeds)
            count_down -= 1
    
    
    def off_spring(dad, mom):
        bro, sis = dad[:3] + mom[3:],mom[:3] + dad[3:]
        #变异
        r =  random.randint(0,5)
        monster = bro.copy()
        # print(r, monster)
        monster[r] = 1 if monster[r] == 0 else 0
        # print(monster)
        return [bro, sis, monster]
    
    def survival(grade_table):
        total = sum([g for s,g, in grade_table])
        r = random.randint(0,total)
        total = 0
        for seed, g in grade_table:
            total += g
            if r <= total:
                return seed
        print (r, grade_table)
    
    
    
    def gen_grade(chromosome):
        grade_table = [(15,15),(3,7),(2,10),(5,5),(9,8),(20,17)]
        grades = [grade_table[i] for i,x in enumerate(chromosome) if x > 0]
        if sum([w for w,s in grades]) > 30:
            return 0
        return sum([s for w,s in grades])
  • 相关阅读:
    shell
    regionMatches方法
    ==
    使用INTO子句创建新表
    数据库除运算
    数据库笛卡尔积运算
    人生格言
    刚开通~
    Nginx:413 Request Entity Too Large
    ORACLE 查看并修改最大连接数
  • 原文地址:https://www.cnblogs.com/goodspeed/p/11661046.html
Copyright © 2011-2022 走看看