• 遗传算法实例分析


    视频B站地址:https://www.bilibili.com/video/BV1Yg411T7W2/

    #date:2021-07-07
    #author:会武术之白猫
    #theme:遗传算法实例
    
    import random
    
    def create_answer(numbers_set,n):
        result=[]
        for i in range(n):
            result.append(random.sample(numbers_set,10))
        return result
    
    def error_level(new_answer,numbers_set):
        error=[]
        right_answer=sum(numbers_set)/10
        for item in new_answer:
            value=abs(right_answer-sum(item))
            if value==0:
                error.append(10)
            else:
                error.append(1/value)
        return error
    
    def choice_selected(old_answer,numbers_set):
        result=[]
        error=error_level(old_answer,numbers_set)
        error_one=[item/sum(error) for item in error]
        for i in range(1,len(error_one)):
            error_one[i]+=error_one[i-1]
        for i in range(len(old_answer)//2):
            temp=[]
            for j in range(2):
                rand=random.uniform(0,1)
                for k in range(len(error_one)):
                    if k==0:
                        if rand<error_one[k]:
                            temp.append(old_answer[k])
                    else:
                        if rand>=error_one[k-1] and rand<error_one[k]:
                            temp.append(old_answer[k])
            rand=random.randint(0,6)
            temp_1=temp[0][:rand]+temp[1][rand:rand+3]+temp[0][rand+3:]
            temp_2=temp[1][:rand]+temp[0][rand:rand+3]+temp[1][rand+3:]
            result.append(temp_1)
            result.append(temp_2)
        return result
    
    def variation(old_answer,numbers_set,pro):
        for i in range(len(old_answer)):
            rand=random.uniform(0,1)
            if rand<pro:
                rand_num=random.randint(0,9)
                old_answer[i]=old_answer[i][:rand_num]+random.sample(numbers_set,1)+old_answer[i][rand_num+1:]
        return old_answer
    
    numbers_set=random.sample(range(0,1000),50)
    middle_answer=create_answer(numbers_set,100)
    first_answer=middle_answer[0]
    great_answer=[]
    for i in range(1000):
        middle_answer=choice_selected(middle_answer,numbers_set)
        middle_answer=variation(middle_answer,numbers_set,0.1)
        error=error_level(middle_answer,numbers_set)
        index=error.index(max(error))
        great_answer.append([middle_answer[index],error[index]])
    great_answer.sort(key=lambda x:x[1],reverse=True)
    print("正确答案为",sum(numbers_set)/10)
    print("给出的最优解为",great_answer[0][0])
    print("该和为",sum(great_answer[0][0]))
    print("选择系数为",great_answer[0][1])
    print("最初解的和为",sum(first_answer))

  • 相关阅读:
    实例之内存体系结构(1)--- 共享池(Share pool)
    体系结构 --- 实例和数据库
    分页查询与TOP-N特性
    MERGE 和 WITH语法
    外部表
    SQL语句(9)--- 同义词
    SQL语句(8)--- 索引
    SQL语句(7)--- 视图
    SQL语句(6)--- 约束
    死锁的产生与解决
  • 原文地址:https://www.cnblogs.com/ljy1227476113/p/14983554.html
Copyright © 2020-2023  润新知